@plumpslabs/fennec-cli 1.12.1 → 1.12.2
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.
- package/dist/index.js +15 -3084
- package/dist/index.js.map +1 -1
- package/package.json +2 -3
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/debug.js","../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/utils.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/styles.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/has-flag.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/supports-colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/trap.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/zalgo.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/america.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/zebra.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/rainbow.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/random.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/safe.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/cell.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/layout-manager.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/table.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/index.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/package.json","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/constants.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/DisplayVersion.js","../../../node_modules/.pnpm/has-flag@4.0.0/node_modules/has-flag/index.js","../../../node_modules/.pnpm/supports-color@8.1.1/node_modules/supports-color/index.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Options.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Color.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Debugging.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Colorize.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/AddLetterSpacing.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/GetFirstCharacterPosition.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/GetLongestLine.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Gradient.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/CharLength.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/CheckInput.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/CleanInput.js","../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/implementation.js","../../../node_modules/.pnpm/function-bind@1.1.2/node_modules/function-bind/index.js","../../../node_modules/.pnpm/hasown@2.0.4/node_modules/hasown/index.js","../../../node_modules/.pnpm/is-accessor-descriptor@1.0.2/node_modules/is-accessor-descriptor/index.js","../../../node_modules/.pnpm/is-data-descriptor@1.0.1/node_modules/is-data-descriptor/index.js","../../../node_modules/.pnpm/is-descriptor@1.0.4/node_modules/is-descriptor/index.js","../../../node_modules/.pnpm/define-property@1.0.0/node_modules/define-property/index.js","../../../node_modules/.pnpm/is-buffer@1.1.6/node_modules/is-buffer/index.js","../../../node_modules/.pnpm/kind-of@3.2.2/node_modules/kind-of/index.js","../../../node_modules/.pnpm/is-number@3.0.0/node_modules/is-number/index.js","../../../node_modules/.pnpm/window-size@1.1.1/node_modules/window-size/utils.js","../../../node_modules/.pnpm/window-size@1.1.1/node_modules/window-size/index.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Size.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/AlignText.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/AddLine.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/AddChar.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/GetFont.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Log.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Render.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/DisplayHelp.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/AddShortcuts.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/ParseArgs.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/Say.js","../../../node_modules/.pnpm/cfonts@3.3.1/node_modules/cfonts/lib/index.js","../src/utils/format.ts","../src/utils/banner.ts","../src/utils/help.ts","../src/commands/pipe.ts","../src/commands/attach-pid.ts","../src/commands/attach-port.ts","../src/commands/watch.ts","../src/commands/start.ts","../src/commands/tracker.ts","../src/utils/system-process.ts","../src/commands/ps.ts","../src/commands/kill.ts","../src/commands/restart.ts","../src/commands/log.ts","../src/commands/attach.ts","../src/commands/sessions.ts","../src/commands/setup.ts","../src/commands/management.ts","../src/commands/health.ts","../src/index.ts"],"sourcesContent":["let messages = [];\nlet level = 0;\n\nconst debug = (msg, min) => {\n if (level >= min) {\n messages.push(msg);\n }\n};\n\ndebug.WARN = 1;\ndebug.INFO = 2;\ndebug.DEBUG = 3;\n\ndebug.reset = () => {\n messages = [];\n};\n\ndebug.setDebugLevel = (v) => {\n level = v;\n};\n\ndebug.warn = (msg) => debug(msg, debug.WARN);\ndebug.info = (msg) => debug(msg, debug.INFO);\ndebug.debug = (msg) => debug(msg, debug.DEBUG);\n\ndebug.debugMessages = () => messages;\n\nmodule.exports = debug;\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\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\\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])|\\uD83C[\\uDF3E\\uDF73\\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])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\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])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\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\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\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\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\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\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*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\\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\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\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[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\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\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","const stringWidth = require('string-width');\n\nfunction codeRegex(capture) {\n return capture ? /\\u001b\\[((?:\\d*;){0,5}\\d*)m/g : /\\u001b\\[(?:\\d*;){0,5}\\d*m/g;\n}\n\nfunction strlen(str) {\n let code = codeRegex();\n let stripped = ('' + str).replace(code, '');\n let split = stripped.split('\\n');\n return split.reduce(function (memo, s) {\n return stringWidth(s) > memo ? stringWidth(s) : memo;\n }, 0);\n}\n\nfunction repeat(str, times) {\n return Array(times + 1).join(str);\n}\n\nfunction pad(str, len, pad, dir) {\n let length = strlen(str);\n if (len + 1 >= length) {\n let padlen = len - length;\n switch (dir) {\n case 'right': {\n str = repeat(pad, padlen) + str;\n break;\n }\n case 'center': {\n let right = Math.ceil(padlen / 2);\n let left = padlen - right;\n str = repeat(pad, left) + str + repeat(pad, right);\n break;\n }\n default: {\n str = str + repeat(pad, padlen);\n break;\n }\n }\n }\n return str;\n}\n\nlet codeCache = {};\n\nfunction addToCodeCache(name, on, off) {\n on = '\\u001b[' + on + 'm';\n off = '\\u001b[' + off + 'm';\n codeCache[on] = { set: name, to: true };\n codeCache[off] = { set: name, to: false };\n codeCache[name] = { on: on, off: off };\n}\n\n//https://github.com/Marak/colors.js/blob/master/lib/styles.js\naddToCodeCache('bold', 1, 22);\naddToCodeCache('italics', 3, 23);\naddToCodeCache('underline', 4, 24);\naddToCodeCache('inverse', 7, 27);\naddToCodeCache('strikethrough', 9, 29);\n\nfunction updateState(state, controlChars) {\n let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0;\n if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) {\n state.lastForegroundAdded = controlChars[0];\n return;\n }\n if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) {\n state.lastBackgroundAdded = controlChars[0];\n return;\n }\n if (controlCode === 0) {\n for (let i in state) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(state, i)) {\n delete state[i];\n }\n }\n return;\n }\n let info = codeCache[controlChars[0]];\n if (info) {\n state[info.set] = info.to;\n }\n}\n\nfunction readState(line) {\n let code = codeRegex(true);\n let controlChars = code.exec(line);\n let state = {};\n while (controlChars !== null) {\n updateState(state, controlChars);\n controlChars = code.exec(line);\n }\n return state;\n}\n\nfunction unwindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret += codeCache[key].off;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret += '\\u001b[49m';\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret += '\\u001b[39m';\n }\n\n return ret;\n}\n\nfunction rewindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret = codeCache[key].on + ret;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret = lastBackgroundAdded + ret;\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret = lastForegroundAdded + ret;\n }\n\n return ret;\n}\n\nfunction truncateWidth(str, desiredLength) {\n if (str.length === strlen(str)) {\n return str.substr(0, desiredLength);\n }\n\n while (strlen(str) > desiredLength) {\n str = str.slice(0, -1);\n }\n\n return str;\n}\n\nfunction truncateWidthWithAnsi(str, desiredLength) {\n let code = codeRegex(true);\n let split = str.split(codeRegex());\n let splitIndex = 0;\n let retLen = 0;\n let ret = '';\n let myArray;\n let state = {};\n\n while (retLen < desiredLength) {\n myArray = code.exec(str);\n let toAdd = split[splitIndex];\n splitIndex++;\n if (retLen + strlen(toAdd) > desiredLength) {\n toAdd = truncateWidth(toAdd, desiredLength - retLen);\n }\n ret += toAdd;\n retLen += strlen(toAdd);\n\n if (retLen < desiredLength) {\n if (!myArray) {\n break;\n } // full-width chars may cause a whitespace which cannot be filled\n ret += myArray[0];\n updateState(state, myArray);\n }\n }\n\n return unwindState(state, ret);\n}\n\nfunction truncate(str, desiredLength, truncateChar) {\n truncateChar = truncateChar || '…';\n let lengthOfStr = strlen(str);\n if (lengthOfStr <= desiredLength) {\n return str;\n }\n desiredLength -= strlen(truncateChar);\n\n let ret = truncateWidthWithAnsi(str, desiredLength);\n\n ret += truncateChar;\n\n const hrefTag = '\\x1B]8;;\\x07';\n\n if (str.includes(hrefTag) && !ret.includes(hrefTag)) {\n ret += hrefTag;\n }\n\n return ret;\n}\n\nfunction defaultOptions() {\n return {\n chars: {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '┌',\n 'top-right': '┐',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '└',\n 'bottom-right': '┘',\n left: '│',\n 'left-mid': '├',\n mid: '─',\n 'mid-mid': '┼',\n right: '│',\n 'right-mid': '┤',\n middle: '│',\n },\n truncate: '…',\n colWidths: [],\n rowHeights: [],\n colAligns: [],\n rowAligns: [],\n style: {\n 'padding-left': 1,\n 'padding-right': 1,\n head: ['red'],\n border: ['grey'],\n compact: false,\n },\n head: [],\n };\n}\n\nfunction mergeOptions(options, defaults) {\n options = options || {};\n defaults = defaults || defaultOptions();\n let ret = Object.assign({}, defaults, options);\n ret.chars = Object.assign({}, defaults.chars, options.chars);\n ret.style = Object.assign({}, defaults.style, options.style);\n return ret;\n}\n\n// Wrap on word boundary\nfunction wordWrap(maxLength, input) {\n let lines = [];\n let split = input.split(/(\\s+)/g);\n let line = [];\n let lineLength = 0;\n let whitespace;\n for (let i = 0; i < split.length; i += 2) {\n let word = split[i];\n let newLength = lineLength + strlen(word);\n if (lineLength > 0 && whitespace) {\n newLength += whitespace.length;\n }\n if (newLength > maxLength) {\n if (lineLength !== 0) {\n lines.push(line.join(''));\n }\n line = [word];\n lineLength = strlen(word);\n } else {\n line.push(whitespace || '', word);\n lineLength = newLength;\n }\n whitespace = split[i + 1];\n }\n if (lineLength) {\n lines.push(line.join(''));\n }\n return lines;\n}\n\n// Wrap text (ignoring word boundaries)\nfunction textWrap(maxLength, input) {\n let lines = [];\n let line = '';\n function pushLine(str, ws) {\n if (line.length && ws) line += ws;\n line += str;\n while (line.length > maxLength) {\n lines.push(line.slice(0, maxLength));\n line = line.slice(maxLength);\n }\n }\n let split = input.split(/(\\s+)/g);\n for (let i = 0; i < split.length; i += 2) {\n pushLine(split[i], i && split[i - 1]);\n }\n if (line.length) lines.push(line);\n return lines;\n}\n\nfunction multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {\n let output = [];\n input = input.split('\\n');\n const handler = wrapOnWordBoundary ? wordWrap : textWrap;\n for (let i = 0; i < input.length; i++) {\n output.push.apply(output, handler(maxLength, input[i]));\n }\n return output;\n}\n\nfunction colorizeLines(input) {\n let state = {};\n let output = [];\n for (let i = 0; i < input.length; i++) {\n let line = rewindState(state, input[i]);\n state = readState(line);\n let temp = Object.assign({}, state);\n output.push(unwindState(temp, line));\n }\n return output;\n}\n\n/**\n * Credit: Matheus Sampaio https://github.com/matheussampaio\n */\nfunction hyperlink(url, text) {\n const OSC = '\\u001B]';\n const BEL = '\\u0007';\n const SEP = ';';\n\n return [OSC, '8', SEP, SEP, url || text, BEL, text, OSC, '8', SEP, SEP, BEL].join('');\n}\n\nmodule.exports = {\n strlen: strlen,\n repeat: repeat,\n pad: pad,\n truncate: truncate,\n mergeOptions: mergeOptions,\n wordWrap: multiLineWordWrap,\n colorizeLines: colorizeLines,\n hyperlink,\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar styles = {};\nmodule['exports'] = styles;\n\nvar codes = {\n reset: [0, 0],\n\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n grey: [90, 39],\n\n brightRed: [91, 39],\n brightGreen: [92, 39],\n brightYellow: [93, 39],\n brightBlue: [94, 39],\n brightMagenta: [95, 39],\n brightCyan: [96, 39],\n brightWhite: [97, 39],\n\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgGray: [100, 49],\n bgGrey: [100, 49],\n\n bgBrightRed: [101, 49],\n bgBrightGreen: [102, 49],\n bgBrightYellow: [103, 49],\n bgBrightBlue: [104, 49],\n bgBrightMagenta: [105, 49],\n bgBrightCyan: [106, 49],\n bgBrightWhite: [107, 49],\n\n // legacy styles for colors pre v1.0.0\n blackBG: [40, 49],\n redBG: [41, 49],\n greenBG: [42, 49],\n yellowBG: [43, 49],\n blueBG: [44, 49],\n magentaBG: [45, 49],\n cyanBG: [46, 49],\n whiteBG: [47, 49],\n\n};\n\nObject.keys(codes).forEach(function(key) {\n var val = codes[key];\n var style = styles[key] = [];\n style.open = '\\u001b[' + val[0] + 'm';\n style.close = '\\u001b[' + val[1] + 'm';\n});\n","/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict';\n\nmodule.exports = function(flag, argv) {\n argv = argv || process.argv;\n\n var terminatorPos = argv.indexOf('--');\n var prefix = /^-{1,2}/.test(flag) ? '' : '--';\n var pos = argv.indexOf(prefix + flag);\n\n return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n'use strict';\n\nvar os = require('os');\nvar hasFlag = require('./has-flag.js');\n\nvar env = process.env;\n\nvar forceColor = void 0;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {\n forceColor = false;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')\n || hasFlag('color=always')) {\n forceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n forceColor = env.FORCE_COLOR.length === 0\n || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n if (level === 0) {\n return false;\n }\n\n return {\n level: level,\n hasBasic: true,\n has256: level >= 2,\n has16m: level >= 3,\n };\n}\n\nfunction supportsColor(stream) {\n if (forceColor === false) {\n return 0;\n }\n\n if (hasFlag('color=16m') || hasFlag('color=full')\n || hasFlag('color=truecolor')) {\n return 3;\n }\n\n if (hasFlag('color=256')) {\n return 2;\n }\n\n if (stream && !stream.isTTY && forceColor !== true) {\n return 0;\n }\n\n var min = forceColor ? 1 : 0;\n\n if (process.platform === 'win32') {\n // Node.js 7.5.0 is the first version of Node.js to include a patch to\n // libuv that enables 256 color output on Windows. Anything earlier and it\n // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n // release, and Node.js 7 is not. Windows 10 build 10586 is the first\n // Windows release that supports 256 colors. Windows 10 build 14931 is the\n // first release that supports 16m/TrueColor.\n var osRelease = os.release().split('.');\n if (Number(process.versions.node.split('.')[0]) >= 8\n && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n return Number(osRelease[2]) >= 14931 ? 3 : 2;\n }\n\n return 1;\n }\n\n if ('CI' in env) {\n if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {\n return sign in env;\n }) || env.CI_NAME === 'codeship') {\n return 1;\n }\n\n return min;\n }\n\n if ('TEAMCITY_VERSION' in env) {\n return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n );\n }\n\n if ('TERM_PROGRAM' in env) {\n var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n switch (env.TERM_PROGRAM) {\n case 'iTerm.app':\n return version >= 3 ? 3 : 2;\n case 'Hyper':\n return 3;\n case 'Apple_Terminal':\n return 2;\n // No default\n }\n }\n\n if (/-256(color)?$/i.test(env.TERM)) {\n return 2;\n }\n\n if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n return 1;\n }\n\n if ('COLORTERM' in env) {\n return 1;\n }\n\n if (env.TERM === 'dumb') {\n return min;\n }\n\n return min;\n}\n\nfunction getSupportLevel(stream) {\n var level = supportsColor(stream);\n return translateLevel(level);\n}\n\nmodule.exports = {\n supportsColor: getSupportLevel,\n stdout: getSupportLevel(process.stdout),\n stderr: getSupportLevel(process.stderr),\n};\n","module['exports'] = function runTheTrap(text, options) {\n var result = '';\n text = text || 'Run the trap, drop the bass';\n text = text.split('');\n var trap = {\n a: ['\\u0040', '\\u0104', '\\u023a', '\\u0245', '\\u0394', '\\u039b', '\\u0414'],\n b: ['\\u00df', '\\u0181', '\\u0243', '\\u026e', '\\u03b2', '\\u0e3f'],\n c: ['\\u00a9', '\\u023b', '\\u03fe'],\n d: ['\\u00d0', '\\u018a', '\\u0500', '\\u0501', '\\u0502', '\\u0503'],\n e: ['\\u00cb', '\\u0115', '\\u018e', '\\u0258', '\\u03a3', '\\u03be', '\\u04bc',\n '\\u0a6c'],\n f: ['\\u04fa'],\n g: ['\\u0262'],\n h: ['\\u0126', '\\u0195', '\\u04a2', '\\u04ba', '\\u04c7', '\\u050a'],\n i: ['\\u0f0f'],\n j: ['\\u0134'],\n k: ['\\u0138', '\\u04a0', '\\u04c3', '\\u051e'],\n l: ['\\u0139'],\n m: ['\\u028d', '\\u04cd', '\\u04ce', '\\u0520', '\\u0521', '\\u0d69'],\n n: ['\\u00d1', '\\u014b', '\\u019d', '\\u0376', '\\u03a0', '\\u048a'],\n o: ['\\u00d8', '\\u00f5', '\\u00f8', '\\u01fe', '\\u0298', '\\u047a', '\\u05dd',\n '\\u06dd', '\\u0e4f'],\n p: ['\\u01f7', '\\u048e'],\n q: ['\\u09cd'],\n r: ['\\u00ae', '\\u01a6', '\\u0210', '\\u024c', '\\u0280', '\\u042f'],\n s: ['\\u00a7', '\\u03de', '\\u03df', '\\u03e8'],\n t: ['\\u0141', '\\u0166', '\\u0373'],\n u: ['\\u01b1', '\\u054d'],\n v: ['\\u05d8'],\n w: ['\\u0428', '\\u0460', '\\u047c', '\\u0d70'],\n x: ['\\u04b2', '\\u04fe', '\\u04fc', '\\u04fd'],\n y: ['\\u00a5', '\\u04b0', '\\u04cb'],\n z: ['\\u01b5', '\\u0240'],\n };\n text.forEach(function(c) {\n c = c.toLowerCase();\n var chars = trap[c] || [' '];\n var rand = Math.floor(Math.random() * chars.length);\n if (typeof trap[c] !== 'undefined') {\n result += trap[c][rand];\n } else {\n result += c;\n }\n });\n return result;\n};\n","// please no\nmodule['exports'] = function zalgo(text, options) {\n text = text || ' he is here ';\n var soul = {\n 'up': [\n '̍', '̎', '̄', '̅',\n '̿', '̑', '̆', '̐',\n '͒', '͗', '͑', '̇',\n '̈', '̊', '͂', '̓',\n '̈', '͊', '͋', '͌',\n '̃', '̂', '̌', '͐',\n '̀', '́', '̋', '̏',\n '̒', '̓', '̔', '̽',\n '̉', 'ͣ', 'ͤ', 'ͥ',\n 'ͦ', 'ͧ', 'ͨ', 'ͩ',\n 'ͪ', 'ͫ', 'ͬ', 'ͭ',\n 'ͮ', 'ͯ', '̾', '͛',\n '͆', '̚',\n ],\n 'down': [\n '̖', '̗', '̘', '̙',\n '̜', '̝', '̞', '̟',\n '̠', '̤', '̥', '̦',\n '̩', '̪', '̫', '̬',\n '̭', '̮', '̯', '̰',\n '̱', '̲', '̳', '̹',\n '̺', '̻', '̼', 'ͅ',\n '͇', '͈', '͉', '͍',\n '͎', '͓', '͔', '͕',\n '͖', '͙', '͚', '̣',\n ],\n 'mid': [\n '̕', '̛', '̀', '́',\n '͘', '̡', '̢', '̧',\n '̨', '̴', '̵', '̶',\n '͜', '͝', '͞',\n '͟', '͠', '͢', '̸',\n '̷', '͡', ' ҉',\n ],\n };\n var all = [].concat(soul.up, soul.down, soul.mid);\n\n function randomNumber(range) {\n var r = Math.floor(Math.random() * range);\n return r;\n }\n\n function isChar(character) {\n var bool = false;\n all.filter(function(i) {\n bool = (i === character);\n });\n return bool;\n }\n\n\n function heComes(text, options) {\n var result = '';\n var counts;\n var l;\n options = options || {};\n options['up'] =\n typeof options['up'] !== 'undefined' ? options['up'] : true;\n options['mid'] =\n typeof options['mid'] !== 'undefined' ? options['mid'] : true;\n options['down'] =\n typeof options['down'] !== 'undefined' ? options['down'] : true;\n options['size'] =\n typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';\n text = text.split('');\n for (l in text) {\n if (isChar(l)) {\n continue;\n }\n result = result + text[l];\n counts = {'up': 0, 'down': 0, 'mid': 0};\n switch (options.size) {\n case 'mini':\n counts.up = randomNumber(8);\n counts.mid = randomNumber(2);\n counts.down = randomNumber(8);\n break;\n case 'maxi':\n counts.up = randomNumber(16) + 3;\n counts.mid = randomNumber(4) + 1;\n counts.down = randomNumber(64) + 3;\n break;\n default:\n counts.up = randomNumber(8) + 1;\n counts.mid = randomNumber(6) / 2;\n counts.down = randomNumber(8) + 1;\n break;\n }\n\n var arr = ['up', 'mid', 'down'];\n for (var d in arr) {\n var index = arr[d];\n for (var i = 0; i <= counts[index]; i++) {\n if (options[index]) {\n result = result + soul[index][randomNumber(soul[index].length)];\n }\n }\n }\n }\n return result;\n }\n // don't summon him\n return heComes(text, options);\n};\n\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n if (letter === ' ') return letter;\n switch (i%3) {\n case 0: return colors.red(letter);\n case 1: return colors.white(letter);\n case 2: return colors.blue(letter);\n }\n };\n};\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n return i % 2 === 0 ? letter : colors.inverse(letter);\n };\n};\n","module['exports'] = function(colors) {\n // RoY G BiV\n var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];\n return function(letter, i, exploded) {\n if (letter === ' ') {\n return letter;\n } else {\n return colors[rainbowColors[i++ % rainbowColors.length]](letter);\n }\n };\n};\n\n","module['exports'] = function(colors) {\n var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',\n 'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',\n 'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];\n return function(letter, i, exploded) {\n return letter === ' ' ? letter :\n colors[\n available[Math.round(Math.random() * (available.length - 2))]\n ](letter);\n };\n};\n","/*\n\nThe MIT License (MIT)\n\nOriginal Library\n - Copyright (c) Marak Squires\n\nAdditional functionality\n - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar colors = {};\nmodule['exports'] = colors;\n\ncolors.themes = {};\n\nvar util = require('util');\nvar ansiStyles = colors.styles = require('./styles');\nvar defineProps = Object.defineProperties;\nvar newLineRegex = new RegExp(/[\\r\\n]+/g);\n\ncolors.supportsColor = require('./system/supports-colors').supportsColor;\n\nif (typeof colors.enabled === 'undefined') {\n colors.enabled = colors.supportsColor() !== false;\n}\n\ncolors.enable = function() {\n colors.enabled = true;\n};\n\ncolors.disable = function() {\n colors.enabled = false;\n};\n\ncolors.stripColors = colors.strip = function(str) {\n return ('' + str).replace(/\\x1B\\[\\d+m/g, '');\n};\n\n// eslint-disable-next-line no-unused-vars\nvar stylize = colors.stylize = function stylize(str, style) {\n if (!colors.enabled) {\n return str+'';\n }\n\n var styleMap = ansiStyles[style];\n\n // Stylize should work for non-ANSI styles, too\n if (!styleMap && style in colors) {\n // Style maps like trap operate as functions on strings;\n // they don't have properties like open or close.\n return colors[style](str);\n }\n\n return styleMap.open + str + styleMap.close;\n};\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nvar escapeStringRegexp = function(str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n return str.replace(matchOperatorsRe, '\\\\$&');\n};\n\nfunction build(_styles) {\n var builder = function builder() {\n return applyStyle.apply(builder, arguments);\n };\n builder._styles = _styles;\n // __proto__ is used because we must return a function, but there is\n // no way to create a function with a different prototype.\n builder.__proto__ = proto;\n return builder;\n}\n\nvar styles = (function() {\n var ret = {};\n ansiStyles.grey = ansiStyles.gray;\n Object.keys(ansiStyles).forEach(function(key) {\n ansiStyles[key].closeRe =\n new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n ret[key] = {\n get: function() {\n return build(this._styles.concat(key));\n },\n };\n });\n return ret;\n})();\n\nvar proto = defineProps(function colors() {}, styles);\n\nfunction applyStyle() {\n var args = Array.prototype.slice.call(arguments);\n\n var str = args.map(function(arg) {\n // Use weak equality check so we can colorize null/undefined in safe mode\n if (arg != null && arg.constructor === String) {\n return arg;\n } else {\n return util.inspect(arg);\n }\n }).join(' ');\n\n if (!colors.enabled || !str) {\n return str;\n }\n\n var newLinesPresent = str.indexOf('\\n') != -1;\n\n var nestedStyles = this._styles;\n\n var i = nestedStyles.length;\n while (i--) {\n var code = ansiStyles[nestedStyles[i]];\n str = code.open + str.replace(code.closeRe, code.open) + code.close;\n if (newLinesPresent) {\n str = str.replace(newLineRegex, function(match) {\n return code.close + match + code.open;\n });\n }\n }\n\n return str;\n}\n\ncolors.setTheme = function(theme) {\n if (typeof theme === 'string') {\n console.log('colors.setTheme now only accepts an object, not a string. ' +\n 'If you are trying to set a theme from a file, it is now your (the ' +\n 'caller\\'s) responsibility to require the file. The old syntax ' +\n 'looked like colors.setTheme(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'); The new syntax looks like '+\n 'colors.setTheme(require(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'));');\n return;\n }\n for (var style in theme) {\n (function(style) {\n colors[style] = function(str) {\n if (typeof theme[style] === 'object') {\n var out = str;\n for (var i in theme[style]) {\n out = colors[theme[style][i]](out);\n }\n return out;\n }\n return colors[theme[style]](str);\n };\n })(style);\n }\n};\n\nfunction init() {\n var ret = {};\n Object.keys(styles).forEach(function(name) {\n ret[name] = {\n get: function() {\n return build([name]);\n },\n };\n });\n return ret;\n}\n\nvar sequencer = function sequencer(map, str) {\n var exploded = str.split('');\n exploded = exploded.map(map);\n return exploded.join('');\n};\n\n// custom formatter methods\ncolors.trap = require('./custom/trap');\ncolors.zalgo = require('./custom/zalgo');\n\n// maps\ncolors.maps = {};\ncolors.maps.america = require('./maps/america')(colors);\ncolors.maps.zebra = require('./maps/zebra')(colors);\ncolors.maps.rainbow = require('./maps/rainbow')(colors);\ncolors.maps.random = require('./maps/random')(colors);\n\nfor (var map in colors.maps) {\n (function(map) {\n colors[map] = function(str) {\n return sequencer(colors.maps[map], str);\n };\n })(map);\n}\n\ndefineProps(colors, init());\n","//\n// Remark: Requiring this file will use the \"safe\" colors API,\n// which will not touch String.prototype.\n//\n// var colors = require('colors/safe');\n// colors.red(\"foo\")\n//\n//\nvar colors = require('./lib/colors');\nmodule['exports'] = colors;\n","const { info, debug } = require('./debug');\nconst utils = require('./utils');\n\nclass Cell {\n /**\n * A representation of a cell within the table.\n * Implementations must have `init` and `draw` methods,\n * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties.\n * @param options\n * @constructor\n */\n constructor(options) {\n this.setOptions(options);\n\n /**\n * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to\n * `init` being called;\n * @type {Number}\n */\n this.x = null;\n this.y = null;\n }\n\n setOptions(options) {\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof options) !== -1) {\n options = { content: '' + options };\n }\n options = options || {};\n this.options = options;\n let content = options.content;\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof content) !== -1) {\n this.content = String(content);\n } else if (!content) {\n this.content = this.options.href || '';\n } else {\n throw new Error('Content needs to be a primitive, got: ' + typeof content);\n }\n this.colSpan = options.colSpan || 1;\n this.rowSpan = options.rowSpan || 1;\n if (this.options.href) {\n Object.defineProperty(this, 'href', {\n get() {\n return this.options.href;\n },\n });\n }\n }\n\n mergeTableOptions(tableOptions, cells) {\n this.cells = cells;\n\n let optionsChars = this.options.chars || {};\n let tableChars = tableOptions.chars;\n let chars = (this.chars = {});\n CHAR_NAMES.forEach(function (name) {\n setOption(optionsChars, tableChars, name, chars);\n });\n\n this.truncate = this.options.truncate || tableOptions.truncate;\n\n let style = (this.options.style = this.options.style || {});\n let tableStyle = tableOptions.style;\n setOption(style, tableStyle, 'padding-left', this);\n setOption(style, tableStyle, 'padding-right', this);\n this.head = style.head || tableStyle.head;\n this.border = style.border || tableStyle.border;\n\n this.fixedWidth = tableOptions.colWidths[this.x];\n this.lines = this.computeLines(tableOptions);\n\n this.desiredWidth = utils.strlen(this.content) + this.paddingLeft + this.paddingRight;\n this.desiredHeight = this.lines.length;\n }\n\n computeLines(tableOptions) {\n const tableWordWrap = tableOptions.wordWrap || tableOptions.textWrap;\n const { wordWrap = tableWordWrap } = this.options;\n if (this.fixedWidth && wordWrap) {\n this.fixedWidth -= this.paddingLeft + this.paddingRight;\n if (this.colSpan) {\n let i = 1;\n while (i < this.colSpan) {\n this.fixedWidth += tableOptions.colWidths[this.x + i];\n i++;\n }\n }\n const { wrapOnWordBoundary: tableWrapOnWordBoundary = true } = tableOptions;\n const { wrapOnWordBoundary = tableWrapOnWordBoundary } = this.options;\n return this.wrapLines(utils.wordWrap(this.fixedWidth, this.content, wrapOnWordBoundary));\n }\n return this.wrapLines(this.content.split('\\n'));\n }\n\n wrapLines(computedLines) {\n const lines = utils.colorizeLines(computedLines);\n if (this.href) {\n return lines.map((line) => utils.hyperlink(this.href, line));\n }\n return lines;\n }\n\n /**\n * Initializes the Cells data structure.\n *\n * @param tableOptions - A fully populated set of tableOptions.\n * In addition to the standard default values, tableOptions must have fully populated the\n * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number\n * of columns or rows (respectively) in this table, and each array item must be a Number.\n *\n */\n init(tableOptions) {\n let x = this.x;\n let y = this.y;\n this.widths = tableOptions.colWidths.slice(x, x + this.colSpan);\n this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan);\n this.width = this.widths.reduce(sumPlusOne, -1);\n this.height = this.heights.reduce(sumPlusOne, -1);\n\n this.hAlign = this.options.hAlign || tableOptions.colAligns[x];\n this.vAlign = this.options.vAlign || tableOptions.rowAligns[y];\n\n this.drawRight = x + this.colSpan == tableOptions.colWidths.length;\n }\n\n /**\n * Draws the given line of the cell.\n * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`.\n * @param lineNum - can be `top`, `bottom` or a numerical line number.\n * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how\n * many rows below it's being called from. Otherwise it's undefined.\n * @returns {String} The representation of this line.\n */\n draw(lineNum, spanningCell) {\n if (lineNum == 'top') return this.drawTop(this.drawRight);\n if (lineNum == 'bottom') return this.drawBottom(this.drawRight);\n let content = utils.truncate(this.content, 10, this.truncate);\n if (!lineNum) {\n info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);\n } else {\n // debug(`${lineNum}-${this.x}: 1x${this.colSpan} RowSpanCell ${content}`);\n }\n let padLen = Math.max(this.height - this.lines.length, 0);\n let padTop;\n switch (this.vAlign) {\n case 'center':\n padTop = Math.ceil(padLen / 2);\n break;\n case 'bottom':\n padTop = padLen;\n break;\n default:\n padTop = 0;\n }\n if (lineNum < padTop || lineNum >= padTop + this.lines.length) {\n return this.drawEmpty(this.drawRight, spanningCell);\n }\n let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height;\n return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell);\n }\n\n /**\n * Renders the top line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawTop(drawRight) {\n let content = [];\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n this.widths.forEach(function (width, index) {\n content.push(this._topLeftChar(index));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], width));\n }, this);\n } else {\n content.push(this._topLeftChar(0));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], this.width));\n }\n if (drawRight) {\n content.push(this.chars[this.y == 0 ? 'topRight' : 'rightMid']);\n }\n return this.wrapWithStyleColors('border', content.join(''));\n }\n\n _topLeftChar(offset) {\n let x = this.x + offset;\n let leftChar;\n if (this.y == 0) {\n leftChar = x == 0 ? 'topLeft' : offset == 0 ? 'topMid' : 'top';\n } else {\n if (x == 0) {\n leftChar = 'leftMid';\n } else {\n leftChar = offset == 0 ? 'midMid' : 'bottomMid';\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n let spanAbove = this.cells[this.y - 1][x] instanceof Cell.ColSpanCell;\n if (spanAbove) {\n leftChar = offset == 0 ? 'topMid' : 'mid';\n }\n if (offset == 0) {\n let i = 1;\n while (this.cells[this.y][x - i] instanceof Cell.ColSpanCell) {\n i++;\n }\n if (this.cells[this.y][x - i] instanceof Cell.RowSpanCell) {\n leftChar = 'leftMid';\n }\n }\n }\n }\n }\n return this.chars[leftChar];\n }\n\n wrapWithStyleColors(styleProperty, content) {\n if (this[styleProperty] && this[styleProperty].length) {\n try {\n let colors = require('@colors/colors/safe');\n for (let i = this[styleProperty].length - 1; i >= 0; i--) {\n colors = colors[this[styleProperty][i]];\n }\n return colors(content);\n } catch (e) {\n return content;\n }\n } else {\n return content;\n }\n }\n\n /**\n * Renders a line of text.\n * @param lineNum - Which line of text to render. This is not necessarily the line within the cell.\n * There may be top-padding above the first line of text.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even\n * if the text fits. This is used when the cell is vertically truncated. If `false` the text should\n * only include the truncation symbol if the text will not fit horizontally within the cell width.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let leftPadding = utils.repeat(' ', this.paddingLeft);\n let right = drawRight ? this.chars['right'] : '';\n let rightPadding = utils.repeat(' ', this.paddingRight);\n let line = this.lines[lineNum];\n let len = this.width - (this.paddingLeft + this.paddingRight);\n if (forceTruncationSymbol) line += this.truncate || '…';\n let content = utils.truncate(line, len, this.truncate);\n content = utils.pad(content, len, ' ', this.hAlign);\n content = leftPadding + content + rightPadding;\n return this.stylizeLine(left, content, right);\n }\n\n stylizeLine(left, content, right) {\n left = this.wrapWithStyleColors('border', left);\n right = this.wrapWithStyleColors('border', right);\n if (this.y === 0) {\n content = this.wrapWithStyleColors('head', content);\n }\n return left + content + right;\n }\n\n /**\n * Renders the bottom line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawBottom(drawRight) {\n let left = this.chars[this.x == 0 ? 'bottomLeft' : 'bottomMid'];\n let content = utils.repeat(this.chars.bottom, this.width);\n let right = drawRight ? this.chars['bottomRight'] : '';\n return this.wrapWithStyleColors('border', left + content + right);\n }\n\n /**\n * Renders a blank line of text within the cell. Used for top and/or bottom padding.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawEmpty(drawRight, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let right = drawRight ? this.chars['right'] : '';\n let content = utils.repeat(' ', this.width);\n return this.stylizeLine(left, content, right);\n }\n}\n\nclass ColSpanCell {\n /**\n * A Cell that doesn't do anything. It just draws empty lines.\n * Used as a placeholder in column spanning.\n * @constructor\n */\n constructor() {}\n\n draw(lineNum) {\n if (typeof lineNum === 'number') {\n debug(`${this.y}-${this.x}: 1x1 ColSpanCell`);\n }\n return '';\n }\n\n init() {}\n\n mergeTableOptions() {}\n}\n\nclass RowSpanCell {\n /**\n * A placeholder Cell for a Cell that spans multiple rows.\n * It delegates rendering to the original cell, but adds the appropriate offset.\n * @param originalCell\n * @constructor\n */\n constructor(originalCell) {\n this.originalCell = originalCell;\n }\n\n init(tableOptions) {\n let y = this.y;\n let originalY = this.originalCell.y;\n this.cellOffset = y - originalY;\n this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset);\n }\n\n draw(lineNum) {\n if (lineNum == 'top') {\n return this.originalCell.draw(this.offset, this.cellOffset);\n }\n if (lineNum == 'bottom') {\n return this.originalCell.draw('bottom');\n }\n debug(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`);\n return this.originalCell.draw(this.offset + 1 + lineNum);\n }\n\n mergeTableOptions() {}\n}\n\nfunction firstDefined(...args) {\n return args.filter((v) => v !== undefined && v !== null).shift();\n}\n\n// HELPER FUNCTIONS\nfunction setOption(objA, objB, nameB, targetObj) {\n let nameA = nameB.split('-');\n if (nameA.length > 1) {\n nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1);\n nameA = nameA.join('');\n targetObj[nameA] = firstDefined(objA[nameA], objA[nameB], objB[nameA], objB[nameB]);\n } else {\n targetObj[nameB] = firstDefined(objA[nameB], objB[nameB]);\n }\n}\n\nfunction findDimension(dimensionTable, startingIndex, span) {\n let ret = dimensionTable[startingIndex];\n for (let i = 1; i < span; i++) {\n ret += 1 + dimensionTable[startingIndex + i];\n }\n return ret;\n}\n\nfunction sumPlusOne(a, b) {\n return a + b + 1;\n}\n\nlet CHAR_NAMES = [\n 'top',\n 'top-mid',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-mid',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-mid',\n 'mid',\n 'mid-mid',\n 'right',\n 'right-mid',\n 'middle',\n];\n\nmodule.exports = Cell;\nmodule.exports.ColSpanCell = ColSpanCell;\nmodule.exports.RowSpanCell = RowSpanCell;\n","const { warn, debug } = require('./debug');\nconst Cell = require('./cell');\nconst { ColSpanCell, RowSpanCell } = Cell;\n\n(function () {\n function next(alloc, col) {\n if (alloc[col] > 0) {\n return next(alloc, col + 1);\n }\n return col;\n }\n\n function layoutTable(table) {\n let alloc = {};\n table.forEach(function (row, rowIndex) {\n let col = 0;\n row.forEach(function (cell) {\n cell.y = rowIndex;\n // Avoid erroneous call to next() on first row\n cell.x = rowIndex ? next(alloc, col) : col;\n const rowSpan = cell.rowSpan || 1;\n const colSpan = cell.colSpan || 1;\n if (rowSpan > 1) {\n for (let cs = 0; cs < colSpan; cs++) {\n alloc[cell.x + cs] = rowSpan;\n }\n }\n col = cell.x + colSpan;\n });\n Object.keys(alloc).forEach((idx) => {\n alloc[idx]--;\n if (alloc[idx] < 1) delete alloc[idx];\n });\n });\n }\n\n function maxWidth(table) {\n let mw = 0;\n table.forEach(function (row) {\n row.forEach(function (cell) {\n mw = Math.max(mw, cell.x + (cell.colSpan || 1));\n });\n });\n return mw;\n }\n\n function maxHeight(table) {\n return table.length;\n }\n\n function cellsConflict(cell1, cell2) {\n let yMin1 = cell1.y;\n let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n let yMin2 = cell2.y;\n let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n let xMin1 = cell1.x;\n let xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n let xMin2 = cell2.x;\n let xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n return yConflict && xConflict;\n }\n\n function conflictExists(rows, x, y) {\n let i_max = Math.min(rows.length - 1, y);\n let cell = { x: x, y: y };\n for (let i = 0; i <= i_max; i++) {\n let row = rows[i];\n for (let j = 0; j < row.length; j++) {\n if (cellsConflict(cell, row[j])) {\n return true;\n }\n }\n }\n return false;\n }\n\n function allBlank(rows, y, xMin, xMax) {\n for (let x = xMin; x < xMax; x++) {\n if (conflictExists(rows, x, y)) {\n return false;\n }\n }\n return true;\n }\n\n function addRowSpanCells(table) {\n table.forEach(function (row, rowIndex) {\n row.forEach(function (cell) {\n for (let i = 1; i < cell.rowSpan; i++) {\n let rowSpanCell = new RowSpanCell(cell);\n rowSpanCell.x = cell.x;\n rowSpanCell.y = cell.y + i;\n rowSpanCell.colSpan = cell.colSpan;\n insertCell(rowSpanCell, table[rowIndex + i]);\n }\n });\n });\n }\n\n function addColSpanCells(cellRows) {\n for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {\n let cellColumns = cellRows[rowIndex];\n for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n let cell = cellColumns[columnIndex];\n for (let k = 1; k < cell.colSpan; k++) {\n let colSpanCell = new ColSpanCell();\n colSpanCell.x = cell.x + k;\n colSpanCell.y = cell.y;\n cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n }\n }\n }\n }\n\n function insertCell(cell, row) {\n let x = 0;\n while (x < row.length && row[x].x < cell.x) {\n x++;\n }\n row.splice(x, 0, cell);\n }\n\n function fillInTable(table) {\n let h_max = maxHeight(table);\n let w_max = maxWidth(table);\n debug(`Max rows: ${h_max}; Max cols: ${w_max}`);\n for (let y = 0; y < h_max; y++) {\n for (let x = 0; x < w_max; x++) {\n if (!conflictExists(table, x, y)) {\n let opts = { x: x, y: y, colSpan: 1, rowSpan: 1 };\n x++;\n while (x < w_max && !conflictExists(table, x, y)) {\n opts.colSpan++;\n x++;\n }\n let y2 = y + 1;\n while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {\n opts.rowSpan++;\n y2++;\n }\n let cell = new Cell(opts);\n cell.x = opts.x;\n cell.y = opts.y;\n warn(`Missing cell at ${cell.y}-${cell.x}.`);\n insertCell(cell, table[y]);\n }\n }\n }\n }\n\n function generateCells(rows) {\n return rows.map(function (row) {\n if (!Array.isArray(row)) {\n let key = Object.keys(row)[0];\n row = row[key];\n if (Array.isArray(row)) {\n row = row.slice();\n row.unshift(key);\n } else {\n row = [key, row];\n }\n }\n return row.map(function (cell) {\n return new Cell(cell);\n });\n });\n }\n\n function makeTableLayout(rows) {\n let cellRows = generateCells(rows);\n layoutTable(cellRows);\n fillInTable(cellRows);\n addRowSpanCells(cellRows);\n addColSpanCells(cellRows);\n return cellRows;\n }\n\n module.exports = {\n makeTableLayout: makeTableLayout,\n layoutTable: layoutTable,\n addRowSpanCells: addRowSpanCells,\n maxWidth: maxWidth,\n fillInTable: fillInTable,\n computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1),\n computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1),\n };\n})();\n\nfunction makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {\n return function (vals, table) {\n let result = [];\n let spanners = [];\n let auto = {};\n table.forEach(function (row) {\n row.forEach(function (cell) {\n if ((cell[colSpan] || 1) > 1) {\n spanners.push(cell);\n } else {\n result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n }\n });\n });\n\n vals.forEach(function (val, index) {\n if (typeof val === 'number') {\n result[index] = val;\n }\n });\n\n //spanners.forEach(function(cell){\n for (let k = spanners.length - 1; k >= 0; k--) {\n let cell = spanners[k];\n let span = cell[colSpan];\n let col = cell[x];\n let existingWidth = result[col];\n let editableCols = typeof vals[col] === 'number' ? 0 : 1;\n if (typeof existingWidth === 'number') {\n for (let i = 1; i < span; i++) {\n existingWidth += 1 + result[col + i];\n if (typeof vals[col + i] !== 'number') {\n editableCols++;\n }\n }\n } else {\n existingWidth = desiredWidth === 'desiredWidth' ? cell.desiredWidth - 1 : 1;\n if (!auto[col] || auto[col] < existingWidth) {\n auto[col] = existingWidth;\n }\n }\n\n if (cell[desiredWidth] > existingWidth) {\n let i = 0;\n while (editableCols > 0 && cell[desiredWidth] > existingWidth) {\n if (typeof vals[col + i] !== 'number') {\n let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);\n existingWidth += dif;\n result[col + i] += dif;\n editableCols--;\n }\n i++;\n }\n }\n }\n\n Object.assign(vals, result, auto);\n for (let j = 0; j < vals.length; j++) {\n vals[j] = Math.max(forcedMin, vals[j] || 0);\n }\n };\n}\n","const debug = require('./debug');\nconst utils = require('./utils');\nconst tableLayout = require('./layout-manager');\n\nclass Table extends Array {\n constructor(opts) {\n super();\n\n const options = utils.mergeOptions(opts);\n Object.defineProperty(this, 'options', {\n value: options,\n enumerable: options.debug,\n });\n\n if (options.debug) {\n switch (typeof options.debug) {\n case 'boolean':\n debug.setDebugLevel(debug.WARN);\n break;\n case 'number':\n debug.setDebugLevel(options.debug);\n break;\n case 'string':\n debug.setDebugLevel(parseInt(options.debug, 10));\n break;\n default:\n debug.setDebugLevel(debug.WARN);\n debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);\n }\n Object.defineProperty(this, 'messages', {\n get() {\n return debug.debugMessages();\n },\n });\n }\n }\n\n toString() {\n let array = this;\n let headersPresent = this.options.head && this.options.head.length;\n if (headersPresent) {\n array = [this.options.head];\n if (this.length) {\n array.push.apply(array, this);\n }\n } else {\n this.options.style.head = [];\n }\n\n let cells = tableLayout.makeTableLayout(array);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.mergeTableOptions(this.options, cells);\n }, this);\n }, this);\n\n tableLayout.computeWidths(this.options.colWidths, cells);\n tableLayout.computeHeights(this.options.rowHeights, cells);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.init(this.options);\n }, this);\n }, this);\n\n let result = [];\n\n for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {\n let row = cells[rowIndex];\n let heightOfRow = this.options.rowHeights[rowIndex];\n\n if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) {\n doDraw(row, 'top', result);\n }\n\n for (let lineNum = 0; lineNum < heightOfRow; lineNum++) {\n doDraw(row, lineNum, result);\n }\n\n if (rowIndex + 1 == cells.length) {\n doDraw(row, 'bottom', result);\n }\n }\n\n return result.join('\\n');\n }\n\n get width() {\n let str = this.toString().split('\\n');\n return str[0].length;\n }\n}\n\nTable.reset = () => debug.reset();\n\nfunction doDraw(row, lineNum, result) {\n let line = [];\n row.forEach(function (cell) {\n line.push(cell.draw(lineNum));\n });\n let str = line.join('');\n if (str.length) result.push(str);\n}\n\nmodule.exports = Table;\n","module.exports = require('./src/table');","{\n\t\"name\": \"cfonts\",\n\t\"description\": \"Sexy ANSI fonts for the console\",\n\t\"version\": \"3.3.1\",\n\t\"homepage\": \"https://github.com/dominikwilkowski/cfonts\",\n\t\"author\": {\n\t\t\"name\": \"Dominik Wilkowski\",\n\t\t\"email\": \"Hi@Dominik-Wilkowski.com\",\n\t\t\"url\": \"http://dominik-wilkowski.com/\"\n\t},\n\t\"contributors\": [\n\t\t{\n\t\t\t\"name\": \"Dominik Wilkowski\",\n\t\t\t\"email\": \"Hi@Dominik-Wilkowski.com\",\n\t\t\t\"url\": \"http://dominik-wilkowski.com/\"\n\t\t}\n\t],\n\t\"repository\": {\n\t\t\"type\": \"git\",\n\t\t\"url\": \"git://github.com/dominikwilkowski/cfonts.git\"\n\t},\n\t\"bugs\": {\n\t\t\"url\": \"https://github.com/dominikwilkowski/cfonts/issues\"\n\t},\n\t\"engines\": {\n\t\t\"node\": \">=10\"\n\t},\n\t\"scripts\": {\n\t\t\"test\": \"yarn test:format && yarn build && yarn test:unit && yarn test:lint && yarn test:types && yarn test:fonts\",\n\t\t\"test:fonts\": \"node ./test/fonttest.js\",\n\t\t\"test:watch\": \"jest --watchAll --coverage\",\n\t\t\"test:unit\": \"npx cross-env FORCE_COLOR=3 jest\",\n\t\t\"test:types\": \"yarn types:clean && tsc -p tsconfig.json\",\n\t\t\"test:lint\": \"eslint src/\",\n\t\t\"test:format\": \"prettier --version && prettier --list-different \\\"**/*.{js,json}\\\"\",\n\t\t\"format\": \"prettier --write \\\"**/*.{js,json}\\\"\",\n\t\t\"build\": \"yarn build:lib && yarn build:bin && yarn build:fonts\",\n\t\t\"build:bin\": \"npx mkdirp bin && mv lib/bin.js bin/index.js\",\n\t\t\"build:lib\": \"npx mkdirp lib && babel src --out-dir lib\",\n\t\t\"build:fonts\": \"make\",\n\t\t\"types:clean\": \"npx trash-cli@5.0.0 \\\"lib/*.d.ts\\\"\",\n\t\t\"watch\": \"yarn build:lib && onchange 'src/**/*' -- yarn build:lib\",\n\t\t\"coveralls\": \"jest --coverage --coverageReporters=text-lcov | coveralls\",\n\t\t\"nuke\": \"rm -rf lib && rm -rf node_modules && rm yarn.lock\"\n\t},\n\t\"devDependencies\": {\n\t\t\"@babel/cli\": \"^7\",\n\t\t\"@babel/core\": \"^7\",\n\t\t\"@babel/preset-env\": \"^7\",\n\t\t\"@types/node\": \"^20\",\n\t\t\"coveralls\": \"^3\",\n\t\t\"eslint\": \"^8\",\n\t\t\"jest-cli\": \"^27\",\n\t\t\"onchange\": \"^7\",\n\t\t\"prettier\": \"^2\",\n\t\t\"typescript\": \"5.0\"\n\t},\n\t\"peerDependencies\": {},\n\t\"dependencies\": {\n\t\t\"supports-color\": \"^8\",\n\t\t\"window-size\": \"^1\"\n\t},\n\t\"jest\": {\n\t\t\"displayName\": \"CFonts\",\n\t\t\"testEnvironment\": \"node\",\n\t\t\"testRegex\": \"\\\\.spec.js$\",\n\t\t\"collectCoverageFrom\": [\n\t\t\t\"src/*.js\"\n\t\t],\n\t\t\"setupFiles\": [\n\t\t\t\"<rootDir>/test/env.js\"\n\t\t],\n\t\t\"coverageThreshold\": {\n\t\t\t\"global\": {\n\t\t\t\t\"branches\": 95,\n\t\t\t\t\"functions\": 100,\n\t\t\t\t\"lines\": 95,\n\t\t\t\t\"statements\": 95\n\t\t\t}\n\t\t}\n\t},\n\t\"browserslist\": [\n\t\t\"node >= 10\"\n\t],\n\t\"keywords\": [\n\t\t\"font\",\n\t\t\"banner\",\n\t\t\"logo\",\n\t\t\"CLI\",\n\t\t\"console\",\n\t\t\"ascii\",\n\t\t\"pretty\"\n\t],\n\t\"files\": [\n\t\t\"lib/*\",\n\t\t\"bin/*\",\n\t\t\"fonts/*\"\n\t],\n\t\"main\": \"lib/index.js\",\n\t\"types\": \"lib/index.d.ts\",\n\t\"bin\": {\n\t\t\"cfonts\": \"./bin/index.js\"\n\t},\n\t\"licenses\": [\n\t\t{\n\t\t\t\"type\": \"GPL-3.0-or-later\",\n\t\t\t\"url\": \"https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE\"\n\t\t}\n\t],\n\t\"license\": \"GPL-3.0-or-later\"\n}\n","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Constants\n * CHARS\n * COLORS\n * BGCOLORS\n * GRADIENTCOLORS\n * ALIGNMENT\n * FONTFACES\n * CLIOPTIONS\n * PACKAGE\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\n// global defaults\nconst CHARS = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '|', '!', '?', '.', '+', '-', '_', '=', '@', '#', '$', '%', '&', '(', ')', '/', ':', ';', ',', ' ', \"'\", '\"'];\nconst COLORS = {\n system: 'system',\n black: 'black',\n red: 'red',\n green: 'green',\n yellow: 'yellow',\n blue: 'blue',\n magenta: 'magenta',\n cyan: 'cyan',\n white: 'white',\n gray: 'gray',\n redbright: 'redBright',\n greenbright: 'greenBright',\n yellowbright: 'yellowBright',\n bluebright: 'blueBright',\n magentabright: 'magentaBright',\n cyanbright: 'cyanBright',\n whitebright: 'whiteBright'\n};\nconst BGCOLORS = {\n transparent: 'transparent',\n black: 'black',\n red: 'red',\n green: 'green',\n yellow: 'yellow',\n blue: 'blue',\n magenta: 'magenta',\n cyan: 'cyan',\n white: 'white',\n blackbright: 'blackBright',\n redbright: 'redBright',\n greenbright: 'greenBright',\n yellowbright: 'yellowBright',\n bluebright: 'blueBright',\n magentabright: 'magentaBright',\n cyanbright: 'cyanBright',\n whitebright: 'whiteBright'\n};\nconst GRADIENTCOLORS = {\n transparent: 'transparent',\n black: 'black',\n red: 'red',\n green: 'green',\n yellow: 'yellow',\n blue: 'blue',\n magenta: 'magenta',\n cyan: 'cyan',\n white: 'white',\n gray: 'gray',\n grey: 'grey'\n};\nconst GRADIENTS = {\n lgbt: ['#750787', '#004dff', '#008026', '#ffed00', '#ff8c00', '#e40303'],\n lgbtq: ['#750787', '#004dff', '#008026', '#ffed00', '#ff8c00', '#e40303'],\n pride: ['#750787', '#004dff', '#008026', '#ffed00', '#ff8c00', '#e40303'],\n agender: ['#000000', '#b9b9b9', '#ffffff', '#b8f483', '#ffffff', '#b9b9b9', '#000000'],\n aromantic: ['#3da542', '#a7d379', '#ffffff', '#a9a9a9', '#000000'],\n asexual: ['#000000', '#a3a3a3', '#ffffff', '#800080'],\n bisexual: ['#d60270', '#d60270', '#9b4f96', '#0038a8', '#0038a8'],\n genderfluid: ['#ff75a2', '#ffffff', '#be18d6', '#000000', '#333ebd'],\n genderqueer: ['#b57edc', '#ffffff', '#4a8123'],\n intersex: ['#ffd800', '#ffd800', '#7902aa', '#ffd800', '#ffd800'],\n lesbian: ['#d52d00', '#ff9a56', '#ffffff', '#d362a4', '#a30262'],\n nonbinary: ['#fcf434', '#ffffff', '#9c5cd4', '#2c2c2c'],\n pansexual: ['#ff218c', '#ffd800', '#21b1ff'],\n polysexual: ['#f61cb9', '#07d569', '#1c92f6'],\n transgender: ['#5bcefa', '#f5a9b8', '#ffffff', '#f5a9b8', '#5bcefa']\n};\nconst ALIGNMENT = ['left', 'center', 'right', 'top', 'bottom'];\nconst FONTFACES = {\n console: 'console',\n block: 'block',\n simpleblock: 'simpleBlock',\n simple: 'simple',\n '3d': '3d',\n simple3d: 'simple3d',\n chrome: 'chrome',\n huge: 'huge',\n shade: 'shade',\n slick: 'slick',\n grid: 'grid',\n pallet: 'pallet',\n tiny: 'tiny'\n};\nconst CLIOPTIONS = {\n '--version': {\n description: 'Use to display the version of cfonts',\n example: '--version',\n short: '-v',\n fallback_shortcut: '-V',\n default: false\n },\n '--help': {\n description: 'Use to display this help',\n example: '--help',\n short: '-h',\n fallback_shortcut: false,\n default: false\n },\n '--font': {\n description: 'Use to define the font face',\n example: `--font block [green-open][ ${Object.keys(FONTFACES).map(font => FONTFACES[font]).join(', ')} ][green-close]`,\n short: '-f',\n fallback_shortcut: false,\n options: Object.keys(FONTFACES).map(color => FONTFACES[color]),\n default: 'block'\n },\n '--colors': {\n description: 'Use to define the font color',\n example: `--colors red [green-open][ ${Object.keys(COLORS).map(color => COLORS[color]).join(', ')}, #ff8800, hex-colors etc... ][green-close]`,\n short: '-c',\n fallback_shortcut: false,\n options: true,\n default: 'system'\n },\n '--background': {\n description: 'Use to define background color',\n example: `--background blue [green-open][ ${Object.keys(BGCOLORS).map(bgcolor => BGCOLORS[bgcolor]).join(', ')} ][green-close]`,\n short: '-b',\n fallback_shortcut: false,\n options: Object.keys(BGCOLORS).map(color => BGCOLORS[color]),\n default: 'transparent'\n },\n '--align': {\n description: 'Use to align your text output',\n example: `--align [green-open][ ${ALIGNMENT.join(', ')} ][green-close]`,\n short: '-a',\n fallback_shortcut: false,\n options: ALIGNMENT,\n default: 'left'\n },\n '--letter-spacing': {\n description: 'Use to define your letter spacing',\n example: '--letter-spacing 2',\n short: '-l',\n fallback_shortcut: false,\n options: true,\n default: undefined\n },\n '--line-height': {\n description: 'Use to define your line height',\n example: '--line-height 5',\n short: '-z',\n fallback_shortcut: false,\n options: true,\n default: undefined\n },\n '--spaceless': {\n description: 'Use to disable the padding around your output',\n example: '--spaceless',\n short: '-s',\n fallback_shortcut: false,\n default: false\n },\n '--max-length': {\n description: 'Use to define the amount of maximum characters per line',\n example: '--max-length 10',\n short: '-m',\n fallback_shortcut: false,\n options: true,\n default: 0\n },\n '--gradient': {\n description: 'Use to define a start and end color of a gradient',\n example: '--gradient red,blue,green',\n short: '-g',\n fallback_shortcut: false,\n options: true,\n default: false\n },\n '--independent-gradient': {\n description: 'Use to define that a gradient is applied independently for each line',\n example: '--gradient red,blue --independent-gradient',\n short: '-i',\n fallback_shortcut: false,\n default: false\n },\n '--transition-gradient': {\n description: 'Use to define that a gradient is a transition between the colors',\n example: '--gradient red,blue,green --transition-gradient',\n short: '-t',\n fallback_shortcut: false,\n default: false\n },\n '--raw-mode': {\n description: 'Use to enable proper newline rendering in raw mode in the terminal by adding \\\\r to line breaks',\n example: '--raw-mode',\n short: '-r',\n fallback_shortcut: false,\n default: false\n },\n '--env': {\n description: 'Use to define what environment you run CFonts in.',\n example: `--env [green-open][ \"node\", \"browser\" ][green-close]`,\n short: '-e',\n fallback_shortcut: false,\n options: true,\n default: 'node'\n },\n '--debug': {\n description: 'Use to enable debug mode',\n example: '--debug',\n short: '-d',\n fallback_shortcut: false,\n default: false\n },\n '--debug-level': {\n description: 'Use to define the debug level. The higher, the less debug infos',\n example: '--debug-level 2',\n short: '-x',\n fallback_shortcut: false,\n options: true,\n default: 1\n }\n};\nconst PACKAGE = require('../package.json');\nmodule.exports = exports = {\n CHARS,\n COLORS,\n BGCOLORS,\n GRADIENTCOLORS,\n GRADIENTS,\n ALIGNMENT,\n FONTFACES,\n CLIOPTIONS,\n PACKAGE\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * DisplayVersion\n * Display the version of this package\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n PACKAGE\n} = require('./constants.js');\n\n/**\n * Display the version of this package\n */\nconst DisplayVersion = () => {\n console.log(PACKAGE.version);\n};\nmodule.exports = exports = {\n DisplayVersion\n};","'use strict';\n\nmodule.exports = (flag, argv = process.argv) => {\n\tconst prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');\n\tconst position = argv.indexOf(prefix + flag);\n\tconst terminatorPosition = argv.indexOf('--');\n\treturn position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);\n};\n","'use strict';\nconst os = require('os');\nconst tty = require('tty');\nconst hasFlag = require('has-flag');\n\nconst {env} = process;\n\nlet flagForceColor;\nif (hasFlag('no-color') ||\n\thasFlag('no-colors') ||\n\thasFlag('color=false') ||\n\thasFlag('color=never')) {\n\tflagForceColor = 0;\n} else if (hasFlag('color') ||\n\thasFlag('colors') ||\n\thasFlag('color=true') ||\n\thasFlag('color=always')) {\n\tflagForceColor = 1;\n}\n\nfunction envForceColor() {\n\tif ('FORCE_COLOR' in env) {\n\t\tif (env.FORCE_COLOR === 'true') {\n\t\t\treturn 1;\n\t\t}\n\n\t\tif (env.FORCE_COLOR === 'false') {\n\t\t\treturn 0;\n\t\t}\n\n\t\treturn env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);\n\t}\n}\n\nfunction translateLevel(level) {\n\tif (level === 0) {\n\t\treturn false;\n\t}\n\n\treturn {\n\t\tlevel,\n\t\thasBasic: true,\n\t\thas256: level >= 2,\n\t\thas16m: level >= 3\n\t};\n}\n\nfunction supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {\n\tconst noFlagForceColor = envForceColor();\n\tif (noFlagForceColor !== undefined) {\n\t\tflagForceColor = noFlagForceColor;\n\t}\n\n\tconst forceColor = sniffFlags ? flagForceColor : noFlagForceColor;\n\n\tif (forceColor === 0) {\n\t\treturn 0;\n\t}\n\n\tif (sniffFlags) {\n\t\tif (hasFlag('color=16m') ||\n\t\t\thasFlag('color=full') ||\n\t\t\thasFlag('color=truecolor')) {\n\t\t\treturn 3;\n\t\t}\n\n\t\tif (hasFlag('color=256')) {\n\t\t\treturn 2;\n\t\t}\n\t}\n\n\tif (haveStream && !streamIsTTY && forceColor === undefined) {\n\t\treturn 0;\n\t}\n\n\tconst min = forceColor || 0;\n\n\tif (env.TERM === 'dumb') {\n\t\treturn min;\n\t}\n\n\tif (process.platform === 'win32') {\n\t\t// Windows 10 build 10586 is the first Windows release that supports 256 colors.\n\t\t// Windows 10 build 14931 is the first release that supports 16m/TrueColor.\n\t\tconst osRelease = os.release().split('.');\n\t\tif (\n\t\t\tNumber(osRelease[0]) >= 10 &&\n\t\t\tNumber(osRelease[2]) >= 10586\n\t\t) {\n\t\t\treturn Number(osRelease[2]) >= 14931 ? 3 : 2;\n\t\t}\n\n\t\treturn 1;\n\t}\n\n\tif ('CI' in env) {\n\t\tif (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'GITHUB_ACTIONS', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {\n\t\t\treturn 1;\n\t\t}\n\n\t\treturn min;\n\t}\n\n\tif ('TEAMCITY_VERSION' in env) {\n\t\treturn /^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;\n\t}\n\n\tif (env.COLORTERM === 'truecolor') {\n\t\treturn 3;\n\t}\n\n\tif ('TERM_PROGRAM' in env) {\n\t\tconst version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n\t\tswitch (env.TERM_PROGRAM) {\n\t\t\tcase 'iTerm.app':\n\t\t\t\treturn version >= 3 ? 3 : 2;\n\t\t\tcase 'Apple_Terminal':\n\t\t\t\treturn 2;\n\t\t\t// No default\n\t\t}\n\t}\n\n\tif (/-256(color)?$/i.test(env.TERM)) {\n\t\treturn 2;\n\t}\n\n\tif (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n\t\treturn 1;\n\t}\n\n\tif ('COLORTERM' in env) {\n\t\treturn 1;\n\t}\n\n\treturn min;\n}\n\nfunction getSupportLevel(stream, options = {}) {\n\tconst level = supportsColor(stream, {\n\t\tstreamIsTTY: stream && stream.isTTY,\n\t\t...options\n\t});\n\n\treturn translateLevel(level);\n}\n\nmodule.exports = {\n\tsupportsColor: getSupportLevel,\n\tstdout: getSupportLevel({isTTY: tty.isatty(1)}),\n\tstderr: getSupportLevel({isTTY: tty.isatty(2)})\n};\n","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Options\n * Merge user settings with default options\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n COLORS,\n BGCOLORS,\n FONTFACES\n} = require('./constants.js');\n\n/**\n * The options store with getter and setter methods\n *\n * @type {Object}\n */\nconst Options = {\n store: {},\n reset() {\n const defaults = {\n font: 'block',\n align: 'left',\n colors: [],\n background: 'transparent',\n letterSpacing: 1,\n lineHeight: 1,\n spaceless: false,\n maxLength: 0,\n gradient: false,\n independentGradient: false,\n transitionGradient: false,\n rawMode: false,\n env: 'node'\n };\n this.store = {\n ...defaults\n }; // cloning\n },\n /**\n * Get the current options\n *\n * @return {object} - Our options as hey are stored in our object\n */\n get get() {\n return this.store;\n },\n /**\n * Merge settings into our options object\n *\n * @param {object} options - The settings object\n * @param {string} options.font - Font face, Default 'block'\n * @param {string} options.align - Text alignment, Default: 'left'\n * @param {array} options.colors - Colors for font, Default: []\n * @param {string} options.background - Color string for background, Default 'Black'\n * @param {string} options.backgroundColor - Alias for background\n * @param {number} options.letterSpacing - Space between letters, Default: set by selected font face\n * @param {number} options.lineHeight - Space between lines, Default: 1\n * @param {boolean} options.spaceless - Don't output space before and after output, Default: false\n * @param {number} options.maxLength - Maximum amount of characters per line, Default width of console window\n * @param {(string|array|boolean)} options.gradient - Gradient color pair, Default: false\n * @param {boolean} options.independentGradient - A switch to calculate gradient per line or not\n * @param {boolean} options.transitionGradient - A switch for transition gradients\n * @param {string} options.env - The environment we run cfonts in\n * @param {object} options.allowedColors - All allowed font colors\n * @param {object} options.allowedBG - All allowed background colors\n * @param {object} options.allowedFont - All allowed fontfaces\n * @param {boolean} options.rawMode - A switch for raw mode in terminals\n */\n set set({\n font = '',\n align,\n colors,\n background,\n backgroundColor,\n letterSpacing,\n lineHeight,\n spaceless,\n maxLength,\n gradient,\n independentGradient,\n transitionGradient,\n env,\n allowedColors = COLORS,\n allowedBG = BGCOLORS,\n allowedFont = FONTFACES,\n rawMode\n }) {\n this.store.font = font !== '' ? allowedFont[font.toLowerCase()] || font : this.store.font;\n this.store.align = align !== undefined ? align.toLowerCase() : this.store.align;\n this.store.colors = Array.isArray(colors) ? colors.map(color => allowedColors[color.toLowerCase()] || color) : this.store.colors;\n const bg = backgroundColor || background;\n this.store.background = bg !== undefined ? allowedBG[bg.toLowerCase()] || bg : this.store.background;\n this.store.letterSpacing = letterSpacing !== undefined ? parseInt(letterSpacing.toString()) : font.toLowerCase() === 'console' ? 0 : this.store.letterSpacing;\n this.store.lineHeight = lineHeight !== undefined ? parseInt(lineHeight.toString()) : font.toLowerCase() === 'console' ? 0 : this.store.lineHeight;\n this.store.spaceless = typeof spaceless === 'boolean' ? spaceless : this.store.spaceless;\n this.store.maxLength = maxLength !== undefined ? maxLength : this.store.maxLength;\n this.store.gradient = gradient !== undefined && typeof gradient !== 'boolean' ? Array.isArray(gradient) ? gradient : gradient.split(',') : gradient === false ? false : this.store.gradient;\n this.store.independentGradient = independentGradient !== undefined ? independentGradient : this.store.independentGradient;\n this.store.transitionGradient = transitionGradient !== undefined ? transitionGradient : this.store.transitionGradient;\n this.store.env = env !== undefined ? env : this.store.env;\n this.store.rawMode = rawMode !== undefined ? rawMode : this.store.rawMode;\n }\n};\nmodule.exports = exports = {\n Options\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * HEXTEST - Regex to see if a string is a hex color\n * Rgb2hsv - Converts an RGB color value to HSV\n * Hsv2rgb - Converts an HSV color value to RGB\n * Rgb2hex - Converts RGB to HEX\n * Hex2rgb - Convert HEX to RGB\n * Hsv2hsvRad - Convert HSV coordinate to HSVrad (degree to radian)\n * HsvRad2hsv - Convert HSVrad color to HSV (radian to degree)\n * Hex2hsvRad - Convert HEX to HSVrad\n * HsvRad2hex - Convert HSVrad to HEX\n * rgb2ansi_16m - - Convert RGB values to ANSI16 million colors - truecolor\n * rgb2ansi256Code - Convert RGB values to ANSI256 escape code\n * rgb2ansi_256 - Convert RGB values to ANSI256\n * ansi_2562ansi_16 - Convert ANSI256 code values to ANSI16\n * get_term_color_support - Detect the ANSI support for the current terminal taking into account env vars NO_COLOR and FORCE_COLOR\n * Color - Abstraction for coloring hex-, keyword- and background-colors\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n supportsColor\n} = require('supports-color');\nconst {\n Options\n} = require('./Options.js');\n\n/**\n * Regex to see if a string is a hex color\n *\n * @type {RegExp}\n */\nconst HEXTEST = RegExp('^#([A-Fa-f0-9]{6}|[A-Fa-f0-9]{3})$');\n\n/**\n * Converts an RGB color value to HSV\n *\n * @author https://github.com/Gavin-YYC/colorconvert\n *\n * @param {object} options - Arguments\n * @param {number} options.r - The red color value\n * @param {number} options.g - The green color value\n * @param {number} options.b - The blue color value\n *\n * @return {array} - The HSV representation\n */\nfunction Rgb2hsv({\n r,\n g,\n b\n}) {\n r /= 255;\n g /= 255;\n b /= 255;\n const max = Math.max(r, g, b);\n const min = Math.min(r, g, b);\n const diff = max - min;\n let h = 0;\n let v = max;\n let s = max === 0 ? 0 : diff / max;\n\n // h\n if (max === min) {\n h = 0;\n } else if (max === r && g >= b) {\n h = 60 * ((g - b) / diff);\n } else if (max === r && g < b) {\n h = 60 * ((g - b) / diff) + 360;\n } else if (max === g) {\n h = 60 * ((b - r) / diff) + 120;\n } else {\n // if( max === b ) {\n h = 60 * ((r - g) / diff) + 240;\n }\n return [h, s * 100, v * 100];\n}\n\n/**\n * Converts an HSV color value to RGB\n *\n * @author https://github.com/Gavin-YYC/colorconvert\n *\n * @param {number} h - The hue\n * @param {number} s - The saturation\n * @param {number} v - The value\n *\n * @typedef {object} Hsv2rgbReturnObject\n * @property {number} r - The red value\n * @property {number} g - The green value\n * @property {number} b - The blue value\n *\n * @return {Hsv2rgbReturnObject} - The RGB representation\n */\nfunction Hsv2rgb(h, s, v) {\n h /= 60;\n s /= 100;\n v /= 100;\n const hi = Math.floor(h) % 6;\n const f = h - Math.floor(h);\n const p = 255 * v * (1 - s);\n const q = 255 * v * (1 - s * f);\n const t = 255 * v * (1 - s * (1 - f));\n v *= 255;\n switch (hi) {\n case 0:\n return {\n r: v,\n g: t,\n b: p\n };\n case 1:\n return {\n r: q,\n g: v,\n b: p\n };\n case 2:\n return {\n r: p,\n g: v,\n b: t\n };\n case 3:\n return {\n r: p,\n g: q,\n b: v\n };\n case 4:\n return {\n r: t,\n g: p,\n b: v\n };\n case 5:\n return {\n r: v,\n g: p,\n b: q\n };\n }\n}\n\n/**\n * Converts RGB to HEX\n *\n * @param {number} r - The Red value\n * @param {number} g - The Green value\n * @param {number} b - The Blue value\n *\n * @return {string} - A HEX color\n */\nfunction Rgb2hex(r, g, b) {\n const val = (b | g << 8 | r << 16 | 1 << 24).toString(16).slice(1);\n return '#' + val.toLowerCase();\n}\n\n/**\n * Convert HEX to RGB\n *\n * @param {string} hex - The HEX color\n *\n * @return {array} - An object with RGB values\n */\nfunction Hex2rgb(hex) {\n hex = hex.replace(/^#/, '');\n if (hex.length > 6) {\n hex = hex.slice(0, 6);\n }\n if (hex.length === 4) {\n hex = hex.slice(0, 3);\n }\n if (hex.length === 3) {\n hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n }\n const num = parseInt(hex, 16);\n const r = num >> 16;\n const g = num >> 8 & 255;\n const b = num & 255;\n const rgb = [r, g, b];\n return rgb;\n}\n\n/**\n * Convert HSV coordinate to HSVrad (degree to radian)\n *\n * @param {array} argument - The HSV representation of a color\n *\n * @return {array} - The HSVrad color\n */\nfunction Hsv2hsvRad([h, s, v]) {\n return [h * Math.PI / 180, s, v];\n}\n\n/**\n * Convert HSVrad color to HSV (radian to degree)\n *\n * @param {number} hRad - H in rad\n * @param {number} s - S\n * @param {number} v - V\n *\n * @return {array} - The HSV color\n */\nfunction HsvRad2hsv(hRad, s, v) {\n const precision = 1000000000000;\n const h = Math.round(hRad * 180 / Math.PI * precision) / precision;\n return [h, s, v];\n}\n\n/**\n * Convert HEX to HSVrad\n *\n * @param {string} hex - A HEX color\n *\n * @return {array} - The HSVrad color\n */\nfunction Hex2hsvRad(hex) {\n const [r, g, b] = Hex2rgb(hex);\n const hsv = Rgb2hsv({\n r,\n g,\n b\n });\n const hsvRad = Hsv2hsvRad(hsv);\n return hsvRad;\n}\n\n/**\n * Convert HSVrad to HEX\n *\n * @param {number} hRad - The hue in rad\n * @param {number} s - The saturation\n * @param {number} v - The value\n *\n * @return {string} - The HEX color\n */\nfunction HsvRad2hex(hRad, s, v) {\n const [h] = HsvRad2hsv(hRad, s, v);\n const {\n r,\n g,\n b\n } = Hsv2rgb(h, s, v);\n const hex = Rgb2hex(r, g, b);\n return hex;\n}\n\n/**\n * Convert RGB values to ANSI16 million colors - truecolor\n *\n * @param {number} r - Red value\n * @param {number} g - Green value\n * @param {number} b - Blue value\n * @param {boolean} bg - Is this a background color; default: false\n *\n * @return {string} - The opening ANSI escape sequence for the given color\n */\nfunction rgb2ansi_16m(r, g, b, bg = false) {\n const layer_code = bg ? 48 : 38;\n return `\\u001b[${layer_code};2;${r};${g};${b}m`;\n}\n\n/**\n * Convert RGB values to ANSI256 escape code\n *\n * @param {number} red - Red value\n * @param {number} green - Green value\n * @param {number} blue - Blue value\n *\n * @return {number} - The ANSI escape code for the given color\n */\nfunction rgb2ansi256Code(red, green, blue) {\n if (red === green && green === blue) {\n if (red < 8) {\n return 16;\n }\n if (red > 248) {\n return 231;\n }\n return Math.round((red - 8) / 247 * 24) + 232;\n }\n return 16 + 36 * Math.round(red / 255 * 5) + 6 * Math.round(green / 255 * 5) + Math.round(blue / 255 * 5);\n}\n\n/**\n * Convert RGB values to ANSI256\n *\n * @param {number} r - Red value\n * @param {number} g - Green value\n * @param {number} b - Blue value\n * @param {boolean} bg - Is this a background color; default: false\n *\n * @return {string} - The opening ANSI escape sequence for the given color\n */\nfunction rgb2ansi_256(r, g, b, bg = false) {\n const layer_code = bg ? 48 : 38;\n const code = rgb2ansi256Code(r, g, b);\n return `\\u001b[${layer_code};5;${code}m`;\n}\n\n/**\n * Convert ANSI256 code values to ANSI16\n *\n * @param {number} code - The code of the ANSI256 color\n * @param {boolean} bg - Is this a background color; default: false\n *\n * @return {string} - The opening ANSI escape sequence for the given color\n */\nfunction ansi_2562ansi_16(code, bg = false) {\n let ansi_16_code;\n if (code <= 7) {\n ansi_16_code = code + 10;\n }\n if (code >= 8 && code <= 15) {\n ansi_16_code = code + 82;\n }\n if (code === 16) {\n ansi_16_code = 0;\n }\n if (code >= 17 && code <= 19) {\n ansi_16_code = 34;\n }\n if (code >= 20 && code <= 21 || code >= 25 && code <= 27) {\n ansi_16_code = 94;\n }\n if (code >= 22 && code <= 24 || code >= 58 && code <= 60 || code >= 64 && code <= 66 || code >= 94 && code <= 95 || code >= 100 && code <= 102 || code >= 106 && code <= 108 || code >= 130 && code <= 131 || code >= 136 && code <= 138 || code >= 142 && code <= 144 || code >= 148 && code <= 151 || code >= 172 && code <= 174 || code >= 178 && code <= 181 || code >= 184 && code <= 189) {\n ansi_16_code = 33;\n }\n if (code >= 28 && code <= 30 || code >= 34 && code <= 36 || code >= 70 && code <= 72 || code >= 76 && code <= 79 || code >= 112 && code <= 114) {\n ansi_16_code = 32;\n }\n if (code >= 31 && code <= 33 || code >= 37 && code <= 39 || code >= 44 && code <= 45 || code >= 61 && code <= 63 || code >= 67 && code <= 69 || code >= 73 && code <= 75 || code >= 80 && code <= 81 || code >= 103 && code <= 111 || code >= 115 && code <= 117 || code >= 152 && code <= 153) {\n ansi_16_code = 36;\n }\n if (code >= 40 && code <= 43 || code >= 46 && code <= 49 || code >= 82 && code <= 85 || code >= 118 && code <= 120 || code >= 154 && code <= 157) {\n ansi_16_code = 92;\n }\n if (code >= 50 && code <= 51 || code >= 86 && code <= 87 || code >= 121 && code <= 123 || code >= 158 && code <= 159) {\n ansi_16_code = 96;\n }\n if (code >= 52 && code <= 54 || code >= 88 && code <= 90 || code >= 124 && code <= 126 || code >= 166 && code <= 168) {\n ansi_16_code = 31;\n }\n if (code >= 55 && code <= 57 || code >= 91 && code <= 93 || code >= 96 && code <= 99 || code >= 127 && code <= 129 || code >= 132 && code <= 135 || code >= 139 && code <= 141 || code >= 145 && code <= 147 || code >= 169 && code <= 171 || code >= 175 && code <= 177) {\n ansi_16_code = 35;\n }\n if (code >= 160 && code <= 163 || code >= 196 && code <= 199 || code >= 202 && code <= 213) {\n ansi_16_code = 91;\n }\n if (code >= 164 && code <= 165 || code >= 182 && code <= 183 || code >= 200 && code <= 201 || code >= 218 && code <= 219) {\n ansi_16_code = 95;\n }\n if (code >= 190 && code <= 193 || code >= 214 && code <= 217 || code >= 220 && code <= 228) {\n ansi_16_code = 93;\n }\n if (code >= 194 && code <= 195 || code >= 229 && code <= 231 || code >= 253 && code <= 255) {\n ansi_16_code = 97;\n }\n if (code >= 232 && code <= 239) {\n ansi_16_code = 30;\n }\n if (code >= 240 && code <= 246) {\n ansi_16_code = 90;\n }\n if (code >= 247 && code <= 252) {\n ansi_16_code = 37;\n }\n if (bg) {\n ansi_16_code = ansi_16_code + 10;\n }\n return `\\u001b[${ansi_16_code}m`;\n}\n\n/**\n * Detect the ANSI support for the current terminal taking into account env vars NO_COLOR and FORCE_COLOR\n *\n * @return {number} - 0 = no color support; 1 = 16 colors support; 2 = 256 colors support; 3 = 16 million colors support\n */\nfunction get_term_color_support() {\n let term_support = supportsColor().level || 3;\n if ('NO_COLOR' in process.env) {\n term_support = 0;\n }\n if (process.env['FORCE_COLOR'] === '0') {\n term_support = 0;\n }\n if (process.env['FORCE_COLOR'] === '1') {\n term_support = 1;\n }\n if (process.env['FORCE_COLOR'] === '2') {\n term_support = 2;\n }\n if (process.env['FORCE_COLOR'] === '3') {\n term_support = 3;\n }\n return term_support;\n}\n\n/**\n * Abstraction for coloring hex-, keyword- and background-colors\n *\n * @param {string} color - The color to be used\n * @param {boolean} bg - Whether this is a background or not\n *\n * @typedef {object} ColorReturnObject\n * @property {string} open - The open ansi code\n * @property {string} close - The close ansi code\n *\n * @return {ColorReturnObject} - An object with open and close ansi codes\n */\nconst Color = (color, bg = false) => {\n const COLORS = {\n black: '#000',\n red: '#ea3223',\n green: '#377d22',\n yellow: '#fffd54',\n blue: '#0020f5',\n magenta: '#ea3df7',\n cyan: '#74fbfd',\n white: '#fff',\n gray: '#808080',\n redbright: '#ee776d',\n greenbright: '#8cf57b',\n yellowbright: '#fffb7f',\n bluebright: '#6974f6',\n magentabright: '#ee82f8',\n cyanbright: '#8dfafd',\n whitebright: '#fff'\n };\n const support = get_term_color_support();\n\n // bail early if we use system color\n if (color === 'system' || support === 0) {\n return {\n open: '',\n close: ''\n };\n }\n const OPTIONS = Options.get;\n if (OPTIONS.env === 'node') {\n let open;\n let close = bg ? '\\u001b[49m' : '\\u001b[39m';\n switch (color.toLowerCase()) {\n case 'transparent':\n open = '\\u001b[49m';\n break;\n case 'black':\n open = bg ? '\\u001b[40m' : '\\u001b[30m';\n break;\n case 'red':\n open = bg ? '\\u001b[41m' : '\\u001b[31m';\n break;\n case 'green':\n open = bg ? '\\u001b[42m' : '\\u001b[32m';\n break;\n case 'yellow':\n open = bg ? '\\u001b[43m' : '\\u001b[33m';\n break;\n case 'blue':\n open = bg ? '\\u001b[44m' : '\\u001b[34m';\n break;\n case 'magenta':\n open = bg ? '\\u001b[45m' : '\\u001b[35m';\n break;\n case 'cyan':\n open = bg ? '\\u001b[46m' : '\\u001b[36m';\n break;\n case 'white':\n open = bg ? '\\u001b[47m' : '\\u001b[37m';\n break;\n case 'gray':\n open = bg ? '\\u001b[100m' : '\\u001b[90m';\n break;\n case 'redbright':\n open = bg ? '\\u001b[101m' : '\\u001b[91m';\n break;\n case 'greenbright':\n open = bg ? '\\u001b[102m' : '\\u001b[92m';\n break;\n case 'yellowbright':\n open = bg ? '\\u001b[103m' : '\\u001b[93m';\n break;\n case 'bluebright':\n open = bg ? '\\u001b[104m' : '\\u001b[94m';\n break;\n case 'magentabright':\n open = bg ? '\\u001b[105m' : '\\u001b[95m';\n break;\n case 'cyanbright':\n open = bg ? '\\u001b[106m' : '\\u001b[96m';\n break;\n case 'whitebright':\n open = bg ? '\\u001b[107m' : '\\u001b[97m';\n break;\n case 'candy':\n open = ['\\u001b[31m', '\\u001b[32m', '\\u001b[33m', '\\u001b[35m', '\\u001b[36m', '\\u001b[91m', '\\u001b[92m', '\\u001b[93m', '\\u001b[94m', '\\u001b[95m', '\\u001b[96m'][Math.floor(Math.random() * 11)];\n break;\n default:\n {\n let hex = color;\n if (!HEXTEST.test(color)) {\n return {\n open: '',\n close: ''\n };\n }\n const rgb = Hex2rgb(hex);\n if (support === 1) {\n open = ansi_2562ansi_16(rgb2ansi256Code(rgb[0], rgb[1], rgb[2]), bg);\n }\n if (support === 2) {\n open = rgb2ansi_256(rgb[0], rgb[1], rgb[2], bg);\n }\n if (support === 3) {\n open = rgb2ansi_16m(rgb[0], rgb[1], rgb[2], bg);\n }\n }\n }\n return {\n open,\n close\n };\n } else if (!OPTIONS.env) {\n return {\n open: '',\n close: ''\n };\n } else {\n if (!HEXTEST.test(color)) {\n color = COLORS[color.toLowerCase()];\n if (!color) {\n return {\n open: '',\n close: ''\n };\n }\n }\n if (bg) {\n return {\n open: color,\n close: ''\n };\n }\n return {\n open: `<span style=\"color:${color}\">`,\n close: '</span>'\n };\n }\n};\nmodule.exports = exports = {\n HEXTEST,\n Rgb2hsv,\n Hsv2rgb,\n Rgb2hex,\n Hex2rgb,\n Hsv2hsvRad,\n HsvRad2hsv,\n Hex2hsvRad,\n HsvRad2hex,\n rgb2ansi_16m,\n rgb2ansi256Code,\n rgb2ansi_256,\n ansi_2562ansi_16,\n get_term_color_support,\n Color\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Debugging\n * Debugging prettiness\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Color\n} = require('./Color.js');\n\n/**\n * DEBUG object for tracking debug mode and level\n *\n * @type {Object}\n */\nconst DEBUG = {\n store: {\n enabled: false,\n level: 2\n },\n set enabled(value) {\n this.store.enabled = value;\n },\n get enabled() {\n return this.store.enabled;\n },\n set level(value) {\n this.store.level = value;\n },\n get level() {\n return this.store.level;\n }\n};\n\n/**\n * Debugging prettiness\n *\n * @type {object}\n */\nconst Debugging = {\n /**\n * Return a headline preferably at the beginning of your app\n *\n * @param {string} text - The sting you want to log\n * @param {number} level - The debug level. Show equal and greater levels. Default: 99\n * @param {boolean} debug - Global debug mode on/off\n * @param {number} debuglevel - Global debug level\n */\n headline: (text, level = 99, debug = DEBUG.enabled, debuglevel = DEBUG.level) => {\n if (debug && level >= debuglevel) {\n const {\n open,\n close\n } = Color('black', true);\n console.log(`${open}\\n\\u001b[1m \\u2611 \\u001b[22m ${text}${close}`);\n }\n },\n /**\n * Return a message to report starting a process\n *\n * @param {string} text - The sting you want to log\n * @param {number} level - The debug level. Show equal and greater levels. Default: 99\n * @param {boolean} debug - Global debug mode on/off\n * @param {number} debuglevel - Global debug level\n */\n report: (text, level = 99, debug = DEBUG.enabled, debuglevel = DEBUG.level) => {\n if (debug && level >= debuglevel) {\n const {\n open: blackbg_open,\n close: blackbg_close\n } = Color('black', true);\n const {\n open: green_open,\n close: green_close\n } = Color('green');\n const {\n open: white_open,\n close: white_close\n } = Color('white');\n console.log(`${blackbg_open}\\n\\u001b[1m${green_open} \\u2611 ${green_close}\\u001b[22m ${white_open}${text}${white_close}${blackbg_close}`);\n }\n },\n /**\n * Return a message to report an error\n *\n * @param {string} text - The sting you want to log\n * @param {number} level - The debug level. Show equal and greater levels. Default: 99\n * @param {boolean} debug - Global debug mode on/off\n * @param {number} debuglevel - Global debug level\n */\n error: (text, level = 99, debug = DEBUG.enabled, debuglevel = DEBUG.level) => {\n if (debug && level >= debuglevel) {\n const {\n open: blackbg_open,\n close: blackbg_close\n } = Color('black', true);\n const {\n open: red_open,\n close: red_close\n } = Color('red');\n const {\n open: white_open,\n close: white_close\n } = Color('white');\n console.error(`${blackbg_open}\\n${red_open} \\u2612 ${red_close} ${white_open}${text}${white_close}${blackbg_close}`);\n }\n }\n};\nmodule.exports = exports = {\n DEBUG,\n Debugging\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Colorize\n * Replace placeholders with color information\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\nconst {\n Color\n} = require('./Color.js');\n\n/**\n * Replace placeholders with color information\n *\n * @param {string} character - The string to be converted\n * @param {number} fontColors - The number of allowed colors for this font\n * @param {array} optionColors - An array of user defined colors\n *\n * @return {string} - The character with color ansi escape sequences for CLI\n */\nconst Colorize = (character, fontColors, optionColors) => {\n Debugging.report(`Running Colorize`, 1);\n if (character !== undefined) {\n if (fontColors > 1) {\n // we have to replace all color placeholder with ansi escape sequences\n for (let i = 0; i < fontColors; i++) {\n const color = optionColors[i] || 'system';\n const {\n open: openNew,\n close: closeNew\n } = Color(color);\n const open = new RegExp(`<c${i + 1}>`, 'g');\n const close = new RegExp(`</c${i + 1}>`, 'g');\n character = character.replace(open, openNew);\n character = character.replace(close, closeNew);\n }\n }\n\n // if only one color is allowed there won't be any color placeholders in the characters\n if (fontColors === 1) {\n const color = optionColors[0] || 'system';\n const {\n open: openNew,\n close: closeNew\n } = Color(color);\n character = openNew + character + closeNew;\n }\n }\n return character;\n};\nmodule.exports = exports = {\n Colorize\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * AddLetterSpacing\n * Add letter spacing for the next character\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\nconst {\n Colorize\n} = require('./Colorize.js');\n\n/**\n * Add letter spacing for the next character\n *\n * @param {array} output - The output array the line shall be appended to\n * @param {number} fontLines - The number of lines this font has per character\n * @param {array} fontLetterspace - A space between the letters\n * @param {number} fontColors - The amount of colors allowed for this font\n * @param {array} colors - The user defined colors\n * @param {number} letterSpacing - The user defined letter spacing\n *\n * @return {array} - The output array with space\n */\nconst AddLetterSpacing = (output, fontLines, fontLetterspace, fontColors, colors, letterSpacing) => {\n Debugging.report(`Running AddLetterSpacing`, 1);\n let lines = output.length - fontLines; // last line is fontLines tall and is located at the bottom of the output array\n\n for (let i = lines; i < output.length; i++) {\n // iterate over last line\n let index = i - lines;\n let space = Colorize(fontLetterspace[index], fontColors, colors);\n if (space.length === 0 && letterSpacing > 0) {\n Debugging.report(`AddLetterSpacing: Adding space to letter spacing`, 1);\n space = ' ';\n }\n output[i] += space.repeat(letterSpacing);\n }\n return output;\n};\nmodule.exports = exports = {\n AddLetterSpacing\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * GetFirstCharacterPosition\n * Get the position of the first character out of all strings inside an array\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\n/**\n * Get the position of the first character out of all strings inside an array\n *\n * @param {array} lines - An array of strings\n *\n * @return {number} - The position of the first character\n */\nfunction GetFirstCharacterPosition(lines) {\n const earliest = lines.reduce((prevLine, line) => line.length - line.trimStart().length < prevLine.length - prevLine.trimStart().length && line !== '' ? line : prevLine, lines[0]);\n return earliest.length - earliest.trimStart().length;\n}\nmodule.exports = exports = {\n GetFirstCharacterPosition\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * GetLongestLine\n * Return the longest line of an Array\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\n/**\n * Return the longest line of an Array\n *\n * @param {array} lines - An array of strings\n *\n * @return {string} - The longest string from within the array\n */\nconst GetLongestLine = lines => lines.reduce((longestLine, line) => line.length > longestLine.length && line.length !== 0 ? line : longestLine, '');\nmodule.exports = exports = {\n GetLongestLine\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * GetLinear - Interpolate a linear path from a number to another number\n * GetTheta - Interpolate a radial path from a number to another number\n * GetGradientColors - Generate the most colorful delta between two colors\n * PaintLines - Take a bunch of lines and color them in the colors provided\n * Color2hex - Make sure a color is hex\n * GetGaps - Calculate the gaps between an array of points\n * TransitionBetweenHex - Generate colors between two given colors\n * Transition - Generate n colors between x colors\n * PaintGradient - Paint finished output in a gradient\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n GetFirstCharacterPosition\n} = require('./GetFirstCharacterPosition.js');\nconst {\n Color,\n Hex2rgb,\n Hex2hsvRad,\n HsvRad2hex,\n Rgb2hex\n} = require('./Color.js');\nconst {\n GetLongestLine\n} = require('./GetLongestLine.js');\nconst {\n GRADIENTS\n} = require('./constants.js');\nconst {\n Debugging\n} = require('./Debugging.js');\n\n/**\n * Interpolate a linear path from a number to another number\n *\n * @param {number} pointA - The number from which to start\n * @param {number} pointB - The number to go to\n * @param {number} n - The current step\n * @param {number} steps - The amount of steps\n *\n * @return {number} - The number at step n\n */\nfunction GetLinear(pointA, pointB, n, steps) {\n if (steps === 0) {\n return pointB;\n }\n return pointA + n * ((pointB - pointA) / steps);\n}\n\n/**\n * Interpolate a radial path from a number to another number\n *\n * @param {number} fromTheta - The radian from which to start\n * @param {number} toTheta - The radian to go to\n * @param {number} n - The current step\n * @param {number} steps - The amount of steps\n *\n * @return {number} - The radian at step n\n */\nfunction GetTheta(fromTheta, toTheta, n, steps) {\n const TAU = 2 * Math.PI;\n let longDistance;\n if (steps === 0) {\n return toTheta;\n }\n if (fromTheta > toTheta) {\n if (fromTheta - toTheta < Math.PI) {\n longDistance = TAU - (fromTheta - toTheta);\n } else {\n longDistance = toTheta - fromTheta;\n }\n } else {\n if (toTheta - fromTheta < Math.PI) {\n longDistance = toTheta - fromTheta - TAU;\n } else {\n longDistance = -1 * (fromTheta - toTheta);\n }\n }\n let result = fromTheta + n * (longDistance / steps);\n if (result < 0) {\n result += TAU;\n }\n if (result > TAU) {\n result -= TAU;\n }\n return result;\n}\n\n/**\n * Generate the most colorful delta between two colors\n *\n * @param {string} fromColor - The color from which to start\n * @param {string} toColor - The color to go to\n * @param {number} steps - The amount of colors of the gradient\n *\n * @return {array} - An array of colors\n */\nfunction GetGradientColors(fromColor, toColor, steps) {\n const [fromHRad, fromS, fromV] = Hex2hsvRad(fromColor);\n const [toHRad, toS, toV] = Hex2hsvRad(toColor);\n const hexColors = [];\n for (let n = 0; n < steps; n++) {\n const hRad = GetTheta(fromHRad, toHRad, n, steps - 1);\n const s = GetLinear(fromS, toS, n, steps - 1);\n const v = GetLinear(fromV, toV, n, steps - 1);\n hexColors.push(HsvRad2hex(hRad, s, v));\n }\n return hexColors;\n}\n\n/**\n * Take a bunch of lines and color them in the colors provided\n *\n * @param {array} lines - The lines to be colored\n * @param {array} colors - The colors in an array\n * @param {number} firstCharacterPosition - We may have to cut something off from the start when text is aligned center, right\n *\n * @return {array} - The lines in color\n */\nfunction PaintLines(lines, colors, firstCharacterPosition) {\n Debugging.report(`Running PaintLines`, 1);\n Debugging.report(colors, 2);\n const space = ' '.repeat(firstCharacterPosition);\n return lines.map(line => {\n const coloredLine = line.slice(firstCharacterPosition).split('').map((char, i) => {\n const {\n open,\n close\n } = Color(colors[i]);\n return `${open}${char}${close}`;\n }).join('');\n return `${space}${coloredLine}`;\n });\n}\n\n/**\n * Make sure a color is hex\n *\n * @param {string} color - The color\n *\n * @return {string} - The hex color\n */\nfunction Color2hex(color) {\n const colorMap = {\n black: '#000000',\n red: '#ff0000',\n green: '#00ff00',\n yellow: '#ffff00',\n blue: '#0000ff',\n magenta: '#ff00ff',\n cyan: '#00ffff',\n white: '#ffffff',\n gray: '#808080',\n grey: '#808080'\n };\n return colorMap[color] || color;\n}\n\n/**\n * Calculate the gaps between an array of points\n *\n * @param {array} points - An array of points, it's not important what's in the array for this function\n * @param {number} steps - The amount of steps we have to distribute between the above points\n *\n * @return {array} - An array of steps per gap\n */\nfunction GetGaps(points, steps) {\n // steps per gap\n const gapSteps = Math.floor((steps - points.length) / (points.length - 1));\n // steps left over to be distributed\n const rest = steps - (points.length + gapSteps * (points.length - 1));\n // the gaps array has one less items than our points (cause it's gaps between each of the points)\n const gaps = Array(points.length - 1).fill(gapSteps);\n\n // let's fill in the rest from the right\n for (let i = 0; i < rest; i++) {\n gaps[gaps.length - 1 - i]++;\n }\n return gaps;\n}\n\n/**\n * Generate colors between two given colors\n *\n * @param {string} fromHex - The color we start from in hex\n * @param {string} toHex - The color we end up at in hex\n * @param {number} steps - How many colors should be returned\n *\n * @return {array} - An array for colors\n */\nfunction TransitionBetweenHex(fromHex, toHex, steps) {\n const fromRgb = Hex2rgb(fromHex);\n const toRgb = Hex2rgb(toHex);\n const hexColors = [];\n steps++;\n for (let n = 1; n < steps; n++) {\n const red = GetLinear(fromRgb[0], toRgb[0], n, steps);\n const green = GetLinear(fromRgb[1], toRgb[1], n, steps);\n const blue = GetLinear(fromRgb[2], toRgb[2], n, steps);\n hexColors.push(Rgb2hex(red, green, blue));\n }\n return hexColors;\n}\n\n/**\n * Generate n colors between x colors\n *\n * @param {array} colors - An array of colors in hex\n * @param {number} steps - The amount of colors to generate\n * @param {object} gradients - An object of pre-packaged gradient colors\n *\n * @return {array} - An array of colors\n */\nfunction Transition(colors, steps, gradients = GRADIENTS) {\n let hexColors = [];\n if (colors.length === 1) {\n colors = gradients[colors[0].toLowerCase()];\n } else {\n colors = colors.map(color => Color2hex(color));\n }\n const gaps = GetGaps(colors, steps);\n if (steps <= 1) {\n return [colors[colors.length - 1]];\n }\n for (let i = 0; i < colors.length; i++) {\n const gap = gaps[i - 1];\n if (colors[i - 1]) {\n const gapColors = TransitionBetweenHex(colors[i - 1], colors[i], gap);\n hexColors = [...hexColors, ...gapColors];\n }\n if (gap !== -1) {\n hexColors.push(colors[i]);\n }\n }\n return hexColors;\n}\n\n/**\n * Paint finished output in a gradient\n *\n * @param {object} options - Arguments\n * @param {array} options.output - The output to be painted\n * @param {array} options.gradient - An array of two colors for start and end of gradient\n * @param {number} options.lines - How many lines the output contains\n * @param {number} options.lineHeight - The line height between lines\n * @param {number} options.fontLines - The line height (line breaks) of a single font line\n * @param {boolean} options.independentGradient - A switch to calculate gradient per line or not\n * @param {boolean} options.transitionGradient - A switch for transition gradients\n *\n * @return {array} - The output array painted in ANSI colors\n */\nfunction PaintGradient({\n output,\n gradient,\n lines,\n lineHeight,\n fontLines,\n independentGradient,\n transitionGradient\n}) {\n Debugging.report(`Running PaintGradient`, 1);\n let newOutput = [];\n if (transitionGradient) {\n Debugging.report(`Gradient transition with colors: ${JSON.stringify(gradient)}`, 2);\n } else {\n Debugging.report(`Gradient start: ${gradient[0]} | Gradient end: ${gradient[1]}`, 2);\n }\n let firstCharacterPosition = GetFirstCharacterPosition(output);\n let longestLine = GetLongestLine(output).length;\n for (let i = 0; i < lines; i++) {\n const start = i * (fontLines + lineHeight);\n const end = fontLines + start;\n const thisLine = output.slice(start, end);\n if (independentGradient) {\n firstCharacterPosition = GetFirstCharacterPosition(thisLine);\n longestLine = GetLongestLine(thisLine).length;\n }\n const colorsNeeded = longestLine - firstCharacterPosition;\n const linesInbetween = i === 0 ? [] : Array(lineHeight).fill('');\n Debugging.report(`longestLine: ${longestLine} | firstCharacterPosition: ${firstCharacterPosition}`, 2);\n const colors = transitionGradient ? Transition(gradient, colorsNeeded) : GetGradientColors(Color2hex(gradient[0]), Color2hex(gradient[1]), colorsNeeded);\n newOutput = [...newOutput, ...linesInbetween, ...PaintLines(thisLine, colors, firstCharacterPosition)];\n }\n return newOutput;\n}\nmodule.exports = exports = {\n GetLinear,\n GetTheta,\n GetGradientColors,\n PaintLines,\n Color2hex,\n GetGaps,\n TransitionBetweenHex,\n Transition,\n PaintGradient\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * CharLength\n * Return the max width of a character by looking at its longest line\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\n\n/**\n * Return the max width of a character by looking at its longest line\n *\n * @param {array} character - The character array from the font face object\n * @param {number} fontLines - The number of lines this font has per character\n * @param {number} letterSpacing - The user defined letter spacing\n *\n * @return {number} - The length of a longest line in a character\n */\nconst CharLength = (character, fontLines, letterSpacing) => {\n Debugging.report(`Running CharLength`, 1);\n let charWidth = 0;\n for (let i = 0; i < fontLines; i++) {\n let char = character[i].replace(/(<([^>]+)>)/gi, ''); // get character and strip color infos\n\n if (char.length > charWidth) {\n charWidth = char.length; // assign only largest\n }\n }\n if (charWidth === 0 && letterSpacing > 0) {\n Debugging.report(`CharLength: Adding space to letter spacing`, 1);\n charWidth = 1;\n }\n return charWidth;\n};\nmodule.exports = exports = {\n CharLength\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * CheckInput\n * Check input for human errors\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n HEXTEST,\n Color\n} = require('./Color.js');\nconst {\n COLORS,\n BGCOLORS,\n GRADIENTCOLORS,\n GRADIENTS,\n ALIGNMENT,\n FONTFACES\n} = require('./constants.js');\n\n/**\n * Check input for human errors\n *\n * @param {string} INPUT - The string you want to write out\n * @param {string} userFont - The user specified font\n * @param {array} userColors - The user specified colors\n * @param {string} userBackground - The user specified background color\n * @param {string} userAlign - The user specified alignment option\n * @param {array} userGradient - The user specified gradient option\n * @param {boolean} userTransitionGradient - The user specified gradient transition option\n * @param {string} userEnv - The user specified environment\n * @param {object} fontfaces - All allowed fontfaces\n * @param {object} colors - All allowed font colors\n * @param {object} bgcolors - All allowed background colors\n * @param {object} gradientcolors - All allowed gradient colors\n * @param {object} gradients - All allowed gradients\n * @param {array} alignment - All allowed alignments\n *\n * @typedef {object} ReturnObject\n * @property {boolean} pass - Whether the input is valid\n * @property {string} message - Possible error messages\n *\n * @return {ReturnObject} - An object with error messages and a pass key\n */\nconst CheckInput = (INPUT, userFont, userColors, userBackground, userAlign, userGradient, userTransitionGradient, userEnv, fontfaces = FONTFACES, colors = COLORS, bgcolors = BGCOLORS, gradientcolors = GRADIENTCOLORS, gradients = GRADIENTS, alignment = ALIGNMENT) => {\n let result = {\n message: '',\n pass: true\n };\n const {\n open: red_open,\n close: red_close\n } = Color('red');\n const {\n open: green_open,\n close: green_close\n } = Color('green');\n\n // checking input\n if (INPUT === undefined || INPUT === '') {\n return {\n message: 'Please provide text to convert',\n pass: false\n };\n }\n\n // checking font\n if (Object.keys(fontfaces).indexOf(userFont.toLowerCase()) === -1) {\n return {\n message: `\"${red_open}${userFont}${red_close}\" is not a valid font option.\\n` + `Please use a font from the supported stack:\\n${green_open}${Object.keys(fontfaces).map(font => fontfaces[font]).join(', ')}${green_close}`,\n pass: false\n };\n }\n\n // checking colors\n userColors.forEach(color => {\n // check color usage\n if (Object.keys(colors).indexOf(color.toLowerCase()) === -1 && color !== 'candy' && !HEXTEST.test(color)) {\n result = {\n message: `\"${red_open}${color}${red_close}\" is not a valid font color option.\\n` + `Please use a color from the supported stack or any valid hex color:\\n` + `${green_open}${Object.keys(colors).map(color => colors[color]).join(', ')}, candy, \"#3456ff\", \"#f80\", etc...${green_close}`,\n pass: false\n };\n }\n });\n\n // checking background colors\n if (Object.keys(bgcolors).indexOf(userBackground.toLowerCase()) === -1 && !HEXTEST.test(userBackground)) {\n return {\n message: `\"${red_open}${userBackground}${red_close}\" is not a valid background option.\\n` + `Please use a color from the supported stack:\\n` + `${green_open}${Object.keys(bgcolors).map(bgcolor => bgcolors[bgcolor]).join(', ')}, \"#3456ff\", \"#f80\", etc...${green_close}`,\n pass: false\n };\n }\n\n // CHECKING ALIGNMENT\n if (alignment.indexOf(userAlign.toLowerCase()) === -1) {\n return {\n message: `\"${red_open}${userAlign}${red_close}\" is not a valid alignment option.\\n` + `Please use an alignment option from the supported stack:\\n${green_open}${alignment.join(' | ')}${green_close}`,\n pass: false\n };\n }\n\n // CHECKING GRADIENT\n if (userGradient) {\n if (userGradient.length === 1 && Object.keys(gradients).indexOf(userGradient[0].toLowerCase()) !== -1 && userTransitionGradient) {\n return result;\n } else {\n if (userGradient.length < 2) {\n return {\n message: `\"${red_open}${userGradient}${red_close}\" is not a valid gradient option.\\n` + `Please pass in${userTransitionGradient ? ' at least' : ''} two colors.`,\n pass: false\n };\n }\n if (userGradient.length !== 2 && !userTransitionGradient) {\n return {\n message: `\"${red_open}${userGradient}${red_close}\" is not a valid gradient option.\\n` + `Please pass in two colors.`,\n pass: false\n };\n }\n\n // check validity of colors\n userGradient.forEach(color => {\n if (Object.keys(gradientcolors).indexOf(color.toLowerCase()) === -1 && !HEXTEST.test(color)) {\n result = {\n message: `\"${red_open}${color}${red_close}\" is not a valid gradient color option.\\n` + `Please use a color from the supported stack or any valid hex color:\\n${green_open}${Object.keys(gradientcolors).map(color => colors[color]).join(', ')}, \"#3456ff\", \"#f80\", etc...${green_close}`,\n pass: false\n };\n }\n });\n }\n }\n\n // CHECKING ENVIRONMENT\n if (userEnv !== 'node' && userEnv !== 'browser') {\n return {\n message: `\"${red_open}${userEnv}${red_close}\" is not a valid environment option.\\n` + `Please use only the supported options:\\n${green_open}node | browser${green_close}`,\n pass: false\n };\n }\n return result;\n};\nmodule.exports = exports = {\n CheckInput\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * CleanInput\n * Filter only allowed character\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n CHARS\n} = require('./constants.js');\n\n/**\n * Filter only allowed character\n *\n * @param {string} INPUT - The input text to be filtered\n * @param {array} chars - An array of all allowed characters\n *\n * @return {string} - The filtered input text\n */\nconst CleanInput = (INPUT, chars = CHARS) => {\n if (typeof INPUT === 'string') {\n const clean = INPUT.replace(/(?:\\r\\n|\\r|\\n)/g, '|').split('').filter(char => chars.includes(char.toUpperCase())).join('');\n return clean;\n } else {\n return '';\n }\n};\nmodule.exports = exports = {\n CleanInput\n};","'use strict';\n\n/* eslint no-invalid-this: 1 */\n\nvar ERROR_MESSAGE = 'Function.prototype.bind called on incompatible ';\nvar toStr = Object.prototype.toString;\nvar max = Math.max;\nvar funcType = '[object Function]';\n\nvar concatty = function concatty(a, b) {\n var arr = [];\n\n for (var i = 0; i < a.length; i += 1) {\n arr[i] = a[i];\n }\n for (var j = 0; j < b.length; j += 1) {\n arr[j + a.length] = b[j];\n }\n\n return arr;\n};\n\nvar slicy = function slicy(arrLike, offset) {\n var arr = [];\n for (var i = offset || 0, j = 0; i < arrLike.length; i += 1, j += 1) {\n arr[j] = arrLike[i];\n }\n return arr;\n};\n\nvar joiny = function (arr, joiner) {\n var str = '';\n for (var i = 0; i < arr.length; i += 1) {\n str += arr[i];\n if (i + 1 < arr.length) {\n str += joiner;\n }\n }\n return str;\n};\n\nmodule.exports = function bind(that) {\n var target = this;\n if (typeof target !== 'function' || toStr.apply(target) !== funcType) {\n throw new TypeError(ERROR_MESSAGE + target);\n }\n var args = slicy(arguments, 1);\n\n var bound;\n var binder = function () {\n if (this instanceof bound) {\n var result = target.apply(\n this,\n concatty(args, arguments)\n );\n if (Object(result) === result) {\n return result;\n }\n return this;\n }\n return target.apply(\n that,\n concatty(args, arguments)\n );\n\n };\n\n var boundLength = max(0, target.length - args.length);\n var boundArgs = [];\n for (var i = 0; i < boundLength; i++) {\n boundArgs[i] = '$' + i;\n }\n\n bound = Function('binder', 'return function (' + joiny(boundArgs, ',') + '){ return binder.apply(this,arguments); }')(binder);\n\n if (target.prototype) {\n var Empty = function Empty() {};\n Empty.prototype = target.prototype;\n bound.prototype = new Empty();\n Empty.prototype = null;\n }\n\n return bound;\n};\n","'use strict';\n\nvar implementation = require('./implementation');\n\nmodule.exports = Function.prototype.bind || implementation;\n","'use strict';\n\nvar call = Function.prototype.call;\nvar $hasOwn = Object.prototype.hasOwnProperty;\nvar bind = require('function-bind');\n\n/** @type {import('.')} */\nmodule.exports = bind.call(call, $hasOwn);\n","'use strict';\n\nvar hasOwn = require('hasown');\n\n// accessor descriptor properties\nvar accessor = {\n\t__proto__: null,\n\tconfigurable: 'boolean',\n\tenumerable: 'boolean',\n\tget: 'function',\n\tset: 'function'\n};\n\nmodule.exports = function isAccessorDescriptor(obj, prop) {\n\tif (typeof prop === 'string') {\n\t\tvar val = Object.getOwnPropertyDescriptor(obj, prop);\n\t\treturn typeof val !== 'undefined';\n\t}\n\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (hasOwn(obj, 'value') || hasOwn(obj, 'writable')) {\n\t\treturn false;\n\t}\n\n\t// one of them must be a function\n\tif (\n\t\t(!hasOwn(obj, 'get') || typeof obj.get !== 'function')\n\t\t&& (!hasOwn(obj, 'set') || typeof obj.set !== 'function')\n\t) {\n\t\treturn false;\n\t}\n\n\t// both of them must be a function or undefined\n\tif (\n\t\t(hasOwn(obj, 'get') && typeof obj.get !== 'function' && typeof obj.get !== 'undefined')\n\t\t|| (hasOwn(obj, 'set') && typeof obj.set !== 'function' && typeof obj.set !== 'undefined')\n\t) {\n\t\treturn false;\n\t}\n\n\tfor (var key in obj) { // eslint-disable-line no-restricted-syntax\n\t\tif (\n\t\t\thasOwn(obj, key)\n\t\t\t&& hasOwn(accessor, key)\n\t\t\t&& typeof obj[key] !== accessor[key] // eslint-disable-line valid-typeof\n\t\t\t&& typeof obj[key] !== 'undefined'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n","'use strict';\n\nvar hasOwn = require('hasown');\n\n// data descriptor properties\nvar data = {\n\t__proto__: null,\n\tconfigurable: 'boolean',\n\tenumerable: 'boolean',\n\twritable: 'boolean',\n};\n\nmodule.exports = function isDataDescriptor(obj, prop) {\n\tif (!obj || typeof obj !== 'object') {\n\t\treturn false;\n\t}\n\n\tif (typeof prop === 'string') {\n\t\tvar val = Object.getOwnPropertyDescriptor(obj, prop);\n\t\treturn typeof val !== 'undefined';\n\t}\n\n\tif (\n\t\t(!('value' in obj) && !('writable' in obj))\n\t\t|| 'get' in obj\n\t\t|| 'set' in obj\n\t) {\n\t\treturn false;\n\t}\n\n\tfor (var key in obj) { // eslint-disable-line no-restricted-syntax\n\t\tif (\n\t\t\tkey !== 'value'\n\t\t\t&& hasOwn(obj, key)\n\t\t\t&& hasOwn(data, key)\n\t\t\t&& typeof obj[key] !== data[key]\n\t\t\t&& typeof obj[key] !== 'undefined'\n\t\t) {\n\t\t\treturn false;\n\t\t}\n\t}\n\treturn true;\n};\n","'use strict';\n\nvar isAccessor = require('is-accessor-descriptor');\nvar isData = require('is-data-descriptor');\n\nmodule.exports = function isDescriptor(obj, key) {\n\tif (!obj || (typeof obj !== 'object' && typeof obj !== 'function')) {\n\t\treturn false;\n\t}\n\n\ttry {\n\t\tif ('get' in obj || 'set' in obj) {\n\t\t\treturn isAccessor(obj, key);\n\t\t}\n\n\t\treturn isData(obj, key);\n\t} catch (e) {\n\t\treturn false;\n\t}\n};\n","/*!\n * define-property <https://github.com/jonschlinkert/define-property>\n *\n * Copyright (c) 2015, 2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar isDescriptor = require('is-descriptor');\n\nmodule.exports = function defineProperty(obj, prop, val) {\n if (typeof obj !== 'object' && typeof obj !== 'function') {\n throw new TypeError('expected an object or function.');\n }\n\n if (typeof prop !== 'string') {\n throw new TypeError('expected `prop` to be a string.');\n }\n\n if (isDescriptor(val) && ('set' in val || 'get' in val)) {\n return Object.defineProperty(obj, prop, val);\n }\n\n return Object.defineProperty(obj, prop, {\n configurable: true,\n enumerable: false,\n writable: true,\n value: val\n });\n};\n","/*!\n * Determine if an object is a Buffer\n *\n * @author Feross Aboukhadijeh <https://feross.org>\n * @license MIT\n */\n\n// The _isBuffer check is for Safari 5-7 support, because it's missing\n// Object.prototype.constructor. Remove this eventually\nmodule.exports = function (obj) {\n return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer)\n}\n\nfunction isBuffer (obj) {\n return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj)\n}\n\n// For Node v0.10 support. Remove this eventually.\nfunction isSlowBuffer (obj) {\n return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0))\n}\n","var isBuffer = require('is-buffer');\nvar toString = Object.prototype.toString;\n\n/**\n * Get the native `typeof` a value.\n *\n * @param {*} `val`\n * @return {*} Native javascript type\n */\n\nmodule.exports = function kindOf(val) {\n // primitivies\n if (typeof val === 'undefined') {\n return 'undefined';\n }\n if (val === null) {\n return 'null';\n }\n if (val === true || val === false || val instanceof Boolean) {\n return 'boolean';\n }\n if (typeof val === 'string' || val instanceof String) {\n return 'string';\n }\n if (typeof val === 'number' || val instanceof Number) {\n return 'number';\n }\n\n // functions\n if (typeof val === 'function' || val instanceof Function) {\n return 'function';\n }\n\n // array\n if (typeof Array.isArray !== 'undefined' && Array.isArray(val)) {\n return 'array';\n }\n\n // check for instances of RegExp and Date before calling `toString`\n if (val instanceof RegExp) {\n return 'regexp';\n }\n if (val instanceof Date) {\n return 'date';\n }\n\n // other objects\n var type = toString.call(val);\n\n if (type === '[object RegExp]') {\n return 'regexp';\n }\n if (type === '[object Date]') {\n return 'date';\n }\n if (type === '[object Arguments]') {\n return 'arguments';\n }\n if (type === '[object Error]') {\n return 'error';\n }\n\n // buffer\n if (isBuffer(val)) {\n return 'buffer';\n }\n\n // es6: Map, WeakMap, Set, WeakSet\n if (type === '[object Set]') {\n return 'set';\n }\n if (type === '[object WeakSet]') {\n return 'weakset';\n }\n if (type === '[object Map]') {\n return 'map';\n }\n if (type === '[object WeakMap]') {\n return 'weakmap';\n }\n if (type === '[object Symbol]') {\n return 'symbol';\n }\n\n // typed arrays\n if (type === '[object Int8Array]') {\n return 'int8array';\n }\n if (type === '[object Uint8Array]') {\n return 'uint8array';\n }\n if (type === '[object Uint8ClampedArray]') {\n return 'uint8clampedarray';\n }\n if (type === '[object Int16Array]') {\n return 'int16array';\n }\n if (type === '[object Uint16Array]') {\n return 'uint16array';\n }\n if (type === '[object Int32Array]') {\n return 'int32array';\n }\n if (type === '[object Uint32Array]') {\n return 'uint32array';\n }\n if (type === '[object Float32Array]') {\n return 'float32array';\n }\n if (type === '[object Float64Array]') {\n return 'float64array';\n }\n\n // must be a plain object\n return 'object';\n};\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-2015, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nvar typeOf = require('kind-of');\n\nmodule.exports = function isNumber(num) {\n var type = typeOf(num);\n\n if (type === 'string') {\n if (!num.trim()) return false;\n } else if (type !== 'number') {\n return false;\n }\n\n return (num - num + 1) >= 0;\n};\n","/*!\n * window-size <https://github.com/jonschlinkert/window-size>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar os = require('os');\nvar isNumber = require('is-number');\nvar cp = require('child_process');\n\nfunction windowSize(options) {\n options = options || {};\n return streamSize(options, 'stdout') ||\n streamSize(options, 'stderr') ||\n envSize() ||\n ttySize(options);\n}\n\nfunction streamSize(options, name) {\n var stream = (process && process[name]) || options[name];\n var size;\n\n if (!stream) return;\n if (typeof stream.getWindowSize === 'function') {\n size = stream.getWindowSize();\n if (isSize(size)) {\n return {\n width: size[0],\n height: size[1],\n type: name\n };\n }\n }\n\n size = [stream.columns, stream.rows];\n if (isSize(size)) {\n return {\n width: Number(size[0]),\n height: Number(size[1]),\n type: name\n };\n }\n}\n\nfunction envSize() {\n if (process && process.env) {\n var size = [process.env.COLUMNS, process.env.ROWS];\n if (isSize(size)) {\n return {\n width: Number(size[0]),\n height: Number(size[1]),\n type: 'process.env'\n };\n }\n }\n}\n\nfunction ttySize(options, stdout) {\n var tty = options.tty || require('tty');\n if (tty && typeof tty.getWindowSize === 'function') {\n var size = tty.getWindowSize(stdout);\n if (isSize(size)) {\n return {\n width: Number(size[1]),\n height: Number(size[0]),\n type: 'tty'\n };\n }\n }\n}\n\nfunction winSize() {\n if (os.release().startsWith('10')) {\n var cmd = 'wmic path Win32_VideoController get CurrentHorizontalResolution,CurrentVerticalResolution';\n var numberPattern = /\\d+/g;\n var code = cp.execSync(cmd).toString();\n var size = code.match(numberPattern);\n if (isSize(size)) {\n return {\n width: Number(size[0]),\n height: Number(size[1]),\n type: 'windows'\n };\n }\n }\n}\n\nfunction tputSize() {\n try {\n var buf = cp.execSync('tput cols && tput lines', {stdio: ['ignore', 'pipe', process.stderr]});\n var size = buf.toString().trim().split('\\n');\n if (isSize(size)) {\n return {\n width: Number(size[0]),\n height: Number(size[1]),\n type: 'tput'\n };\n }\n } catch (err) {}\n}\n\n/**\n * Returns true if the given size array has\n * valid height and width values.\n */\n\nfunction isSize(size) {\n return Array.isArray(size) && isNumber(size[0]) && isNumber(size[1]);\n}\n\n/**\n * Expose `windowSize`\n */\n\nmodule.exports = {\n get: windowSize,\n env: envSize,\n tty: ttySize,\n tput: tputSize,\n win: winSize\n};\n","/*!\n * window-size <https://github.com/jonschlinkert/window-size>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nvar define = require('define-property');\nvar utils = require('./utils');\n\n/**\n * Expose `windowSize`\n */\n\nmodule.exports = utils.get();\n\nif (module.exports) {\n /**\n * Expose `windowSize.get` method\n */\n\n define(module.exports, 'get', utils.get);\n\n /**\n * Expose methods for unit tests\n */\n\n define(module.exports, 'env', utils.env);\n define(module.exports, 'tty', utils.tty);\n define(module.exports, 'tput', utils.tput);\n define(module.exports, 'win', utils.win);\n}\n\n","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Size\n * Abstraction for windows size\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst WinSize = require('window-size');\n\n/**\n * Abstraction for windows size\n *\n * @type {object}\n */\nconst Size = {\n width: WinSize ? WinSize.width > 0 ? WinSize.width : 80 : 80,\n height: WinSize ? WinSize.height > 0 ? WinSize.height : 24 : 24\n};\nmodule.exports = exports = {\n Size\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * AlignText\n * Calculate the spaces to be added to the left of each line to align them either center or right\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\nconst {\n Size\n} = require('./Size.js');\n\n/**\n * Calculate the spaces to be added to the left of each line to align them either center or right\n *\n * @param {array} output - The output array the line shall be appended to\n * @param {number} lineLength - The current line length\n * @param {number} characterLines - The amount of line breaks in one character\n * @param {string} align - The alignment of the text, only `center` and `right` will do anything\n * @param {object} size - The size of the terminal as an object, default: Size\n * @param {number} size.width - The width of the terminal\n * @param {number} size.height - The height of the terminal\n *\n * @return {array} - The output array with space added on the left for alignment\n */\nconst AlignText = (output, lineLength, characterLines, align, size = Size) => {\n Debugging.report(`Running AlignText`, 1);\n let space = 0;\n if (align === 'center') {\n // calculate the size for center alignment\n space = Math.ceil((size.width - lineLength) / 2);\n Debugging.report(`AlignText: Center lineLength: ${lineLength}, size.width: ${size.width}, space: ${space}`, 2);\n }\n if (align === 'right') {\n // calculate the size for right alignment\n space = size.width - lineLength;\n Debugging.report(`AlignText: Right lineLength: ${lineLength}, size.width: ${size.width}, space: ${space}`, 2);\n }\n if (space > 0) {\n // only add if there is something to add\n let lines = output.length - characterLines; // last line is characterLines tall and is located at the bottom of the output array\n const spaces = ' '.repeat(space);\n for (let i = lines; i < output.length; i++) {\n // iterate over last line (which can be several line breaks long)\n output[i] = spaces + output[i];\n }\n }\n return output;\n};\nmodule.exports = exports = {\n AlignText\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * AddLine\n * Add a new line to the output array\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\n\n/**\n * Add a new line to the output array\n *\n * @param {array} output - The output array the line shall be appended to\n * @param {number} fontLines - The number of lines this font has per character\n * @param {array} FontBuffer - An array of the space we add at the beginning of each line\n * @param {number} lineHeight - The user defined line height\n *\n * @return {array} - The output array with new line\n */\nconst AddLine = (output, fontLines, FontBuffer, lineHeight) => {\n Debugging.report(`Running AddLine`, 1);\n if (output.length === 0) {\n lineHeight = 0;\n }\n let lines = fontLines + output.length + lineHeight;\n let length = output.length;\n for (let i = length; i < lines; i++) {\n let index = i - length;\n if (index > lineHeight) {\n output[i] = FontBuffer[index - lineHeight];\n } else {\n output[i] = '';\n }\n }\n return output;\n};\nmodule.exports = exports = {\n AddLine\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * AddChar\n * Add a new character to the output array\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging\n} = require('./Debugging.js');\nconst {\n Colorize\n} = require('./Colorize.js');\n\n/**\n * Add a new character to the output array\n *\n * @param {string} CHAR - The character to be added\n * @param {array} output - The output array the line shall be appended to\n * @param {number} fontLines - The number of lines this font has per character\n * @param {object} fontChars - An object with all character arrays\n * @param {number} fontColors - The amount of colors allowed for this font\n * @param {object} colors - Our options\n *\n * @return {array} - The output array with new line\n */\nconst AddChar = (CHAR, output, fontLines, fontChars, fontColors, colors) => {\n Debugging.report(`Running AddChar with \"${CHAR}\"`, 1);\n let lines = output.length - fontLines; // last line is fontLines tall and is located at the bottom of the output array\n\n for (let i = lines; i < output.length; i++) {\n // iterate over last line\n let index = i - lines;\n output[i] += Colorize(fontChars[CHAR][index], fontColors, colors);\n }\n return output;\n};\nmodule.exports = exports = {\n AddChar\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * GetFont\n * Get a selected JSON font-file object\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst path = require('path');\nconst {\n Debugging\n} = require('./Debugging.js');\n\n/**\n * Get a selected JSON font-file object\n *\n * @param {string} font - The name of the font to be returned\n *\n * @return {object} - The font object of that file\n */\nconst GetFont = font => {\n Debugging.report(`Running GetFont`, 1);\n\n // try loading the font file\n try {\n let FONTFACE = require(path.normalize(`../fonts/${font}.json`)); // read font file\n\n Debugging.report(`GetFont: Fontface path selected: \"${font}.json\"`, 2);\n return FONTFACE;\n } catch (error) {\n Debugging.error(`Font file for \"${font}\" errored out: ${error}`, 2);\n return false;\n }\n};\nmodule.exports = exports = {\n GetFont\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Log\n * Logging prettiness\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Color\n} = require('./Color.js');\n\n/**\n * Logging prettiness\n *\n * @type {object}\n */\nconst Log = {\n /**\n * Print error message to console.\n *\n * @param {string} text - The sting you want to log\n */\n error: text => {\n text = text.replace(/(?:\\r\\n|\\r|\\n)/g, '\\n '); // indent each line\n const {\n open,\n close\n } = Color('red');\n console.error(`\\n \\u001b[1m${open}Ouch:${close}\\u001b[22m ${text}\\n`);\n }\n};\nmodule.exports = exports = {\n Log\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Render\n * Main method to get the ANSI output for a string\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n AddLetterSpacing\n} = require('./AddLetterSpacing.js');\nconst {\n Debugging,\n DEBUG\n} = require('./Debugging.js');\nconst {\n PaintGradient\n} = require('./Gradient.js');\nconst {\n CharLength\n} = require('./CharLength.js');\nconst {\n CheckInput\n} = require('./CheckInput.js');\nconst {\n CleanInput\n} = require('./CleanInput.js');\nconst {\n AlignText\n} = require('./AlignText.js');\nconst {\n AddLine\n} = require('./AddLine.js');\nconst {\n AddChar\n} = require('./AddChar.js');\nconst {\n Options\n} = require('./Options.js');\nconst {\n GetFont\n} = require('./GetFont.js');\nconst {\n CHARS\n} = require('./constants.js');\nconst {\n Color\n} = require('./Color.js');\nconst {\n Size\n} = require('./Size.js');\nconst {\n Log\n} = require('./Log.js');\n\n/**\n * Main method to get the ANSI output for a string\n *\n * @param {string} input - The string you want to write out\n * @param {object} SETTINGS - Settings object\n * @param {boolean} debug - A flag to enable debug mode\n * @param {number} debuglevel - The debug level we want to show\n * @param {object} size - The size of the terminal as an object, default: Size\n * @param {number} size.width - The width of the terminal\n * @param {number} size.height - The height of the terminal\n *\n * @typedef {object} ReturnObject\n * @property {string} string - The pure string for output with all line breaks\n * @property {Array<string>} array - Each line of output in an array\n * @property {number} lines - The number of lines\n * @property {object} options - All options used\n *\n * @return {ReturnObject|false} - CLI output of INPUT to be consoled out\n */\nconst Render = (input, SETTINGS = {}, debug = DEBUG.enabled, debuglevel = DEBUG.level, size = Size) => {\n Debugging.report(`Running render`, 1);\n DEBUG.enabled = debug;\n DEBUG.level = debuglevel;\n const INPUT = CleanInput(input, CHARS);\n Options.reset();\n Options.set = SETTINGS;\n const OPTIONS = Options.get;\n let output = []; // for output where each line is an output line\n let lines = 0; // for counting each line\n let FONTFACE = {}; // scoping the fontface object higher for fonts with just one color\n\n const _isGoodHuman = CheckInput(INPUT, OPTIONS.font, OPTIONS.colors, OPTIONS.background, OPTIONS.align, OPTIONS.gradient, OPTIONS.transitionGradient, OPTIONS.env);\n if (!_isGoodHuman.pass) {\n Log.error(_isGoodHuman.message);\n return false;\n }\n\n // the gradient option supersedes the color options\n if (OPTIONS.gradient) {\n OPTIONS.colors = [];\n }\n\n // display an overview of options if debug flag is enabled\n if (DEBUG.enabled) {\n let outOption = `OPTIONS:\\n Text: ${INPUT}`;\n for (let key in OPTIONS) {\n outOption += `\\n Options.${key}: ${OPTIONS[key]}`;\n }\n Debugging.report(outOption, 3);\n }\n if (OPTIONS.env === 'browser') {\n size = {\n ...size\n }; // we clone so we don't make changes to this object across multiple instances\n size.width = OPTIONS.maxLength === 0 ? 999999999999 : OPTIONS.maxLength;\n }\n FONTFACE = GetFont(OPTIONS.font);\n if (!FONTFACE) {\n Log.error(`Font file for the font \"${OPTIONS.font}\" could not be found.\\nTry reinstalling this package.`);\n return false;\n }\n\n // setting the letterspacing preference from font face if there is no user overwrite\n if (SETTINGS.letterSpacing === undefined) {\n Debugging.report(`Looking up letter spacing from font face`, 1);\n let width = 0;\n FONTFACE.letterspace.forEach(item => {\n let char = item.replace(/(<([^>]+)>)/gi, ''); // get character and strip color infos\n\n if (width < char.length) {\n width = char.length;\n }\n });\n Debugging.report(`Letter spacing set to font face default: \"${width}\"`, 2);\n OPTIONS.letterSpacing = width;\n }\n let lineLength = CharLength(FONTFACE.buffer, FONTFACE.lines, OPTIONS); // count each output character per line and start with the buffer\n let maxChars = 0; // count each character we print for maxLength option\n\n // handle raw mode\n let line_break = '\\n';\n if (OPTIONS.env === 'node' && OPTIONS.rawMode === true) {\n line_break = '\\r\\n';\n }\n output = AddLine([], FONTFACE.lines, FONTFACE.buffer, OPTIONS.lineHeight); // create first lines with buffer\n lines++;\n for (let i = 0; i < INPUT.length; i++) {\n // iterate through the message\n let CHAR = INPUT.charAt(i).toUpperCase(); // the current character we convert, only upper case is supported at this time\n let lastLineLength = lineLength; // we need the lineLength for alignment before we look up if the next char fits\n\n Debugging.report(`Character found in font: \"${CHAR}\"`, 2);\n if (CHAR !== `|`) {\n // what will the line length be if we add the next char?\n lineLength += CharLength(FONTFACE.chars[CHAR], FONTFACE.lines, OPTIONS); // get the length of this character\n lineLength += CharLength(FONTFACE.letterspace, FONTFACE.lines, OPTIONS) * OPTIONS.letterSpacing; // new line, new line length\n }\n\n // jump to next line after OPTIONS.maxLength characters or when line break is found or the console windows would have ran out of space\n if (maxChars >= OPTIONS.maxLength && OPTIONS.maxLength != 0 || CHAR === `|` || lineLength > size.width) {\n lines++;\n Debugging.report(`NEWLINE: maxChars: ${maxChars}, ` + `OPTIONS.maxLength: ${OPTIONS.maxLength}, ` + `CHAR: ${CHAR}, ` + `lineLength: ${lineLength}, ` + `Size.width: ${size.width} `, 2);\n if (OPTIONS.env === 'node') {\n output = AlignText(output, lastLineLength, FONTFACE.lines, OPTIONS.align, size); // calculate alignment based on lineLength\n }\n lineLength += CharLength(FONTFACE.letterspace, FONTFACE.lines, OPTIONS) * OPTIONS.letterSpacing; // each new line starts with letter spacing\n lineLength = CharLength(FONTFACE.buffer, FONTFACE.lines, OPTIONS); // new line: new line length\n\n if (CHAR !== `|`) {\n // if this is a character and not a line break\n lineLength += CharLength(FONTFACE.letterspace, FONTFACE.lines, OPTIONS) * OPTIONS.letterSpacing; // add letter spacing at the end\n lineLength += CharLength(FONTFACE.chars[CHAR], FONTFACE.lines, OPTIONS); // get the length of this character\n }\n maxChars = 0; // new line, new maxLength goal\n\n output = AddLine(output, FONTFACE.lines, FONTFACE.buffer, OPTIONS.lineHeight); // adding new line\n // add letter spacing to the beginning\n }\n Debugging.report(`lineLength at: \"${lineLength}\"`, 2);\n if (CHAR !== `|`) {\n maxChars++; // counting all printed characters\n output = AddLetterSpacing(output, FONTFACE.lines, FONTFACE.letterspace, FONTFACE.colors, OPTIONS.colors, OPTIONS.letterSpacing);\n output = AddChar(CHAR, output, FONTFACE.lines, FONTFACE.chars, FONTFACE.colors, OPTIONS.colors); // add new character\n }\n }\n if (OPTIONS.env === 'node') {\n output = AlignText(output, lineLength, FONTFACE.lines, OPTIONS.align, size); // alignment last line\n }\n if (OPTIONS.gradient) {\n output = PaintGradient({\n output,\n gradient: OPTIONS.gradient,\n lines,\n lineHeight: OPTIONS.lineHeight,\n fontLines: FONTFACE.lines,\n independentGradient: OPTIONS.independentGradient,\n transitionGradient: OPTIONS.transitionGradient\n });\n }\n if (!OPTIONS.spaceless) {\n // add space\n if (OPTIONS.align === 'top') {\n output[output.length - 1] = `${output[output.length - 1]}${line_break}${line_break}${line_break}${line_break}`;\n } else if (OPTIONS.align === 'bottom') {\n output[0] = `${line_break}${line_break}${line_break}${line_break}${output[0]}`;\n } else {\n output[0] = `${line_break}${line_break}${output[0]}`;\n output[output.length - 1] = `${output[output.length - 1]}${line_break}${line_break}`;\n }\n }\n if (OPTIONS.background !== 'transparent' && OPTIONS.env === 'node') {\n const {\n open: openNew,\n close: closeNew\n } = Color(OPTIONS.background, true);\n output[0] = `${openNew}${line_break}${output[0]}`;\n output[output.length - 1] = `${output[output.length - 1]}${closeNew}`;\n }\n let write = output.join(OPTIONS.env === 'node' ? `${line_break}` : `<br>${line_break}`);\n if (OPTIONS.env === 'browser') {\n const {\n open: bgColor\n } = Color(OPTIONS.background, true);\n write = `<div style=\"font-family:monospace;white-space:pre;text-align:${OPTIONS.align};max-width:100%;overflow:scroll;background:${bgColor ? bgColor : 'transparent'}\">` + `${write}` + `</div>`;\n }\n return {\n string: write,\n array: output,\n lines: lines,\n options: OPTIONS\n };\n};\nmodule.exports = exports = {\n Render\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * DisplayHelp\n * Display the help generated from our CLIOPTIONS\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n CLIOPTIONS\n} = require('./constants.js');\nconst {\n Render\n} = require('./Render.js');\nconst {\n Color\n} = require('./Color.js');\n\n/**\n * Display the help generated from our CLIOPTIONS\n */\nconst DisplayHelp = () => {\n const {\n string: headline\n } = Render('cfonts', {\n align: 'left',\n gradient: ['red', 'green']\n }) || {\n string: 'cfonts'\n };\n console.log(` ${headline}` + `This is a tool for sexy fonts in the console. Give your cli some love.\\n\\n` + `Usage: cfonts \"<value>\" [option1] <input1> [option2] <input1>,<input2> [option3]\\n` + `Example: \\u001b[1m$ cfonts \"sexy font\" -f chrome -a center -c red,green,gray\\u001b[22m\\n\\n` + `Options:\\n`);\n const {\n open,\n close\n } = Color('green');\n Object.keys(CLIOPTIONS).forEach(option => {\n console.log(`\\u001b[1m${option}, ${CLIOPTIONS[option].short}\\u001b[22m`);\n console.log(CLIOPTIONS[option].description);\n console.log(`\\u001b[1m$\\u001b[22m cfonts ${CLIOPTIONS[option].example.replace(/\\[green-open\\]/g, open).replace(/\\[green-close\\]/g, close)}\\n`);\n });\n};\nmodule.exports = exports = {\n DisplayHelp\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * AddShortcuts\n * Flatten the shortcuts in our cli options object\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\n/**\n * Flatten the shortcuts in our cli options object\n *\n * @param {object} options - An object objects with a short key\n *\n * @return {object} - All short keys flattened into first level\n */\nconst AddShortcuts = options => {\n const flatOptions = Object.assign({}, options);\n Object.keys(flatOptions).forEach(option => {\n flatOptions[option]._name = option;\n flatOptions[flatOptions[option].short] = flatOptions[option];\n if (flatOptions[option].fallback_shortcut) {\n flatOptions[flatOptions[option].fallback_shortcut] = flatOptions[option];\n }\n });\n return flatOptions;\n};\nmodule.exports = exports = {\n AddShortcuts\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * ParseArgs\n * Parse cli arguments into a nice object\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n AddShortcuts\n} = require('./AddShortcuts.js');\nconst {\n CLIOPTIONS\n} = require('./constants.js');\nconst {\n Debugging\n} = require('./Debugging.js');\n\n/**\n * Parse cli arguments into a nice object\n *\n * @param {object} inputOptions - All possible options registered for this app\n * @param {array} inputArgs - The arguments given to us in our cli, default: process.argv\n *\n * @return {object} - An object of all options with at least their default values\n */\nconst ParseArgs = (inputOptions = CLIOPTIONS, inputArgs = process.argv) => {\n const parsedArgs = {\n text: inputArgs[2]\n };\n\n // create defaults\n Object.keys(inputOptions).forEach(option => {\n const name = option.replace('--', '');\n parsedArgs[name] = inputOptions[option].default;\n });\n const args = inputArgs.splice(3); // the first two are node specific, the third is our text\n\n const options = AddShortcuts(inputOptions);\n const version_options = options['-v'];\n if (inputArgs[2] === version_options._name || inputArgs[2] === version_options.short || inputArgs[2] === version_options.fallback_shortcut) {\n parsedArgs.version = true;\n }\n const help_options = options['-h'];\n if (inputArgs[2] === help_options._name || inputArgs[2] === help_options.short || inputArgs[2] === help_options.fallback_shortcut) {\n parsedArgs.help = true;\n }\n for (let index = 0; args.length > index; index++) {\n const option = options[args[index]];\n if (option) {\n const name = option._name.replace('--', '');\n if (option.options !== undefined) {\n index++;\n const value = args[index];\n parsedArgs[name] = value;\n } else {\n parsedArgs[name] = true;\n }\n } else {\n Debugging.report(`The cli argument ${args[index]} was not found and ignored`, 2);\n }\n }\n return parsedArgs;\n};\nmodule.exports = exports = {\n ParseArgs\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Say\n * Print to console\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n Debugging,\n DEBUG\n} = require('./Debugging.js');\nconst {\n Render\n} = require('./Render.js');\nconst {\n Size\n} = require('./Size.js');\n\n/**\n * Print to console\n *\n * @param {string} INPUT - The string you want to write out\n * @param {object} SETTINGS - Settings object\n * @param {boolean} debug - A flag to enable debug mode\n * @param {number} debuglevel - The debug level we want to show\n * @param {object} size - The size of the terminal as an object, default: Size\n * @param {number} size.width - The width of the terminal\n * @param {number} size.height - The height of the terminal\n */\nconst Say = (INPUT, SETTINGS = {}, debug = DEBUG.enabled, debuglevel = DEBUG.level, size = Size) => {\n Debugging.report(`Running say`, 1);\n DEBUG.enabled = debug;\n DEBUG.level = debuglevel;\n const write = Render(INPUT, SETTINGS, debug, debuglevel, size);\n if (write) {\n console.log(write.string); // write out\n }\n};\nmodule.exports = exports = {\n Say\n};","/***************************************************************************************************************************************************************\n *\n * cfonts\n *\n * Sexy fonts for the console. (CLI output)\n *\n * @license https://github.com/dominikwilkowski/cfonts/blob/released/LICENSE GNU GPL-3.0-or-later\n * @author Dominik Wilkowski hi@dominik-wilkowski.com\n * @repository https://github.com/dominikwilkowski/cfonts\n *\n * Cli\n * Run cli commands\n *\n **************************************************************************************************************************************************************/\n\n'use strict';\n\nconst {\n DisplayVersion\n} = require('./DisplayVersion.js');\nconst {\n DisplayHelp\n} = require('./DisplayHelp.js');\nconst {\n CLIOPTIONS\n} = require('./constants.js');\nconst {\n Debugging\n} = require('./Debugging.js');\nconst {\n ParseArgs\n} = require('./ParseArgs.js');\nconst {\n Render\n} = require('./Render.js');\nconst {\n Color\n} = require('./Color.js');\nconst {\n Log\n} = require('./Log.js');\nconst {\n Say\n} = require('./Say.js');\n\n/**\n * Run cli commands\n *\n * @param {object} inputOptions - All possible options registered for this app\n * @param {array} inputArgs - The arguments given to us in our cli, default: process.argv\n */\nconst Cli = (inputOptions = CLIOPTIONS, inputArgs = process.argv) => {\n const args = ParseArgs(inputOptions, inputArgs);\n Debugging.report(`OPTIONS:\\n` + ` CFonts.say(\"${args.text}\", {\\n` + ` font: \"${args.font}\",\\n` + ` align: \"${args.align}\",\\n` + ` colors: ${args.colors ? JSON.stringify(args.colors.split(',')) : []},\\n` + ` background: \"${args.background}\",\\n` + ` letterSpacing: ${args['letter-spacing']},\\n` + ` lineHeight: ${args['line-height']},\\n` + ` spaceless: ${args.spaceless},\\n` + ` maxLength: ${args['max-length']},\\n` + ` gradient: ${args.gradient},\\n` + ` independentGradient: ${args['independent-gradient']},\\n` + ` transitionGradient: ${args['transition-gradient']},\\n` + ` rawMode: ${args['raw-mode']},\\n` + ` env: ${args.env},\\n` + ` }, ${args.debug}, ${args['debug-level']} );`, 3, args.debug, args['debug-level']);\n if (args.help) {\n DisplayHelp();\n return;\n }\n if (args.version) {\n DisplayVersion();\n return;\n }\n if (!args.text) {\n const {\n open: green_open,\n close: green_close\n } = Color('green');\n Log.error(`Please provide text to convert with ${green_open}cfonts \"Text\"${green_close}\\n` + `Run ${green_open}cfonts --help${green_close} for more infos`);\n return;\n }\n Say(args.text, {\n font: args.font,\n align: args.align,\n colors: args.colors ? args.colors.split(',') : [],\n background: args.background,\n letterSpacing: args['letter-spacing'],\n lineHeight: args['line-height'],\n spaceless: args.spaceless,\n maxLength: args['max-length'],\n gradient: args.gradient,\n independentGradient: args['independent-gradient'],\n transitionGradient: args['transition-gradient'],\n rawMode: args['raw-mode'],\n env: args.env\n }, args.debug, args['debug-level']);\n};\nmodule.exports = exports = {\n render: Render,\n say: Say,\n Cli\n};","/**\n * Fennec CLI Formatting System\n *\n * Central module for all CLI output formatting.\n * Uses picocolors (7KB, zero dependencies) for coloring.\n *\n * Design principles:\n * - Minimal dependencies (picocolors only)\n * - Clean, modern, readable output\n * - Consistent spacing and alignment\n * - Fox-themed (🦊) but not overwhelming\n */\n\nimport { createInterface } from \"node:readline\";\nimport pc from \"picocolors\";\nimport CliTable3 from \"cli-table3\";\n\n// ─── Color Helpers ───────────────────────────────────────────────\n\n/**\n * Custom hex color formatter.\n * picocolors has hex() at runtime but can be undefined on some Node.js\n * versions due to CJS/ESM interop issues. We detect and fall back.\n */\nfunction hex(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\n// Brand colors (runtime-safe, bypass TypeScript limitations)\nconst fennecOrange = hex(\"#FF6432\");\nconst blueAccent = hex(\"#4A90D9\");\nconst redAccent = hex(\"#E94560\");\n\n// ─── Color Palette ───────────────────────────────────────────────\n\nexport const colors = {\n // Brand colors\n primary: fennecOrange,\n secondary: blueAccent,\n accent: redAccent,\n\n // Semantic colors\n success: pc.green,\n error: pc.red,\n warning: pc.yellow,\n info: pc.cyan,\n muted: pc.dim,\n highlight: pc.bold,\n\n // Backgrounds\n bgSuccess: (s: string) => pc.bgGreen(pc.black(` ${s} `)),\n bgError: (s: string) => pc.bgRed(pc.white(` ${s} `)),\n bgWarning: (s: string) => pc.bgYellow(pc.black(` ${s} `)),\n bgInfo: (s: string) => pc.bgCyan(pc.black(` ${s} `)),\n} as const;\n\n// ─── Symbols ─────────────────────────────────────────────────────\n\nexport const symbols = {\n // Status\n active: pc.green(\"●\"),\n inactive: pc.dim(\"○\"),\n error: pc.red(\"✗\"),\n warning: pc.yellow(\"⚠\"),\n success: pc.green(\"✓\"),\n info: pc.cyan(\"ℹ\"),\n pending: pc.yellow(\"◌\"),\n\n // UI\n bullet: pc.dim(\"│\"),\n dot: pc.dim(\"·\"),\n arrow: pc.cyan(\"→\"),\n pointer: fennecOrange(\"▶\"),\n separator: pc.dim(\"─\"),\n\n // Fennec\n fox: \"🦊\",\n ears: \"⏜\",\n} as const;\n\n// ─── Status Badges ───────────────────────────────────────────────\n\nexport type ProcessStatus = \"running\" | \"stopped\" | \"error\" | \"starting\" | \"unknown\";\n\nexport function statusBadge(status: ProcessStatus): string {\n switch (status) {\n case \"running\": return pc.green(\"● running\");\n case \"stopped\": return pc.dim(\"○ stopped\");\n case \"error\": return pc.red(\"✗ error\");\n case \"starting\": return pc.yellow(\"◌ starting\");\n case \"unknown\": return pc.dim(\"? unknown\");\n }\n}\n\nexport type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\";\n\nexport function logLevel(label: string): string {\n const upper = label.toUpperCase().padEnd(5);\n switch (label.toLowerCase()) {\n case \"error\": return pc.bgRed(pc.white(` ${upper} `));\n case \"warn\": return pc.bgYellow(pc.black(` ${upper} `));\n case \"info\": return pc.bgCyan(pc.black(` ${upper} `));\n case \"debug\": return pc.dim(pc.italic(upper));\n case \"verbose\": return pc.dim(pc.italic(upper));\n default: return pc.dim(upper);\n }\n}\n\n// ─── Table Renderer (cli-table3 powered) ────────────────────────\n\nexport interface Column {\n key: string;\n label: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number;\n format?: (value: unknown) => string;\n}\n\nexport interface Row {\n [key: string]: unknown;\n}\n\nexport function renderTable(columns: Column[], rows: Row[], options?: { padding?: number; compact?: boolean }): string {\n const pad = options?.padding ?? 1;\n\n if (rows.length === 0) {\n return pc.dim(\" (no data)\");\n }\n\n // Build cli-table3 instance\n const table = new CliTable3({\n head: columns.map((c) => pc.bold(c.label)),\n colAligns: columns.map((c) => c.align ?? \"left\"),\n style: {\n \"padding-left\": pad,\n \"padding-right\": pad,\n head: [], // reset default styles; our pc.bold is already applied\n border: [],\n compact: false,\n },\n chars: {\n top: \"─\", \"top-mid\": \"┬\", \"top-left\": \"┌\", \"top-right\": \"┐\",\n \"bottom\": \"─\", \"bottom-mid\": \"┴\", \"bottom-left\": \"└\", \"bottom-right\": \"┘\",\n left: \"│\", \"left-mid\": \"├\", mid: \"─\", \"mid-mid\": \"┼\",\n right: \"│\", \"right-mid\": \"┤\",\n middle: \"│\",\n },\n truncate: \"…\",\n });\n\n for (const row of rows) {\n const values = columns.map((col) => {\n const raw = row[col.key];\n return col.format ? col.format(raw) : String(raw ?? \"-\");\n });\n table.push(values);\n }\n\n const output = table.toString();\n\n // Apply dim to all border lines (head, body, foot)\n const lines = output.split(\"\\n\");\n return lines.map((l) => {\n // Only dim border chars (lines that start with box-drawing chars)\n if (l.length > 0 && (l[0] === \"┌\" || l[0] === \"│\" || l[0] === \"├\" || l[0] === \"└\" || l[0] === \"─\")) {\n // Dim the border characters but keep cell content bright\n return l.replace(/^([│├└┌┐┤┴┬─]+)/, (m) => pc.dim(m));\n }\n return l;\n }).join(\"\\n\");\n}\n\n// ─── Key-Value Display ───────────────────────────────────────────\n\nexport function renderKV(key: string, value: string, options?: { indent?: number; separator?: string }): string {\n const indent = options?.indent ?? 2;\n const sep = options?.separator ?? \":\";\n const pad = \" \".repeat(indent);\n return `${pad}${pc.dim(key + sep)} ${value}`;\n}\n\nexport function renderKVColor(key: string, value: string, color: (s: string) => string = pc.bold): string {\n return ` ${pc.dim(key + \":\")} ${color(value)}`;\n}\n\nexport function renderSection(title: string, content: string): string {\n const line = pc.dim(\"─\".repeat(40));\n return `\\n ${pc.bold(title)}\\n ${line}\\n${content}\\n`;\n}\n\n// ─── Box Renderer ────────────────────────────────────────────────\n\nexport function renderBox(title: string, content: string, options?: {\n width?: number;\n borderColor?: (s: string) => string;\n titleColor?: (s: string) => string;\n}): string {\n const width = options?.width ?? 50;\n const border = options?.borderColor ?? pc.dim;\n const titleColor = options?.titleColor ?? pc.bold;\n\n const lines = content.split(\"\\n\");\n const wrapped = lines.map((l) => {\n const clean = l.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n return l + \" \".repeat(Math.max(0, width - clean.length - 2));\n });\n\n const top = border(`┌─ ${titleColor(title)} ${\"─\".repeat(Math.max(0, width - title.length - 4))}┐`);\n const mid = wrapped.map((l) => border(\"│ \") + l + border(\" │\")).join(\"\\n\");\n const bot = border(`└${\"─\".repeat(width)}┘`);\n\n return `\\n${top}\\n${mid}\\n${bot}\\n`;\n}\n\n// ─── Spinner (minimal, no dependencies) ──────────────────────────\n\nexport interface Spinner {\n update(text: string): void;\n succeed(text: string): void;\n fail(text: string): void;\n warn(text: string): void;\n stop(): void;\n}\n\nexport function createSpinner(text: string): Spinner {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let i = 0;\n let running = true;\n\n const interval = setInterval(() => {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${text}`);\n i = (i + 1) % frames.length;\n }, 80);\n\n return {\n update(newText: string) {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${newText}`);\n },\n succeed(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.green(\"✓\")} ${msg}\\n`);\n },\n fail(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.red(\"✗\")} ${msg}\\n`);\n },\n warn(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.yellow(\"⚠\")} ${msg}\\n`);\n },\n stop() {\n running = false;\n clearInterval(interval);\n },\n };\n}\n\n// ─── Interactive Select (enhanced) ───────────────────────────────\n\nexport async function selectPrompt<T extends string>(\n message: string,\n options: { value: T; label: string; description?: string }[],\n): Promise<T | null> {\n console.log(`\\n ${pc.bold(message)}\\n`);\n options.forEach((opt, i) => {\n const num = pc.cyan(` ${i + 1}`);\n console.log(`${num} ${opt.label}`);\n if (opt.description) {\n console.log(` ${pc.dim(opt.description)}`);\n }\n });\n console.log(` ${pc.dim(\"0) Cancel\")}\\n`);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(` ${pc.bold(\"Enter number\")} ${pc.dim(\"(0-\" + options.length + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim());\n });\n });\n\n const num = parseInt(answer, 10);\n if (isNaN(num) || num === 0) return null;\n const selected = options[num - 1];\n if (!selected) {\n console.log(` ${pc.red(\"Invalid selection.\")}`);\n return null;\n }\n return selected.value;\n}\n\nexport async function confirmPrompt(message: string, defaultValue = false): Promise<boolean> {\n const hint = defaultValue ? pc.bold(\"Y\") + pc.dim(\"/n\") : pc.dim(\"y/\") + pc.bold(\"N\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(`\\n ${message} ${pc.dim(\"(\" + hint + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim().toLowerCase());\n });\n });\n\n if (!answer) return defaultValue;\n return answer === \"y\" || answer === \"yes\";\n}\n\n// ─── Divider ─────────────────────────────────────────────────────\n\nexport function divider(text?: string): string {\n if (text) {\n const len = 50 - text.length - 2;\n const left = Math.floor(len / 2);\n const right = len - left;\n return pc.dim(\"─\".repeat(left) + ` ${text} ` + \"─\".repeat(right));\n }\n return pc.dim(\"─\".repeat(50));\n}\n\n// ─── Timestamp ───────────────────────────────────────────────────\n\nexport function timestamp(date?: Date): string {\n const d = date ?? new Date();\n const time = d.toLocaleTimeString(\"en-US\", { hour12: false });\n return pc.dim(`[${time}]`);\n}\n\n// ─── Command Line ────────────────────────────────────────────────\n\nexport function renderCommand(cmd: string): string {\n return fennecOrange(`$ ${cmd}`);\n}\n\nexport function renderAppName(name: string): string {\n return fennecOrange(pc.bold(name));\n}\n\n// ─── Error Display ───────────────────────────────────────────────\n\nexport function renderError(title: string, details?: string, suggestions?: string[]): string {\n const lines: string[] = [];\n lines.push(`\\n ${pc.bgRed(pc.white(\" ERROR \"))} ${pc.bold(title)}`);\n if (details) {\n lines.push(` ${pc.dim(details)}`);\n }\n if (suggestions && suggestions.length > 0) {\n lines.push(`\\n ${pc.bold(\"Suggestions:\")}`);\n for (const s of suggestions) {\n lines.push(` ${pc.cyan(\"→\")} ${s}`);\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n}\n\nexport function renderSuccess(message: string): string {\n return ` ${pc.green(\"✓\")} ${message}`;\n}\n\nexport function renderWarning(message: string): string {\n return ` ${pc.yellow(\"⚠\")} ${message}`;\n}\n","/**\n * Fennec CLI Banner\n *\n * Generates a big, pixel-style \"FENNEC\" logo using cfonts\n * with an orange-to-gold gradient. Falls back to a compact\n * fox icon for non-TTY environments.\n */\n\nimport pc from \"picocolors\";\nimport CFonts from \"cfonts\";\n\n// ─── Hex color helper (for fallback styling) ────────────────────\n\nexport function hexColor(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\nconst fennecOrange = hexColor(\"#FF6432\");\nconst fennecGold = hexColor(\"#FFB347\");\n\n// ─── Version ────────────────────────────────────────────────────\n\nexport const VERSION = \"1.11.2\";\n\n// ─── Banner generation ──────────────────────────────────────────\n\nlet cachedBanner: string | null = null;\nlet cachedCompact: string | null = null;\n\n/**\n * Generate the full FENNEC ASCII art banner using cfonts.\n * Cached after first call.\n */\nfunction generateBanner(): string {\n if (cachedBanner) return cachedBanner;\n\n const result = CFonts.render(\"FENNEC\", {\n font: \"block\",\n align: \"left\",\n gradient: [\"#FF6432\", \"#FFB347\", \"#FFD700\"],\n independentGradient: false,\n transitionGradient: true,\n letterSpacing: 1,\n lineHeight: 1,\n space: true,\n maxLength: \"0\",\n env: \"node\",\n });\n\n const tagline = pc.dim(\"ears everywhere in your stack.\") + pc.dim(` v${VERSION}`);\n\n const bannerStr = typeof result !== \"boolean\" ? result.string : \"🦊 Fennec\";\n cachedBanner = `\\n${bannerStr}\\n ${tagline}\\n`;\n return cachedBanner;\n}\n\n/**\n * Compact banner for non-TTY or quick commands.\n */\nfunction generateCompactBanner(): string {\n if (cachedCompact) return cachedCompact;\n cachedCompact = `${pc.redBright(\" 🦊\")} ${pc.bold(\"Fennec\")} ${pc.dim(`v${VERSION}`)}`;\n return cachedCompact;\n}\n\n// ─── Public API ─────────────────────────────────────────────────\n\n/**\n * Print the full FENNEC banner (pixel-art style) to stderr.\n * Uses full cfonts-generated logo in TTY mode, compact in non-TTY.\n */\nexport function printBanner(): void {\n if (process.stdout.isTTY) {\n console.error(generateBanner());\n } else {\n console.error(generateCompactBanner());\n }\n}\n\n/**\n * Print a mini/compact banner (fox icon + version only).\n * Suitable for quick commands like ps, status, kill.\n */\nexport function printMiniBanner(): void {\n console.error(generateCompactBanner());\n}\n\n// ─── Exports for reuse ──────────────────────────────────────────\n\nexport const FOX = generateBanner();\nexport const FOX_COMPACT = generateCompactBanner();\n","import pc from \"picocolors\";\nimport { hexColor } from \"./banner.js\";\n\nconst fennecOrange = hexColor(\"#FF6432\");\n\nexport function showHelp(): void {\n const sep = fennecOrange(\"─\".repeat(50));\n\n console.error(`\n\n ${pc.bold(\"Usage:\")} fennec ${pc.dim(\"<command>\")} ${pc.dim(\"[options]\")}\n\n ${sep}\n ${pc.bold(\"Server\")}\n ${sep}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"Start Fennec MCP server (default)\")}\n ${pc.dim(\"--config\")} Path to config file\n ${pc.dim(\"--transport\")} Transport type ${pc.dim(\"(stdio | sse) [default: stdio]\")}\n ${pc.dim(\"--api-port\")} Management API port ${pc.dim(\"[default: 3456]\")}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Start an app under Fennec observation (new!)\")}\n ${pc.dim(\"--name\")} App name ${pc.dim(\"(required for tracking)\")}\n ${pc.dim(\"--port\")} Port the app listens on ${pc.dim(\"(optional)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${sep}\n ${pc.bold(\"Process Management\")}\n ${sep}\n\n ${pc.cyan(\"ps\")} ${pc.dim(\"[options]\")} ${pc.dim(\"List Fennec-tracked apps (like PM2)\")}\n ${pc.dim(\"--system, -a\")} Show all system processes\n ${pc.dim(\"--name\")} Filter by app name\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(system processes refresh every 3s)\")}\n\n ${pc.cyan(\"run\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Run a command under Fennec observation\")}\n ${pc.dim(\"--name\")} Process name ${pc.dim(\"(required)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${pc.cyan(\"status\")} ${pc.dim(\"[name]\")} ${pc.dim(\"Show system overview & top processes\")}\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(refresh every 3s)\")}\n\n ${pc.cyan(\"log\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Show logs for a process\")}\n ${pc.dim(\"--lines\")} Number of lines ${pc.dim(\"[default: 30]\")}\n ${pc.dim(\"-f, --follow\")} Follow mode ${pc.dim(\"(journalctl --follow)\")}\n\n ${pc.cyan(\"kill\")} ${pc.dim(\"<pid|name|all>\")} ${pc.dim(\"Kill process(es) by PID, name, or all\")}\n ${pc.dim(\"--signal\")} Signal to send ${pc.dim(\"[default: SIGTERM]\")}\n ${pc.dim(\"--all\")} Kill all user processes\n\n ${pc.cyan(\"restart\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Kill + show re-run command\")}\n\n ${sep}\n ${pc.bold(\"Observation\")}\n ${sep}\n\n ${pc.cyan(\"attach\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Observe a process by port\")}\n ${pc.dim(\"--name\")} Process name\n\n ${pc.cyan(\"pipe\")} ${pc.dim(\"Pipe stdin to log watcher\")}\n ${pc.dim(\"--name\")} Watcher name ${pc.dim(\"(required)\")}\n\n ${pc.cyan(\"watch\")} ${pc.dim(\"Watch a log file\")}\n ${pc.dim(\"--file\")} File path ${pc.dim(\"(required)\")}\n ${pc.dim(\"--name\")} Watcher name\n\n ${pc.cyan(\"attach-pid\")} ${pc.dim(\"<pid>\")} ${pc.dim(\"Attach to process by PID\")}\n ${pc.cyan(\"attach-port\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Attach to process by port\")}\n\n ${sep}\n ${pc.bold(\"Configuration\")}\n ${sep}\n\n ${pc.cyan(\"init\")} ${pc.dim(\"Generate fennec.config.yaml\")}\n ${pc.cyan(\"setup\")} ${pc.dim(\"Configure MCP client\")}\n ${pc.cyan(\"install-browsers\")} ${pc.dim(\"Install Playwright browser engines\")}\n ${pc.cyan(\"sessions\")} ${pc.dim(\"List saved auth sessions\")}\n\n ${sep}\n ${pc.bold(\"Other\")}\n ${sep}\n\n ${pc.cyan(\"help\")} ${pc.dim(\"Show this help message\")}\n ${pc.cyan(\"version\")} ${pc.dim(\"Show version\")}\n\n ${pc.dim(\"─\".repeat(50))}\n\n ${pc.dim(\"Learn more:\")} ${pc.cyan(\"https://github.com/plumpslabs/fennec\")}\n `);\n}\n","export async function pipeCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : \"pipe\";\n\n if (!name) {\n console.error(\"Error: --name is required for pipe command\");\n process.exit(1);\n }\n\n const { PipeWatcher } = await import(\"@plumpslabs/fennec-core\");\n const watcher = new PipeWatcher();\n const { write } = watcher.createPipe(name);\n\n console.error(`Pipe watcher '${name}' active. Forwarding stdin...`);\n\n const onDrain = () => {\n process.stdin.resume();\n };\n process.stdout.on(\"drain\", onDrain);\n\n process.stdin.setEncoding(\"utf-8\");\n process.stdin.on(\"data\", (data: string) => {\n try {\n write(data);\n const canContinue = process.stdout.write(data);\n if (!canContinue) {\n process.stdin.pause();\n }\n } catch (error) {\n console.error(\"Pipe error:\", error);\n }\n });\n\n process.stdin.on(\"error\", (error) => {\n console.error(\"Pipe stdin error:\", error);\n });\n\n process.stdin.on(\"end\", () => {\n console.error(`Pipe watcher '${name}' ended.`);\n watcher.cleanup();\n });\n\n const shutdown = () => {\n watcher.cleanup();\n process.stdout.removeListener(\"drain\", onDrain);\n process.stdin.removeAllListeners();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n","export async function attachPidCommand(args: string[]): Promise<void> {\n const pid = parseInt(args[0]!, 10);\n if (isNaN(pid)) {\n console.error(\"Error: valid PID is required\");\n process.exit(1);\n }\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPid(pid);\n if (info) {\n console.log(`Attached to PID ${pid}${info.command ? ` (${info.command})` : \"\"}`);\n if (info.port) console.log(` Port: ${info.port}`);\n } else {\n console.error(`Could not find process with PID ${pid}`);\n process.exit(1);\n }\n}\n","export async function attachPortCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) {\n console.error(\"Error: valid port number is required\");\n process.exit(1);\n }\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n console.log(`Found process on port ${port}: PID ${info.pid}${info.command ? ` (${info.command})` : \"\"}`);\n } else {\n console.error(`No process found listening on port ${port}`);\n process.exit(1);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport async function watchCommand(args: string[]): Promise<void> {\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n if (!filePath) {\n console.error(\"Error: --file is required for watch command\");\n process.exit(1);\n }\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(`Error: File not found: ${resolvedPath}`);\n process.exit(1);\n }\n const { LogWatcher } = await import(\"@plumpslabs/fennec-core\");\n const watcher = new LogWatcher();\n const watcherId = watcher.watchFile(resolvedPath, name);\n console.log(`Watching file: ${resolvedPath}`);\n console.log(`Watcher ID: ${watcherId}`);\n process.stdin.resume();\n}\n","/**\n * Command: start / run — Spawn a process as a detached daemon.\n * Includes auto-resurrect: on server start, re-spawns tracked processes\n * that died since last session (like PM2 resurrect).\n */\nimport { createWriteStream, readFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { FennecServer } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderAppName, renderError, divider, createSpinner } from \"../utils/format.js\";\nimport { readTracked, addTracked, removeTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport type { TrackedProcess } from \"./tracker.js\";\n\n// Re-export from tracker for backward compat\nexport type { TrackedProcess };\n\nexport async function startServer(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting Fennec MCP server...\")}\\n`);\n\n const configIndex = args.indexOf(\"--config\");\n const configPath = configIndex !== -1 ? args[configIndex + 1] : undefined;\n\n try {\n const server = new FennecServer(configPath);\n\n // 🔥 Auto-resurrect: re-spawn tracked processes that died since last session\n await resurrectTracked();\n\n await server.start();\n\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Fennec server is running\")}`);\n console.error(` ${renderKV(\"Transport\", \"stdio\")}`);\n console.error(` ${renderKV(\"AI Agent\", \"Connect via MCP protocol\")}`);\n console.error(`\\n ${pc.dim(\"Press Ctrl+C to stop\")}\\n`);\n } catch (error) {\n console.error(renderError(\"Failed to start server\", String(error)));\n process.exit(1);\n }\n}\n\nexport async function startCommand(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting app...\")}\\n`);\n await runCommand(args);\n}\n\nexport async function runCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const portIndex = args.indexOf(\"--port\");\n const port = portIndex !== -1 ? parseInt(args[portIndex + 1]!, 10) : undefined;\n const cwdIndex = args.indexOf(\"--cwd\");\n const cwd = cwdIndex !== -1 ? args[cwdIndex + 1] : undefined;\n\n const stopFlags = [nameIndex, portIndex, cwdIndex].filter((i) => i !== -1) as number[];\n const cmdEnd = Math.min(...stopFlags, Infinity);\n const cmdParts = args.slice(0, cmdEnd);\n const cmd = cmdParts.join(\" \");\n\n if (!cmd) {\n console.error(renderError(\"Missing command\", \"Usage: fennec start|run <command> --name <name> [--port <port>] [--cwd <dir>]\"));\n process.exit(1);\n }\n\n const appName = name ?? cmdParts[0] ?? \"app\";\n\n // Duplicate Prevention\n const tracked = readTracked();\n const existing = tracked.find((t) => t.name === appName);\n if (existing && isProcessRunning(existing.pid)) {\n console.error();\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`is already running (PID: ${existing.pid})`)}`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n process.exit(0);\n }\n\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${appName}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Starting\")} ${renderAppName(appName)} ${pc.dim(\"(daemon)\")}\\n`);\n console.error(` ${renderKV(\"Command\", cmd)}`);\n if (port) console.error(` ${renderKV(\"Port\", String(port))}`);\n if (cwd) console.error(` ${renderKV(\"Directory\", cwd)}`);\n console.error(` ${divider()}`);\n\n try {\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n\n child.unref();\n\n addTracked({\n name: appName,\n pid,\n command: cmd,\n port,\n cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(`\\n ${pc.green(\"●\")} ${pc.bold(appName)} ${pc.dim(`started (PID: ${pid})`)}${port ? pc.dim(` :${port}`) : \"\"}\\n`);\n\n await new Promise((r) => setTimeout(r, 1500));\n\n try {\n const initialLogs = readFileSync(logFilePath, \"utf-8\")\n .split(\"\\n\")\n .filter(Boolean)\n .slice(-8);\n if (initialLogs.length > 0) {\n for (const line of initialLogs) {\n const truncated = line.length > 150 ? line.slice(0, 150) + \"\\u2026\" : line;\n if (line.toLowerCase().includes(\"error\")) {\n console.error(` ${pc.dim(\"│\")} ${pc.red(truncated)}`);\n } else if (line.toLowerCase().includes(\"warn\")) {\n console.error(` ${pc.dim(\"│\")} ${pc.yellow(truncated)}`);\n } else {\n console.error(` ${pc.dim(\"│\")} ${truncated}`);\n }\n }\n }\n } catch { /* initial log peek is best-effort */ }\n\n console.error();\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} running in background`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Status\", pc.cyan(\"fennec ps\"))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n } catch (error) {\n console.error(renderError(`Failed to start ${appName}`, String(error)));\n process.exit(1);\n }\n}\n\n/**\n * 🔥 PM2-like resurrect: Re-spawn tracked processes that died.\n * Called automatically during `fennec start` (server mode).\n * Reads tracked.json, checks each PID, re-spawns stopped ones.\n */\nexport async function resurrectTracked(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) return;\n\n const dead = tracked.filter((t) => !isProcessRunning(t.pid));\n if (dead.length === 0) return;\n\n const spinner = createSpinner(`Resurrecting ${dead.length} stopped process(es)...`);\n let resurrected = 0;\n let failed = 0;\n\n for (const proc of dead) {\n // Only resurrect if the process has a command (not just a PID reference)\n if (!proc.command) {\n removeTracked(proc.name);\n continue;\n }\n\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Update PID in tracked.json\n addTracked({\n name: proc.name,\n pid: child.pid ?? 0,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n resurrected++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (resurrected > 0) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(`Resurrected ${resurrected} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"●\")} ${pc.bold(`${failed} process(es) failed to resurrect`)}`);\n }\n}\n","/**\n * Process Tracker — Shared state for managing ~/.fennec/tracked.json\n * Extracted from index.ts to be reusable across all CLI command files.\n */\nimport { existsSync, writeFileSync, readFileSync, mkdirSync, renameSync, statSync, rmSync } from \"node:fs\";\nimport { resolve, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface TrackedProcess {\n name: string;\n pid: number;\n command: string;\n port?: number;\n cwd?: string;\n startedAt: string;\n}\n\nexport function getTrackedPath(): string {\n const dir = process.env.FENNEC_DATA_DIR\n ? resolve(process.env.FENNEC_DATA_DIR)\n : resolve(homedir(), \".fennec\");\n return resolve(dir, \"tracked.json\");\n}\n\nexport function readTracked(): TrackedProcess[] {\n try {\n const path = getTrackedPath();\n if (!existsSync(path)) return [];\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return [];\n }\n}\n\nexport function saveTracked(processes: TrackedProcess[]): void {\n try {\n const path = getTrackedPath();\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify(processes, null, 2), \"utf-8\");\n } catch (err) {\n console.error(\"[fennec] Failed to save tracked processes:\", err instanceof Error ? err.message : String(err));\n }\n}\n\nexport function addTracked(proc: TrackedProcess): void {\n const tracked = readTracked();\n const filtered = tracked.filter((t) => t.name !== proc.name);\n filtered.push(proc);\n saveTracked(filtered);\n}\n\nexport function removeTracked(name: string): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.name !== name));\n}\n\nexport function removeTrackedByPid(pid: number): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.pid !== pid));\n}\n\nexport function formatUptime(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h >= 24) {\n const d = Math.floor(h / 24);\n return `${d}d ${h % 24}h ${m}m`;\n }\n return `${h}h ${m}m`;\n}\n\n// ─── Log Rotation ─────────────────────────────────────────────────\n// Rotates log files when they exceed maxSize (default: 10MB).\n// Keeps up to maxFiles rotated copies (default: 3) then deletes oldest.\n\nconst DEFAULT_MAX_LOG_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_MAX_LOG_FILES = 3;\n\n/**\n * Check if a log file needs rotation and rotate if necessary.\n * Returns true if rotation was performed.\n */\nexport function rotateLogFile(\n filePath: string,\n maxSize = DEFAULT_MAX_LOG_SIZE,\n maxFiles = DEFAULT_MAX_LOG_FILES,\n): boolean {\n try {\n if (!existsSync(filePath)) return false;\n const stats = statSync(filePath);\n if (stats.size < maxSize) return false;\n\n // Rotate: .log -> .log.1 -> .log.2 -> .log.3 (delete oldest)\n const dir = dirname(filePath);\n const base = basename(filePath);\n\n // Delete oldest if exists\n const oldestPath = resolve(dir, `${base}.${maxFiles}`);\n if (existsSync(oldestPath)) {\n try { rmSync(oldestPath); } catch { /* best-effort */ }\n }\n\n // Shift existing rotations\n for (let i = maxFiles - 1; i >= 1; i--) {\n const src = resolve(dir, `${base}.${i}`);\n const dst = resolve(dir, `${base}.${i + 1}`);\n if (existsSync(src)) {\n try { renameSync(src, dst); } catch { /* best-effort */ }\n }\n }\n\n // Rotate current file\n try {\n renameSync(filePath, resolve(dir, `${base}.1`));\n } catch { /* best-effort */ }\n\n return true;\n } catch (err) {\n console.error(\"[fennec] Log rotation failed:\", err instanceof Error ? err.message : String(err));\n return false;\n }\n}\n\n\n","/**\n * System Process Scanner\n *\n * Reads real system processes from /proc (Linux) or ps (macOS/BSD).\n * Returns process info: pid, name, cpu%, mem%, status, command, ports.\n *\n * Design principles:\n * - Zero external dependencies (uses Node.js built-ins only)\n * - Cross-platform (Linux via /proc, macOS/Windows via exec)\n * - Safe errors (never throws, returns empty array on failure)\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { cpus } from \"node:os\";\n\n// ─── Types ───────────────────────────────────────────────────────\n\nexport interface SystemProcessInfo {\n pid: number;\n name: string;\n command: string;\n cpuPercent: number;\n memPercent: number;\n memRss: number; // Resident Set Size in KB\n state: string; // R=Running, S=Sleeping, Z=Zombie, etc.\n startedAt: string | null;\n ports: number[]; // Listening ports (if any)\n isUserProcess: boolean; // true if owned by current user\n}\n\nexport interface SystemProcessFilter {\n name?: string;\n pid?: number;\n port?: number;\n userOnly?: boolean;\n sortBy?: \"cpu\" | \"mem\" | \"pid\" | \"name\";\n limit?: number;\n}\n\n// ─── Linux /proc Scanner ─────────────────────────────────────────\n\nfunction readProcProcesses(): SystemProcessInfo[] {\n const processes: SystemProcessInfo[] = [];\n const currentUid = process.getuid?.();\n const totalMemKb = readTotalMem();\n\n try {\n const pids = readdirSync(\"/proc\").filter((d) => /^\\d+$/.test(d));\n\n for (const pidStr of pids) {\n try {\n const pid = parseInt(pidStr, 10);\n const proc = readSingleProcProcess(pid, currentUid, totalMemKb);\n if (proc) processes.push(proc);\n } catch {\n // Process might have exited between readdir and stat\n continue;\n }\n }\n } catch {\n // /proc not available (not Linux)\n return [];\n }\n\n return processes;\n}\n\nfunction readSingleProcProcess(\n pid: number,\n currentUid: number | undefined,\n totalMemKb: number,\n): SystemProcessInfo | null {\n const statPath = `/proc/${pid}/stat`;\n const statusPath = `/proc/${pid}/status`;\n const cmdlinePath = `/proc/${pid}/cmdline`;\n\n if (!existsSync(statPath)) return null;\n\n // Read /proc/[pid]/status for name, uid, memory\n const statusText = readSafe(statusPath);\n if (!statusText) return null;\n\n const nameMatch = statusText.match(/Name:\\s+(.+)/);\n const uidMatch = statusText.match(/Uid:\\s+(\\d+)/);\n const vmRssMatch = statusText.match(/VmRSS:\\s+(\\d+)/);\n const stateMatch = statusText.match(/State:\\s+(\\S)/);\n const name = nameMatch?.[1] ?? `pid_${pid}`;\n const uid = uidMatch ? parseInt(uidMatch[1]!, 10) : undefined;\n const vmRss = vmRssMatch ? parseInt(vmRssMatch[1]!, 10) : 0;\n const state = stateMatch?.[1] ?? \"?\";\n\n const isUserProcess = uid !== undefined && currentUid !== undefined && uid === currentUid;\n\n // Read /proc/[pid]/stat for CPU ticks\n const statText = readSafe(statPath);\n let cpuPercent = 0;\n let startedAt: string | null = null;\n\n if (statText) {\n // Parse /proc/[pid]/stat format\n // Format: pid (comm) state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt\n // cmajflt utime stime cutime cstime priority nice num_threads itrealvalue starttime\n const parenEnd = statText.lastIndexOf(\")\");\n if (parenEnd > 0) {\n const fields = statText.slice(parenEnd + 2).split(/\\s+/);\n const utime = parseInt(fields[11] ?? \"0\", 10); // User mode jiffies\n const stime = parseInt(fields[12] ?? \"0\", 10); // Kernel mode jiffies\n const starttime = parseInt(fields[19] ?? \"0\", 10); // Start time in jiffies\n\n // CPU usage = (utime + stime) / uptime_seconds / Hz\n const hertz = 100; // CLK_TCK, typically 100\n const uptimeSeconds = readUptime();\n const totalJiffies = utime + stime;\n\n if (uptimeSeconds > 0) {\n const elapsedJiffies = uptimeSeconds * hertz;\n const processJiffies = totalJiffies;\n cpuPercent = Math.min(100, (processJiffies / Math.max(1, elapsedJiffies)) * 100 * cpus().length);\n }\n\n // Boot time for startedAt\n startedAt = formatStartTime(starttime, uptimeSeconds, hertz);\n }\n }\n\n // Read /proc/[pid]/cmdline for full command\n const cmdlineRaw = readSafe(cmdlinePath);\n const command = cmdlineRaw\n ? cmdlineRaw.split(\"\\0\").filter(Boolean).join(\" \")\n : name;\n\n // Read listening ports\n const ports = detectListeningPorts(pid);\n\n const memPercent = totalMemKb > 0 ? (vmRss / totalMemKb) * 100 : 0;\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpuPercent * 10) / 10,\n memPercent: Math.round(memPercent * 10) / 10,\n memRss: vmRss,\n state,\n startedAt,\n ports,\n isUserProcess,\n };\n}\n\n// ─── macOS / BSD ps fallback ─────────────────────────────────────\n\nfunction runPsProcesses(): SystemProcessInfo[] {\n try {\n const output = execSync(\n \"ps axo pid,comm,pcpu,pmem,rss,state,etime,user --sort=-pcpu 2>/dev/null | head -200\",\n { encoding: \"utf-8\", timeout: 5000 },\n );\n\n const lines = output.trim().split(\"\\n\").slice(1); // Skip header\n const currentUser = execSync(\"whoami\", { encoding: \"utf-8\", timeout: 1000 }).trim();\n\n return lines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const pid = parseInt(parts[0] ?? \"0\", 10);\n const name = parts[1] ?? \"\";\n const cpu = parseFloat(parts[2] ?? \"0\");\n const mem = parseFloat(parts[3] ?? \"0\");\n const rss = parseInt(parts[4] ?? \"0\", 10);\n const state = parts[5] ?? \"?\";\n const elapsed = parts[6] ?? \"\";\n const user = parts[7] ?? \"\";\n const command = parts.slice(1).join(\" \");\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpu * 10) / 10,\n memPercent: Math.round(mem * 10) / 10,\n memRss: rss,\n state: mapBsdState(state),\n startedAt: elapsed || null,\n ports: [] as number[],\n isUserProcess: user === currentUser,\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction mapBsdState(s: string): string {\n switch (s) {\n case \"R\": return \"R\";\n case \"S\": return \"S\";\n case \"Z\": return \"Z\";\n case \"T\": return \"T\";\n case \"I\": return \"S\";\n default: return s;\n }\n}\n\n// ─── Port Scanner ────────────────────────────────────────────────\n// NOTE: Per-process port detection via /proc/[pid]/net/tcp is unreliable\n// because it shows network namespace ports, not per-process ports.\n// Fennec tracks ports via the --port flag when starting apps.\n// We keep the field for API compatibility but always return empty.\n\nfunction detectListeningPorts(_pid: number): number[] {\n return [];\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────\n\nfunction readSafe(path: string): string | null {\n try {\n return readFileSync(path, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nfunction readTotalMem(): number {\n try {\n const memInfo = readSafe(\"/proc/meminfo\");\n if (memInfo) {\n const match = memInfo.match(/MemTotal:\\s+(\\d+)/);\n if (match) return parseInt(match[1]!, 10);\n }\n } catch {\n // ignore\n }\n return 16_000_000; // Default ~16GB\n}\n\nfunction readUptime(): number {\n try {\n const data = readSafe(\"/proc/uptime\");\n if (data) {\n return parseFloat(data.split(/\\s+/)[0] ?? \"0\");\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\nfunction formatStartTime(starttime: number, uptimeSeconds: number, hertz: number): string | null {\n try {\n const bootTime = Date.now() / 1000 - uptimeSeconds;\n const processStart = bootTime + starttime / hertz;\n return new Date(processStart * 1000).toISOString();\n } catch {\n return null;\n }\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\n/**\n * Get all system processes.\n * Uses /proc on Linux, falls back to `ps` on macOS/BSD.\n */\nexport function getSystemProcesses(filter?: SystemProcessFilter): SystemProcessInfo[] {\n let processes: SystemProcessInfo[];\n\n // Try /proc first (Linux), fall back to ps (macOS/BSD)\n if (existsSync(\"/proc\")) {\n processes = readProcProcesses();\n } else {\n processes = runPsProcesses();\n }\n\n // Apply filters\n if (filter) {\n if (filter.userOnly) {\n processes = processes.filter((p) => p.isUserProcess);\n }\n if (filter.name) {\n const nameLower = filter.name.toLowerCase();\n processes = processes.filter(\n (p) => p.name.toLowerCase().includes(nameLower) || p.command.toLowerCase().includes(nameLower),\n );\n }\n if (filter.pid) {\n processes = processes.filter((p) => p.pid === filter.pid);\n }\n if (filter.port) {\n processes = processes.filter((p) => p.ports.includes(filter.port!));\n }\n\n // Sort\n if (filter.sortBy) {\n processes.sort((a, b) => {\n switch (filter.sortBy) {\n case \"cpu\": return b.cpuPercent - a.cpuPercent;\n case \"mem\": return b.memPercent - a.memPercent;\n case \"pid\": return a.pid - b.pid;\n case \"name\": return a.name.localeCompare(b.name);\n default: return b.cpuPercent - a.cpuPercent;\n }\n });\n }\n\n // Limit\n if (filter.limit && filter.limit > 0) {\n processes = processes.slice(0, filter.limit);\n }\n }\n\n return processes;\n}\n\n/**\n * Get a single process by PID. Returns null if not found.\n */\nexport function getProcessByPid(pid: number): SystemProcessInfo | null {\n const processes = getSystemProcesses({ pid });\n return processes[0] ?? null;\n}\n\n/**\n * Kill a process by PID. Returns true if successful.\n */\nexport function killProcess(pid: number, signal: NodeJS.Signals = \"SIGTERM\"): boolean {\n try {\n process.kill(pid, signal);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a process is running.\n */\nexport function isProcessRunning(pid: number): boolean {\n try {\n process.kill(pid, 0); // Signal 0 checks existence without killing\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get human-readable process state.\n */\nexport function formatProcessState(state: string): string {\n switch (state) {\n case \"R\": return \"Running\";\n case \"S\": return \"Sleeping\";\n case \"D\": return \"Disk Sleep\";\n case \"Z\": return \"Zombie\";\n case \"T\": return \"Stopped\";\n case \"t\": return \"Tracing\";\n case \"X\": return \"Dead\";\n case \"I\": return \"Idle\";\n default: return state;\n }\n}\n","/**\n * Command: ps, status — List tracked processes and system overview.\n */\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderTable, renderError, renderCommand, createSpinner, timestamp, type Column, type Row } from \"../utils/format.js\";\nimport { getSystemProcesses, isProcessRunning, formatProcessState } from \"../utils/system-process.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\n\nexport async function psCommand(args: string[]): Promise<void> {\n const watchFlag = args.includes(\"-w\") || args.includes(\"--watch\");\n const systemFlag = args.includes(\"--system\") || args.includes(\"-a\") || args.includes(\"--all\");\n const nameFilter = args.includes(\"--name\") ? args[args.indexOf(\"--name\") + 1] : undefined;\n const sortBy = args.includes(\"--sort\")\n ? (args[args.indexOf(\"--sort\") + 1] as \"cpu\" | \"mem\" | \"pid\" | \"name\")\n : \"name\";\n\n if (watchFlag && systemFlag) {\n await watchSystemProcesses(sortBy, 15);\n return;\n }\n\n if (systemFlag) {\n const spinner = createSpinner(\"Scanning system processes...\");\n try {\n const processes = getSystemProcesses({ name: nameFilter, userOnly: true, sortBy, limit: 30 });\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n if (processes.length === 0) {\n console.error(`\\n ${pc.dim(\"No system processes found.\")}\\n`);\n return;\n }\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"State\", format: (v) => { const s = String(v); if (s === \"R\" || s === \"Running\") return pc.green(s); if (s === \"Z\" || s === \"Zombie\") return pc.red(s); if (s === \"S\" || s === \"Sleeping\") return pc.cyan(s); return pc.dim(s); } },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: formatProcessState(p.state) }));\n console.error(`\\n ${symbols.fox} ${pc.bold(\"System Processes\")} ${pc.dim(`(top ${processes.length} by ${sortBy})`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error();\n } catch (error) {\n spinner.fail(\"Failed to scan processes\");\n console.error(renderError(\"Process scan failed\", String(error)));\n }\n return;\n }\n\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes.\")}`);\n console.error(` ${pc.dim(\"Start an app with:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n return;\n }\n\n const columns: Column[] = [\n { key: \"name\", label: \"App\", format: (v) => pc.bold(String(v)) },\n { key: \"pid\", label: \"PID\", align: \"right\" },\n { key: \"status\", label: \"Status\", format: (v) => { const s = v as string; return s === \"running\" ? pc.green(\"● running\") : pc.red(\"○ stopped\"); } },\n { key: \"port\", label: \"Port\", format: (v) => { const p = v as number | null; return p ? pc.yellow(`:${p}`) : pc.dim(\"-\"); } },\n { key: \"command\", label: \"Command\", format: (v) => { const c = String(v); return c.length > 50 ? c.slice(0, 50) + \"…\" : c; } },\n { key: \"uptime\", label: \"Uptime\", format: (v) => pc.dim(String(v)) },\n ];\n\n const rows: Row[] = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n const uptime = running ? formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000)) : \"-\";\n return { name: t.name, pid: running ? String(t.pid) : pc.dim(String(t.pid)), status: running ? \"running\" : \"stopped\", port: t.port ?? null, command: t.command, uptime };\n });\n\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec start <command> --name <name> --port <port>\")} ${pc.dim(\"to add more apps.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec log <name>\")} ${pc.dim(\"to view logs.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec kill <name>\")} ${pc.dim(\"to stop an app.\")}`);\n console.error();\n}\n\nexport async function statusCommand(_args: string[]): Promise<void> {\n const watchFlag = _args.includes(\"-w\") || _args.includes(\"--watch\");\n const tracked = readTracked();\n const topSystem = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 5 });\n const totalUserProcs = getSystemProcesses({ userOnly: true }).length;\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Status\")}\\n`);\n\n if (tracked.length > 0) {\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(` ${pc.bold(\"Managed Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n for (const t of tracked) {\n const running = isProcessRunning(t.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const portStr = t.port ? ` ${pc.yellow(`:${t.port}`)}` : \"\";\n const uptime = running ? pc.dim(formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000))) : pc.red(\"stopped\");\n console.error(` ${statusIcon} ${pc.bold(t.name)}${portStr} ${pc.dim(`(PID ${t.pid})`)} — ${uptime}`);\n }\n console.error();\n } else {\n console.error(` ${pc.dim(\"No managed apps.\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n }\n\n console.error(` ${pc.bold(\"System\")} ${pc.dim(`(${totalUserProcs} user processes)`)}`);\n for (const p of topSystem) {\n const cpuStr = p.cpuPercent > 10 ? pc.red(`${p.cpuPercent}%`) : p.cpuPercent > 5 ? pc.yellow(`${p.cpuPercent}%`) : pc.dim(`${p.cpuPercent}%`);\n const memStr = p.memPercent > 10 ? pc.red(`${p.memPercent}%`) : p.memPercent > 5 ? pc.yellow(`${p.memPercent}%`) : pc.dim(`${p.memPercent}%`);\n console.error(` ${pc.dim(`PID ${p.pid}`)} ${pc.bold(p.name)} — CPU: ${cpuStr} MEM: ${memStr}`);\n }\n\n if (watchFlag) await watchSystemProcesses(\"cpu\", 15);\n console.error();\n}\n\nasync function watchSystemProcesses(sortBy: string, limit: number): Promise<void> {\n console.error(`\\n ${pc.bold(\"Watching system processes\")} ${pc.dim(\"(Ctrl+C to stop, refreshes every 3s)\")}\\n`);\n\n const render = () => {\n const processes = getSystemProcesses({ userOnly: true, sortBy: sortBy as \"cpu\" | \"mem\" | \"pid\" | \"name\", limit });\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"S\", align: \"center\" },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: p.state }));\n return ` ${timestamp()} ${pc.dim(`${processes.length} processes`)}\\n${renderTable(columns, rows, { compact: true })}`;\n };\n\n console.error(render());\n const interval = setInterval(() => { process.stdout.write(\"\\x1B[J\"); console.error(render()); }, 3000);\n // Keep alive until SIGINT — resolves cleanly (no process.exit)\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n clearInterval(interval);\n process.stdout.write(\"\\x1B[J\");\n resolve();\n });\n });\n}\n","/**\n * Command: kill — Kill process by PID, name, or kill all user processes.\n */\nimport pc from \"picocolors\";\nimport { renderError, renderCommand, createSpinner, selectPrompt, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { removeTrackedByPid } from \"./tracker.js\";\n\nexport async function killCommand(args: string[]): Promise<void> {\n const rawTarget = args[0];\n const signalIndex = args.indexOf(\"--signal\");\n const signalRaw = signalIndex !== -1 ? args[signalIndex + 1] : \"SIGTERM\";\n const signal = (signalRaw ?? \"SIGTERM\") as NodeJS.Signals;\n\n if (rawTarget === \"all\" || args.includes(\"--all\") || args.includes(\"-a\")) {\n await killAll(signal);\n return;\n }\n\n if (!rawTarget) {\n console.error(renderError(\"Missing target\", \"Usage: fennec kill <pid|name|all> [--signal SIGTERM|SIGKILL|SIGINT]\"));\n process.exit(1);\n }\n\n let targetPid: number;\n let displayName: string;\n const pid = parseInt(rawTarget, 10);\n\n if (!isNaN(pid) && String(pid) === rawTarget) {\n if (!isProcessRunning(pid)) { console.error(renderError(\"Process not found\", `No process with PID ${pid} is running`)); process.exit(1); }\n targetPid = pid;\n displayName = `PID ${pid}`;\n } else {\n const matches = getSystemProcesses({ name: rawTarget, userOnly: true, sortBy: \"cpu\" });\n if (matches.length === 0) { console.error(renderError(\"Process not found\", `No running process matching \"${rawTarget}\"`)); process.exit(1); }\n if (matches.length > 1) {\n console.error(`\\n ${pc.bold(`Multiple processes match \"${rawTarget}\":`)}`);\n const selected = await selectPrompt(\"Select which to kill:\", matches.map((p, i) => ({ value: String(i), label: `${p.name} (PID ${p.pid})`, description: `${p.command.slice(0, 80)} — CPU: ${p.cpuPercent}% MEM: ${p.memPercent}%` })));\n if (selected === null) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n const idx = parseInt(selected, 10);\n targetPid = matches[idx]!.pid;\n displayName = `${matches[idx]!.name} (PID ${targetPid})`;\n } else {\n targetPid = matches[0]!.pid;\n displayName = `${matches[0]!.name} (PID ${targetPid})`;\n }\n }\n\n const confirmed = await confirmPrompt(`Kill ${pc.bold(displayName)} with ${pc.yellow(signal)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Sending ${signal} to ${displayName}...`);\n const success = sysKill(targetPid, signal);\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(targetPid);\n if (stillRunning && signal !== \"SIGKILL\") {\n spinner.warn(`${displayName} did not respond to ${signal}`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(targetPid) ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`) : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.dim(\"Retrying with SIGTERM...\")}`);\n sysKill(targetPid, \"SIGTERM\");\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n removeTrackedByPid(targetPid);\n spinner.succeed(`${displayName} stopped`);\n }\n } else {\n spinner.fail(`Failed to kill ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use a different signal.\"));\n }\n}\n\nasync function killAll(signal: NodeJS.Signals): Promise<void> {\n const userProcs = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 200 });\n if (userProcs.length === 0) { console.error(` ${pc.dim(\"No user processes to kill.\")}`); return; }\n\n console.error(`\\n ${pc.bold(`Kill ${userProcs.length} user processes?`)}`);\n console.error(` ${pc.dim(\"This will stop ALL your running processes.\")}`);\n console.error(` ${pc.yellow(\"⚠ System processes will not be affected.\")}\\n`);\n\n const confirmed = await confirmPrompt(`${pc.red(\"Are you sure?\")} ${pc.dim(\"This cannot be undone\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled.\")}`); return; }\n\n const spinner = createSpinner(`Killing ${userProcs.length} processes...`);\n let killed = 0, failed = 0;\n for (const proc of userProcs) {\n if (sysKill(proc.pid, signal)) { killed++; removeTrackedByPid(proc.pid); } else { failed++; }\n if (killed % 10 === 0) await new Promise((r) => setTimeout(r, 50));\n }\n await new Promise((r) => setTimeout(r, 500));\n killed > 0 ? spinner.succeed(`${killed} process(es) killed`) : spinner.fail(\"Failed to kill processes\");\n if (failed > 0) console.error(` ${pc.yellow(`${failed} process(es) could not be killed`)} ${pc.dim(\"(try with sudo)\")}`);\n}\n","/**\n * Command: restart — Kill and re-spawn a tracked process from tracked.json config.\n * Fixed: now actually re-spawns (instead of just killing + suggesting manual re-run).\n */\nimport pc from \"picocolors\";\nimport { mkdirSync, createWriteStream } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { renderError, renderCommand, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, addTracked, removeTrackedByPid, rotateLogFile } from \"./tracker.js\";\n\nexport async function restartCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec restart <name|pid>\")); process.exit(1); }\n\n const tracked = readTracked();\n let trackedEntry = tracked.find((t) => t.name === name);\n let targetPid: number;\n\n if (trackedEntry) {\n targetPid = trackedEntry.pid;\n } else {\n const pid = parseInt(name, 10);\n if (!isNaN(pid) && String(pid) === name) {\n targetPid = pid;\n } else {\n const processes = getSystemProcesses({ name, userOnly: true, limit: 1 });\n if (processes.length === 0) { console.error(renderError(\"Process not found\", `No process matching \"${name}\"`)); process.exit(1); }\n targetPid = processes[0]!.pid;\n }\n }\n\n const confirmed = await confirmPrompt(`Restart ${pc.bold(`${name} (PID ${targetPid})`)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Stopping PID ${targetPid}...`);\n const killed = sysKill(targetPid, \"SIGTERM\");\n if (!killed) { spinner.fail(`Failed to stop PID ${targetPid}`); return; }\n\n await new Promise((r) => setTimeout(r, 1000));\n if (isProcessRunning(targetPid)) {\n spinner.warn(\"Process didn't stop, sending SIGKILL...\");\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 500));\n }\n\n spinner.succeed(`${name} stopped`);\n\n if (trackedEntry) {\n const respawnSpinner = createSpinner(`Re-spawning ${trackedEntry.name}...`);\n try {\n const cmdParts = trackedEntry.command.split(\" \");\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${trackedEntry.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: trackedEntry.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Remove old PID entry, add new one (only after successful spawn)\n removeTrackedByPid(targetPid);\n addTracked({\n name: trackedEntry.name,\n pid: child.pid ?? 0,\n command: trackedEntry.command,\n port: trackedEntry.port,\n cwd: trackedEntry.cwd,\n startedAt: new Date().toISOString(),\n });\n\n respawnSpinner.succeed(`${trackedEntry.name} restarted (PID: ${child.pid})`);\n } catch (error) {\n respawnSpinner.fail(`Failed to re-spawn ${trackedEntry.name}: ${String(error)}`);\n console.error(` ${pc.dim(\"Config preserved. Re-run manually:\")} ${renderCommand(trackedEntry.command)}`);\n }\n } else {\n console.error(` ${pc.dim(\"No tracked config found. Re-run manually:\")} ${renderCommand(name)}`);\n }\n}\n","/**\n * Command: log — Show logs for a tracked/managed process.\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn, execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { symbols, renderError, renderAppName, createSpinner } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\n\nexport async function logCommand(args: string[]): Promise<void> {\n const target = args[0];\n if (!target) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec log <name|pid> [--lines N] [-f]\")); process.exit(1); }\n\n const linesIndex = args.indexOf(\"--lines\");\n const lineCount = linesIndex !== -1 ? parseInt(args[linesIndex + 1]!, 10) : 30;\n const followFlag = args.includes(\"-f\") || args.includes(\"--follow\");\n\n let logFilePath: string | null = null;\n let displayName = target;\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === target || (parseInt(target, 10) === t.pid && !isNaN(parseInt(target, 10))));\n\n if (trackedMatch) {\n displayName = trackedMatch.name;\n logFilePath = resolve(homedir(), \".fennec\", \"logs\", `${trackedMatch.name}.log`);\n } else {\n const pid = parseInt(target, 10);\n if (!isNaN(pid) && String(pid) === target) {\n const procPath = `/proc/${pid}/fd/1`;\n if (existsSync(procPath)) logFilePath = procPath;\n }\n }\n\n const spinner = createSpinner(`Reading logs for ${displayName}...`);\n try {\n let logLines: string[] = [];\n if (logFilePath && existsSync(logFilePath)) {\n const content = readFileSync(logFilePath, \"utf-8\");\n logLines = content.split(\"\\n\").filter(Boolean);\n } else {\n const pid = trackedMatch?.pid ?? parseInt(target, 10);\n if (!isNaN(pid)) {\n try {\n const output = execSync(`journalctl --no-pager -n ${lineCount} _PID=${pid} 2>/dev/null || echo \"\"`, { encoding: \"utf-8\", timeout: 3000 });\n logLines = output.trim().split(\"\\n\").filter(Boolean);\n } catch { logLines = [\"(no logs available)\"]; }\n } else { logLines = [\"(no logs available)\"]; }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Logs\")} ${renderAppName(displayName)} ${pc.dim(`(last ${logLines.length} lines)`)}\\n`);\n\n const sliced = logLines.slice(-lineCount);\n for (const line of sliced) {\n const display = line.length > 300 ? line.slice(0, 300) + \"…\" : line;\n if (line.toLowerCase().includes(\"error\") || line.toLowerCase().includes(\"fail\")) console.error(` ${pc.red(display)}`);\n else if (line.toLowerCase().includes(\"warn\")) console.error(` ${pc.yellow(display)}`);\n else if (line.toLowerCase().includes(\"info\") || line.includes(\"[\")) console.error(` ${pc.cyan(display)}`);\n else console.error(` ${display}`);\n }\n\n if (followFlag && logFilePath) {\n console.error(`\\n ${pc.dim(\"Following... (Ctrl+C to stop)\")}\\n`);\n const tail = spawn(\"tail\", [\"-n\", \"0\", \"-f\", logFilePath], { stdio: \"inherit\" });\n tail.on(\"exit\", () => process.exit(0));\n await new Promise(() => {});\n }\n console.error();\n } catch (error) {\n spinner.fail(`Failed to read logs for ${displayName}`);\n console.error(renderError(\"Log read failed\", String(error)));\n }\n}\n","/**\n * Command: attach — Attach to a process by port.\n */\nimport pc from \"picocolors\";\nimport { renderError, renderKV, renderAppName, createSpinner } from \"../utils/format.js\";\n\nexport async function attachCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) { console.error(renderError(\"Invalid port\", \"Usage: fennec attach <port> --name <name>\")); process.exit(1); }\n\n const nameIndex = args.indexOf(\"--name\");\n const rawName = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const name = rawName ?? `port-${port}`;\n\n const spinner = createSpinner(`Attaching to :${port}...`);\n try {\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n spinner.succeed(`Attached to :${port}`);\n console.error(` ${renderKV(\"Name\", renderAppName(name))}`);\n console.error(` ${renderKV(\"PID\", String(info.pid))}`);\n console.error(` ${renderKV(\"Command\", info.command || pc.dim(\"unknown\"))}`);\n } else {\n spinner.fail(`No process found on port ${port}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(`Failed to attach to :${port}`);\n console.error(renderError(\"Error\", String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: sessions — List saved auth sessions.\n */\nimport { SessionStore } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { symbols, renderTable, type Column, type Row } from \"../utils/format.js\";\n\nexport async function sessionsCommand(): Promise<void> {\n const store = new SessionStore(\"./.fennec/sessions\");\n const sessions = store.list();\n if (sessions.length === 0) { console.error(`\\n ${pc.dim(\"No saved sessions found.\")}\\n`); return; }\n\n const columns: Column[] = [\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"origin\", label: \"Origin\" },\n { key: \"savedAt\", label: \"Saved\", format: (v) => pc.dim(String(v)) },\n ];\n const rows: Row[] = sessions.map((s) => ({ name: s.name, origin: s.origin, savedAt: new Date(s.savedAt).toLocaleString() }));\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Saved Sessions\")}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(`${sessions.length} session(s)`)}\\n`);\n}\n","/**\n * Command: setup — Interactive MCP client setup.\n */\nimport pc from \"picocolors\";\nimport { symbols, renderSuccess, renderCommand, selectPrompt } from \"../utils/format.js\";\n\nexport async function setupCommand(): Promise<void> {\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Setup\")}\\n`);\n\n const mcpClient = await selectPrompt(\"Which MCP client are you using?\", [\n { value: \"claude\", label: \"Claude Desktop\", description: \"Anthropic's AI desktop app\" },\n { value: \"cursor\", label: \"Cursor\", description: \"AI-powered code editor\" },\n { value: \"cline\", label: \"Cline\", description: \"VS Code MCP client\" },\n { value: \"other\", label: \"Other MCP client\", description: \"Any MCP-compatible client\" },\n ]);\n\n if (!mcpClient) { console.error(` ${pc.dim(\"Setup cancelled.\")}\\n`); return; }\n\n console.error(`\\n ${pc.green(\"✓\")} Selected: ${pc.bold(mcpClient)}\\n`);\n\n const configSnippet = `{\\n \"mcpServers\": {\\n \"fennec\": {\\n \"command\": \"fennec\",\\n \"args\": [\"start\"]\\n }\\n }\\n}`;\n\n console.error(` ${pc.bold(\"Add this to your MCP client config:\")}\\n`);\n console.error(` ${pc.dim(\"```\")}`);\n console.error(configSnippet.split(\"\\n\").map((l) => ` ${l}`).join(\"\\n\"));\n console.error(` ${pc.dim(\"```\")}\\n`);\n console.error(` ${renderSuccess(\"Setup complete!\")} ${pc.dim(\"Run\")} ${renderCommand(\"fennec start\")} ${pc.dim(\"to begin.\")}\\n`);\n}\n","/**\n * Command: init, install-browsers — Project setup utilities.\n */\nimport { existsSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { renderCommand, renderError, renderSuccess, createSpinner, confirmPrompt } from \"../utils/format.js\";\n\nexport async function installBrowsersCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Installing Browser Engines\")}\\n`);\n const spinner = createSpinner(\"Installing Chromium...\");\n try {\n execSync(\"npx playwright install chromium\", { stdio: \"pipe\", timeout: 120000 });\n spinner.succeed(\"Chromium installed successfully\");\n } catch {\n spinner.fail(\"Failed to install Chromium\");\n console.error(` ${pc.yellow(\"→\")} Try running: ${renderCommand(\"npx playwright install chromium\")}`);\n }\n console.error(`\\n ${pc.green(\"✓\")} Browser installation complete.\\n`);\n}\n\nexport async function initCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Initialize Fennec Configuration\")}\\n`);\n\n const configFile = resolve(\"./fennec.config.yaml\");\n if (existsSync(configFile)) {\n const overwrite = await confirmPrompt(`${pc.yellow(\"fennec.config.yaml\")} already exists. Overwrite?`, false);\n if (!overwrite) { console.error(` ${pc.dim(\"Cancelled.\")}\\n`); return; }\n }\n\n const spinner = createSpinner(\"Generating configuration...\");\n\n const config = `# Fennec Configuration\n# Generated by 'fennec init'\n\nbrowser:\n type: chromium\n headless: true\n defaultTimeout: 30000\n viewport:\n width: 1280\n height: 720\n\nsession:\n maxSessions: 10\n idleTimeoutSecs: 1800\n persistPath: \".fennec/sessions\"\n\nprocess:\n maxProcesses: 10\n logBufferLines: 2000\n spawnAllowlist:\n - \"npm\"\n - \"node\"\n - \"pnpm\"\n - \"yarn\"\n - \"bun\"\n - \"python\"\n - \"python3\"\n\nterminal:\n logBufferLines: 2000\n watchDebounceMs: 50\n\nnetwork:\n bufferSize: 1000\n captureRequestBody: true\n captureResponseBody: true\n slowRequestThresholdMs: 1000\n\nconsole:\n bufferSize: 500\n levels:\n - log\n - info\n - warn\n - error\n - debug\n\ncorrelation:\n windowMs: 500\n enableRootCauseInference: true\n minConfidence: 0.7\n\nsecurity:\n sandbox: true\n allowProcessSpawn: true\n allowProcessKill: false\n allowedDomains: []\n blockedDomains: []\n allowFileProtocol: false\n allowCDPRawAccess: false\n exportPath: \".fennec/exports\"\n maxExportSizeMB: 10\n\ntransport:\n type: stdio\n port: 3333\n host: \"127.0.0.1\"\n\nlogging:\n level: info\n format: pretty\n file: null\n`;\n\n writeFileSync(configFile, config, \"utf-8\");\n spinner.succeed(`Configuration written to ${pc.bold(configFile)}`);\n console.error(`\\n ${pc.dim(\"Edit the file to customize Fennec behavior.\")}\\n`);\n}\n","/**\n * Command: health — Check Fennec system health\n * Returns system status, tracked processes, and resource info.\n */\nimport { readFileSync, existsSync, readdirSync, statSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderError } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function healthCommand(): Promise<void> {\n printBanner();\n console.error(` ${pc.bold(\"Fennec Health Check\")}\\n`);\n\n // 1. ADB availability (if needed)\n let adbStatus = \"unknown\";\n try {\n const result = execSync(\"adb --version\", {\n encoding: \"utf-8\",\n timeout: 3000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const version = result.split(\"\\n\")[0]?.trim() ?? \"installed\";\n adbStatus = pc.green(version);\n } catch {\n adbStatus = pc.dim(\"not found\") + \" (optional)\";\n }\n\n // 2. Tracked processes\n const tracked = readTracked();\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n\n // 3. Disk usage for logs\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n let logSize = \"0 B\";\n try {\n if (existsSync(logDir)) {\n const files = readdirSync(logDir);\n let totalBytes = 0;\n for (const f of files) {\n const fStat = statSync(resolve(logDir, f));\n totalBytes += fStat.size;\n }\n logSize = totalBytes > 1024 * 1024\n ? `${(totalBytes / (1024 * 1024)).toFixed(1)} MB`\n : `${(totalBytes / 1024).toFixed(1)} KB`;\n }\n } catch { /* best-effort */ }\n\n // 4. Memory info\n let memoryInfo = \"unknown\";\n try {\n const mem = process.memoryUsage();\n memoryInfo = `${(mem.rss / (1024 * 1024)).toFixed(0)} MB RSS / ${(mem.heapUsed / (1024 * 1024)).toFixed(0)} MB heap`;\n } catch { /* best-effort */ }\n\n console.error(` ${symbols.fox} ${pc.bold(\"System\")}\\n`);\n console.error(` ${renderKV(\"Node.js\", process.version)}`);\n console.error(` ${renderKV(\"Platform\", `${process.platform} ${process.arch}`)}`);\n console.error(` ${renderKV(\"Memory\", memoryInfo)}`);\n console.error(` ${renderKV(\"ADB\", adbStatus)}`);\n console.error(` ${renderKV(\"PID\", String(process.pid))}`);\n console.error();\n console.error(` ${symbols.fox} ${pc.bold(\"Processes\")}\\n`);\n console.error(` ${renderKV(\"Tracked\", String(tracked.length))}`);\n console.error(` ${renderKV(\"Running\", String(runningCount))}`);\n console.error(` ${renderKV(\"Logs\", logSize)}`);\n console.error();\n\n const allHealthy = runningCount === tracked.length || tracked.length === 0;\n if (allHealthy) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(\"All systems healthy\")}\\n`);\n } else {\n const stopped = tracked.length - runningCount;\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(`${stopped} process(es) stopped`)} ${pc.dim(\"fennec ps\")}\\n`);\n }\n}\n","#!/usr/bin/env node\n\nimport { renderError } from \"./utils/format.js\";\nimport { printBanner } from \"./utils/banner.js\";\nimport { showHelp } from \"./utils/help.js\";\nimport { pipeCommand } from \"./commands/pipe.js\";\nimport { attachPidCommand } from \"./commands/attach-pid.js\";\nimport { attachPortCommand } from \"./commands/attach-port.js\";\nimport { watchCommand } from \"./commands/watch.js\";\nimport { startServer, startCommand, runCommand } from \"./commands/start.js\";\nimport { psCommand, statusCommand } from \"./commands/ps.js\";\nimport { killCommand } from \"./commands/kill.js\";\nimport { restartCommand } from \"./commands/restart.js\";\nimport { logCommand } from \"./commands/log.js\";\nimport { attachCommand } from \"./commands/attach.js\";\nimport { sessionsCommand } from \"./commands/sessions.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { installBrowsersCommand, initCommand } from \"./commands/management.js\";\nimport { healthCommand } from \"./commands/health.js\";\n\nconst [, , command, ...args] = process.argv;\n\nasync function main(): Promise<void> {\n if (!command || command === \"start\") {\n if (args.length === 0 || args[0]?.startsWith(\"--\")) {\n await startServer(args);\n } else {\n await startCommand(args);\n }\n } else if (command === \"run\") {\n await runCommand(args);\n } else if (command === \"ps\") {\n printBanner();\n await psCommand(args);\n } else if (command === \"status\") {\n printBanner();\n await statusCommand(args);\n } else if (command === \"log\") {\n await logCommand(args);\n } else if (command === \"kill\") {\n await killCommand(args);\n } else if (command === \"restart\") {\n await restartCommand(args);\n } else if (command === \"attach\") {\n await attachCommand(args);\n } else if (command === \"pipe\") {\n await pipeCommand(args);\n } else if (command === \"attach-pid\") {\n await attachPidCommand(args);\n } else if (command === \"attach-port\") {\n await attachPortCommand(args);\n } else if (command === \"watch\") {\n await watchCommand(args);\n } else if (command === \"sessions\") {\n await sessionsCommand();\n } else if (command === \"setup\") {\n await setupCommand();\n } else if (command === \"install-browsers\") {\n printBanner();\n await installBrowsersCommand();\n } else if (command === \"health\" || command === \"--health\") {\n await healthCommand();\n } else if (command === \"init\") {\n printBanner();\n await initCommand();\n } else if (command === \"version\" || command === \"--version\" || command === \"-v\") {\n printBanner();\n } else if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n printBanner();\n showHelp();\n } else {\n console.error(renderError(`Unknown command: ${command}`, \"Run 'fennec help' for usage information\"));\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(renderError(\"Fatal error\", String(error)));\n process.exit(1);\n});\n"],"mappings":"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","names":["pad","text","options","colors","colors","colors","colors","colors","stylize","builder","args","style","sequencer","map","colors","colors","args","require_has_flag","colors","hex","colors","colors","colors","color","concatty","slicy","args","Empty","require_utils","colors","args","args","CliTable3","num","resolve","pc","fennecOrange","CFonts","pc","fennecOrange","pc","args","args","args","args","readFileSync","mkdirSync","resolve","homedir","pc","existsSync","resolve","readFileSync","existsSync","command","args","pc","resolve","homedir","mkdirSync","readFileSync","pc","args","pc","columns","rows","resolve","pc","args","pc","pc","mkdirSync","createWriteStream","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","existsSync","readFileSync","resolve","homedir","spawn","execSync","pc","args","resolve","homedir","existsSync","readFileSync","execSync","pc","spawn","pc","args","pc","pc","pc","pc","pc","existsSync","writeFileSync","resolve","execSync","pc","pc","execSync","resolve","existsSync","writeFileSync","existsSync","readdirSync","statSync","execSync","resolve","homedir","pc","pc","execSync","resolve","homedir","existsSync","readdirSync","statSync"]}
|
|
1
|
+
{"version":3,"sources":["../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/debug.js","../../../node_modules/.pnpm/ansi-regex@5.0.1/node_modules/ansi-regex/index.js","../../../node_modules/.pnpm/strip-ansi@6.0.1/node_modules/strip-ansi/index.js","../../../node_modules/.pnpm/is-fullwidth-code-point@3.0.0/node_modules/is-fullwidth-code-point/index.js","../../../node_modules/.pnpm/emoji-regex@8.0.0/node_modules/emoji-regex/index.js","../../../node_modules/.pnpm/string-width@4.2.3/node_modules/string-width/index.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/utils.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/styles.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/has-flag.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/system/supports-colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/trap.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/custom/zalgo.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/america.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/zebra.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/rainbow.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/maps/random.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/lib/colors.js","../../../node_modules/.pnpm/@colors+colors@1.5.0/node_modules/@colors/colors/safe.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/cell.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/layout-manager.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/src/table.js","../../../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3/index.js","../src/utils/format.ts","../src/utils/banner.ts","../src/utils/help.ts","../src/commands/pipe.ts","../src/commands/attach-pid.ts","../src/commands/attach-port.ts","../src/commands/watch.ts","../src/commands/start.ts","../src/commands/tracker.ts","../src/utils/system-process.ts","../src/commands/ps.ts","../src/commands/kill.ts","../src/commands/restart.ts","../src/commands/log.ts","../src/commands/attach.ts","../src/commands/sessions.ts","../src/commands/setup.ts","../src/commands/management.ts","../src/commands/health.ts","../src/index.ts"],"sourcesContent":["let messages = [];\nlet level = 0;\n\nconst debug = (msg, min) => {\n if (level >= min) {\n messages.push(msg);\n }\n};\n\ndebug.WARN = 1;\ndebug.INFO = 2;\ndebug.DEBUG = 3;\n\ndebug.reset = () => {\n messages = [];\n};\n\ndebug.setDebugLevel = (v) => {\n level = v;\n};\n\ndebug.warn = (msg) => debug(msg, debug.WARN);\ndebug.info = (msg) => debug(msg, debug.INFO);\ndebug.debug = (msg) => debug(msg, debug.DEBUG);\n\ndebug.debugMessages = () => messages;\n\nmodule.exports = debug;\n","'use strict';\n\nmodule.exports = ({onlyFirst = false} = {}) => {\n\tconst pattern = [\n\t\t'[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n\t\t'(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PR-TZcf-ntqry=><~]))'\n\t].join('|');\n\n\treturn new RegExp(pattern, onlyFirst ? undefined : 'g');\n};\n","'use strict';\nconst ansiRegex = require('ansi-regex');\n\nmodule.exports = string => typeof string === 'string' ? string.replace(ansiRegex(), '') : string;\n","/* eslint-disable yoda */\n'use strict';\n\nconst isFullwidthCodePoint = codePoint => {\n\tif (Number.isNaN(codePoint)) {\n\t\treturn false;\n\t}\n\n\t// Code points are derived from:\n\t// http://www.unix.org/Public/UNIDATA/EastAsianWidth.txt\n\tif (\n\t\tcodePoint >= 0x1100 && (\n\t\t\tcodePoint <= 0x115F || // Hangul Jamo\n\t\t\tcodePoint === 0x2329 || // LEFT-POINTING ANGLE BRACKET\n\t\t\tcodePoint === 0x232A || // RIGHT-POINTING ANGLE BRACKET\n\t\t\t// CJK Radicals Supplement .. Enclosed CJK Letters and Months\n\t\t\t(0x2E80 <= codePoint && codePoint <= 0x3247 && codePoint !== 0x303F) ||\n\t\t\t// Enclosed CJK Letters and Months .. CJK Unified Ideographs Extension A\n\t\t\t(0x3250 <= codePoint && codePoint <= 0x4DBF) ||\n\t\t\t// CJK Unified Ideographs .. Yi Radicals\n\t\t\t(0x4E00 <= codePoint && codePoint <= 0xA4C6) ||\n\t\t\t// Hangul Jamo Extended-A\n\t\t\t(0xA960 <= codePoint && codePoint <= 0xA97C) ||\n\t\t\t// Hangul Syllables\n\t\t\t(0xAC00 <= codePoint && codePoint <= 0xD7A3) ||\n\t\t\t// CJK Compatibility Ideographs\n\t\t\t(0xF900 <= codePoint && codePoint <= 0xFAFF) ||\n\t\t\t// Vertical Forms\n\t\t\t(0xFE10 <= codePoint && codePoint <= 0xFE19) ||\n\t\t\t// CJK Compatibility Forms .. Small Form Variants\n\t\t\t(0xFE30 <= codePoint && codePoint <= 0xFE6B) ||\n\t\t\t// Halfwidth and Fullwidth Forms\n\t\t\t(0xFF01 <= codePoint && codePoint <= 0xFF60) ||\n\t\t\t(0xFFE0 <= codePoint && codePoint <= 0xFFE6) ||\n\t\t\t// Kana Supplement\n\t\t\t(0x1B000 <= codePoint && codePoint <= 0x1B001) ||\n\t\t\t// Enclosed Ideographic Supplement\n\t\t\t(0x1F200 <= codePoint && codePoint <= 0x1F251) ||\n\t\t\t// CJK Unified Ideographs Extension B .. Tertiary Ideographic Plane\n\t\t\t(0x20000 <= codePoint && codePoint <= 0x3FFFD)\n\t\t)\n\t) {\n\t\treturn true;\n\t}\n\n\treturn false;\n};\n\nmodule.exports = isFullwidthCodePoint;\nmodule.exports.default = isFullwidthCodePoint;\n","\"use strict\";\n\nmodule.exports = function () {\n // https://mths.be/emoji\n return /\\uD83C\\uDFF4\\uDB40\\uDC67\\uDB40\\uDC62(?:\\uDB40\\uDC65\\uDB40\\uDC6E\\uDB40\\uDC67|\\uDB40\\uDC73\\uDB40\\uDC63\\uDB40\\uDC74|\\uDB40\\uDC77\\uDB40\\uDC6C\\uDB40\\uDC73)\\uDB40\\uDC7F|\\uD83D\\uDC68(?:\\uD83C\\uDFFC\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68\\uD83C\\uDFFB|\\uD83C[\\uDF3E\\uDF73\\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\\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])|\\uD83C[\\uDF3E\\uDF73\\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])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\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])|(?:\\uD83D[\\uDC68\\uDC69])\\u200D(?:\\uD83D[\\uDC66\\uDC67])|[\\u2695\\u2696\\u2708]\\uFE0F|\\uD83D[\\uDC66\\uDC67]|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|(?:\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708])\\uFE0F|\\uD83C\\uDFFB\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C[\\uDFFB-\\uDFFF])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFB\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)\\uD83C\\uDFFB|\\uD83E\\uDDD1(?:\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1)|(?:\\uD83E\\uDDD1\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFF\\u200D\\uD83E\\uDD1D\\u200D(?:\\uD83D[\\uDC68\\uDC69]))(?:\\uD83C[\\uDFFB-\\uDFFE])|(?:\\uD83E\\uDDD1\\uD83C\\uDFFC\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB\\uDFFC])|\\uD83D\\uDC69(?:\\uD83C\\uDFFE\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFB-\\uDFFD\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\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\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFB\\u200D(?:\\uD83E\\uDD1D\\u200D\\uD83D\\uDC68(?:\\uD83C[\\uDFFC-\\uDFFF])|\\uD83C[\\uDF3E\\uDF73\\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\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\u200D(?:\\u2764\\uFE0F\\u200D(?:\\uD83D\\uDC8B\\u200D(?:\\uD83D[\\uDC68\\uDC69])|\\uD83D[\\uDC68\\uDC69])|\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD])|\\uD83C\\uDFFF\\u200D(?:\\uD83C[\\uDF3E\\uDF73\\uDF93\\uDFA4\\uDFA8\\uDFEB\\uDFED]|\\uD83D[\\uDCBB\\uDCBC\\uDD27\\uDD2C\\uDE80\\uDE92]|\\uD83E[\\uDDAF-\\uDDB3\\uDDBC\\uDDBD]))|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67]))|(?:\\uD83E\\uDDD1\\uD83C\\uDFFD\\u200D\\uD83E\\uDD1D\\u200D\\uD83E\\uDDD1|\\uD83D\\uDC69\\uD83C\\uDFFE\\u200D\\uD83E\\uDD1D\\u200D\\uD83D\\uDC69)(?:\\uD83C[\\uDFFB-\\uDFFD])|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC69\\u200D(?:\\uD83D[\\uDC66\\uDC67])|(?:\\uD83D\\uDC41\\uFE0F\\u200D\\uD83D\\uDDE8|\\uD83D\\uDC69(?:\\uD83C\\uDFFF\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFE\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFC\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFB\\u200D[\\u2695\\u2696\\u2708]|\\uD83C\\uDFFD\\u200D[\\u2695\\u2696\\u2708]|\\u200D[\\u2695\\u2696\\u2708])|(?:(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)\\uFE0F|\\uD83D\\uDC6F|\\uD83E[\\uDD3C\\uDDDE\\uDDDF])\\u200D[\\u2640\\u2642]|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:(?:\\uD83C[\\uDFFB-\\uDFFF])\\u200D[\\u2640\\u2642]|\\u200D[\\u2640\\u2642])|\\uD83C\\uDFF4\\u200D\\u2620)\\uFE0F|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67\\u200D(?:\\uD83D[\\uDC66\\uDC67])|\\uD83C\\uDFF3\\uFE0F\\u200D\\uD83C\\uDF08|\\uD83D\\uDC15\\u200D\\uD83E\\uDDBA|\\uD83D\\uDC69\\u200D\\uD83D\\uDC66|\\uD83D\\uDC69\\u200D\\uD83D\\uDC67|\\uD83C\\uDDFD\\uD83C\\uDDF0|\\uD83C\\uDDF4\\uD83C\\uDDF2|\\uD83C\\uDDF6\\uD83C\\uDDE6|[#\\*0-9]\\uFE0F\\u20E3|\\uD83C\\uDDE7(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEF\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9\\uDDFB\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDF9(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDED\\uDDEF-\\uDDF4\\uDDF7\\uDDF9\\uDDFB\\uDDFC\\uDDFF])|\\uD83C\\uDDEA(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDED\\uDDF7-\\uDDFA])|\\uD83E\\uDDD1(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF7(?:\\uD83C[\\uDDEA\\uDDF4\\uDDF8\\uDDFA\\uDDFC])|\\uD83D\\uDC69(?:\\uD83C[\\uDFFB-\\uDFFF])|\\uD83C\\uDDF2(?:\\uD83C[\\uDDE6\\uDDE8-\\uDDED\\uDDF0-\\uDDFF])|\\uD83C\\uDDE6(?:\\uD83C[\\uDDE8-\\uDDEC\\uDDEE\\uDDF1\\uDDF2\\uDDF4\\uDDF6-\\uDDFA\\uDDFC\\uDDFD\\uDDFF])|\\uD83C\\uDDF0(?:\\uD83C[\\uDDEA\\uDDEC-\\uDDEE\\uDDF2\\uDDF3\\uDDF5\\uDDF7\\uDDFC\\uDDFE\\uDDFF])|\\uD83C\\uDDED(?:\\uD83C[\\uDDF0\\uDDF2\\uDDF3\\uDDF7\\uDDF9\\uDDFA])|\\uD83C\\uDDE9(?:\\uD83C[\\uDDEA\\uDDEC\\uDDEF\\uDDF0\\uDDF2\\uDDF4\\uDDFF])|\\uD83C\\uDDFE(?:\\uD83C[\\uDDEA\\uDDF9])|\\uD83C\\uDDEC(?:\\uD83C[\\uDDE6\\uDDE7\\uDDE9-\\uDDEE\\uDDF1-\\uDDF3\\uDDF5-\\uDDFA\\uDDFC\\uDDFE])|\\uD83C\\uDDF8(?:\\uD83C[\\uDDE6-\\uDDEA\\uDDEC-\\uDDF4\\uDDF7-\\uDDF9\\uDDFB\\uDDFD-\\uDDFF])|\\uD83C\\uDDEB(?:\\uD83C[\\uDDEE-\\uDDF0\\uDDF2\\uDDF4\\uDDF7])|\\uD83C\\uDDF5(?:\\uD83C[\\uDDE6\\uDDEA-\\uDDED\\uDDF0-\\uDDF3\\uDDF7-\\uDDF9\\uDDFC\\uDDFE])|\\uD83C\\uDDFB(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA\\uDDEC\\uDDEE\\uDDF3\\uDDFA])|\\uD83C\\uDDF3(?:\\uD83C[\\uDDE6\\uDDE8\\uDDEA-\\uDDEC\\uDDEE\\uDDF1\\uDDF4\\uDDF5\\uDDF7\\uDDFA\\uDDFF])|\\uD83C\\uDDE8(?:\\uD83C[\\uDDE6\\uDDE8\\uDDE9\\uDDEB-\\uDDEE\\uDDF0-\\uDDF5\\uDDF7\\uDDFA-\\uDDFF])|\\uD83C\\uDDF1(?:\\uD83C[\\uDDE6-\\uDDE8\\uDDEE\\uDDF0\\uDDF7-\\uDDFB\\uDDFE])|\\uD83C\\uDDFF(?:\\uD83C[\\uDDE6\\uDDF2\\uDDFC])|\\uD83C\\uDDFC(?:\\uD83C[\\uDDEB\\uDDF8])|\\uD83C\\uDDFA(?:\\uD83C[\\uDDE6\\uDDEC\\uDDF2\\uDDF3\\uDDF8\\uDDFE\\uDDFF])|\\uD83C\\uDDEE(?:\\uD83C[\\uDDE8-\\uDDEA\\uDDF1-\\uDDF4\\uDDF6-\\uDDF9])|\\uD83C\\uDDEF(?:\\uD83C[\\uDDEA\\uDDF2\\uDDF4\\uDDF5])|(?:\\uD83C[\\uDFC3\\uDFC4\\uDFCA]|\\uD83D[\\uDC6E\\uDC71\\uDC73\\uDC77\\uDC81\\uDC82\\uDC86\\uDC87\\uDE45-\\uDE47\\uDE4B\\uDE4D\\uDE4E\\uDEA3\\uDEB4-\\uDEB6]|\\uD83E[\\uDD26\\uDD37-\\uDD39\\uDD3D\\uDD3E\\uDDB8\\uDDB9\\uDDCD-\\uDDCF\\uDDD6-\\uDDDD])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:\\u26F9|\\uD83C[\\uDFCB\\uDFCC]|\\uD83D\\uDD75)(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\u261D\\u270A-\\u270D]|\\uD83C[\\uDF85\\uDFC2\\uDFC7]|\\uD83D[\\uDC42\\uDC43\\uDC46-\\uDC50\\uDC66\\uDC67\\uDC6B-\\uDC6D\\uDC70\\uDC72\\uDC74-\\uDC76\\uDC78\\uDC7C\\uDC83\\uDC85\\uDCAA\\uDD74\\uDD7A\\uDD90\\uDD95\\uDD96\\uDE4C\\uDE4F\\uDEC0\\uDECC]|\\uD83E[\\uDD0F\\uDD18-\\uDD1C\\uDD1E\\uDD1F\\uDD30-\\uDD36\\uDDB5\\uDDB6\\uDDBB\\uDDD2-\\uDDD5])(?:\\uD83C[\\uDFFB-\\uDFFF])|(?:[\\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\\uDEEB\\uDEEC\\uDEF4-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])|(?:[#\\*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\\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\\uDEE0-\\uDEE5\\uDEE9\\uDEEB\\uDEEC\\uDEF0\\uDEF3-\\uDEFA\\uDFE0-\\uDFEB]|\\uD83E[\\uDD0D-\\uDD3A\\uDD3C-\\uDD45\\uDD47-\\uDD71\\uDD73-\\uDD76\\uDD7A-\\uDDA2\\uDDA5-\\uDDAA\\uDDAE-\\uDDCA\\uDDCD-\\uDDFF\\uDE70-\\uDE73\\uDE78-\\uDE7A\\uDE80-\\uDE82\\uDE90-\\uDE95])\\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[\\uDD0F\\uDD18-\\uDD1F\\uDD26\\uDD30-\\uDD39\\uDD3C-\\uDD3E\\uDDB5\\uDDB6\\uDDB8\\uDDB9\\uDDBB\\uDDCD-\\uDDCF\\uDDD1-\\uDDDD])/g;\n};\n","'use strict';\nconst stripAnsi = require('strip-ansi');\nconst isFullwidthCodePoint = require('is-fullwidth-code-point');\nconst emojiRegex = require('emoji-regex');\n\nconst stringWidth = string => {\n\tif (typeof string !== 'string' || string.length === 0) {\n\t\treturn 0;\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\tlet width = 0;\n\n\tfor (let i = 0; i < string.length; i++) {\n\t\tconst code = string.codePointAt(i);\n\n\t\t// Ignore control characters\n\t\tif (code <= 0x1F || (code >= 0x7F && code <= 0x9F)) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Ignore combining characters\n\t\tif (code >= 0x300 && code <= 0x36F) {\n\t\t\tcontinue;\n\t\t}\n\n\t\t// Surrogates\n\t\tif (code > 0xFFFF) {\n\t\t\ti++;\n\t\t}\n\n\t\twidth += isFullwidthCodePoint(code) ? 2 : 1;\n\t}\n\n\treturn width;\n};\n\nmodule.exports = stringWidth;\n// TODO: remove this in the next major version\nmodule.exports.default = stringWidth;\n","const stringWidth = require('string-width');\n\nfunction codeRegex(capture) {\n return capture ? /\\u001b\\[((?:\\d*;){0,5}\\d*)m/g : /\\u001b\\[(?:\\d*;){0,5}\\d*m/g;\n}\n\nfunction strlen(str) {\n let code = codeRegex();\n let stripped = ('' + str).replace(code, '');\n let split = stripped.split('\\n');\n return split.reduce(function (memo, s) {\n return stringWidth(s) > memo ? stringWidth(s) : memo;\n }, 0);\n}\n\nfunction repeat(str, times) {\n return Array(times + 1).join(str);\n}\n\nfunction pad(str, len, pad, dir) {\n let length = strlen(str);\n if (len + 1 >= length) {\n let padlen = len - length;\n switch (dir) {\n case 'right': {\n str = repeat(pad, padlen) + str;\n break;\n }\n case 'center': {\n let right = Math.ceil(padlen / 2);\n let left = padlen - right;\n str = repeat(pad, left) + str + repeat(pad, right);\n break;\n }\n default: {\n str = str + repeat(pad, padlen);\n break;\n }\n }\n }\n return str;\n}\n\nlet codeCache = {};\n\nfunction addToCodeCache(name, on, off) {\n on = '\\u001b[' + on + 'm';\n off = '\\u001b[' + off + 'm';\n codeCache[on] = { set: name, to: true };\n codeCache[off] = { set: name, to: false };\n codeCache[name] = { on: on, off: off };\n}\n\n//https://github.com/Marak/colors.js/blob/master/lib/styles.js\naddToCodeCache('bold', 1, 22);\naddToCodeCache('italics', 3, 23);\naddToCodeCache('underline', 4, 24);\naddToCodeCache('inverse', 7, 27);\naddToCodeCache('strikethrough', 9, 29);\n\nfunction updateState(state, controlChars) {\n let controlCode = controlChars[1] ? parseInt(controlChars[1].split(';')[0]) : 0;\n if ((controlCode >= 30 && controlCode <= 39) || (controlCode >= 90 && controlCode <= 97)) {\n state.lastForegroundAdded = controlChars[0];\n return;\n }\n if ((controlCode >= 40 && controlCode <= 49) || (controlCode >= 100 && controlCode <= 107)) {\n state.lastBackgroundAdded = controlChars[0];\n return;\n }\n if (controlCode === 0) {\n for (let i in state) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(state, i)) {\n delete state[i];\n }\n }\n return;\n }\n let info = codeCache[controlChars[0]];\n if (info) {\n state[info.set] = info.to;\n }\n}\n\nfunction readState(line) {\n let code = codeRegex(true);\n let controlChars = code.exec(line);\n let state = {};\n while (controlChars !== null) {\n updateState(state, controlChars);\n controlChars = code.exec(line);\n }\n return state;\n}\n\nfunction unwindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret += codeCache[key].off;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret += '\\u001b[49m';\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret += '\\u001b[39m';\n }\n\n return ret;\n}\n\nfunction rewindState(state, ret) {\n let lastBackgroundAdded = state.lastBackgroundAdded;\n let lastForegroundAdded = state.lastForegroundAdded;\n\n delete state.lastBackgroundAdded;\n delete state.lastForegroundAdded;\n\n Object.keys(state).forEach(function (key) {\n if (state[key]) {\n ret = codeCache[key].on + ret;\n }\n });\n\n if (lastBackgroundAdded && lastBackgroundAdded != '\\u001b[49m') {\n ret = lastBackgroundAdded + ret;\n }\n if (lastForegroundAdded && lastForegroundAdded != '\\u001b[39m') {\n ret = lastForegroundAdded + ret;\n }\n\n return ret;\n}\n\nfunction truncateWidth(str, desiredLength) {\n if (str.length === strlen(str)) {\n return str.substr(0, desiredLength);\n }\n\n while (strlen(str) > desiredLength) {\n str = str.slice(0, -1);\n }\n\n return str;\n}\n\nfunction truncateWidthWithAnsi(str, desiredLength) {\n let code = codeRegex(true);\n let split = str.split(codeRegex());\n let splitIndex = 0;\n let retLen = 0;\n let ret = '';\n let myArray;\n let state = {};\n\n while (retLen < desiredLength) {\n myArray = code.exec(str);\n let toAdd = split[splitIndex];\n splitIndex++;\n if (retLen + strlen(toAdd) > desiredLength) {\n toAdd = truncateWidth(toAdd, desiredLength - retLen);\n }\n ret += toAdd;\n retLen += strlen(toAdd);\n\n if (retLen < desiredLength) {\n if (!myArray) {\n break;\n } // full-width chars may cause a whitespace which cannot be filled\n ret += myArray[0];\n updateState(state, myArray);\n }\n }\n\n return unwindState(state, ret);\n}\n\nfunction truncate(str, desiredLength, truncateChar) {\n truncateChar = truncateChar || '…';\n let lengthOfStr = strlen(str);\n if (lengthOfStr <= desiredLength) {\n return str;\n }\n desiredLength -= strlen(truncateChar);\n\n let ret = truncateWidthWithAnsi(str, desiredLength);\n\n ret += truncateChar;\n\n const hrefTag = '\\x1B]8;;\\x07';\n\n if (str.includes(hrefTag) && !ret.includes(hrefTag)) {\n ret += hrefTag;\n }\n\n return ret;\n}\n\nfunction defaultOptions() {\n return {\n chars: {\n top: '─',\n 'top-mid': '┬',\n 'top-left': '┌',\n 'top-right': '┐',\n bottom: '─',\n 'bottom-mid': '┴',\n 'bottom-left': '└',\n 'bottom-right': '┘',\n left: '│',\n 'left-mid': '├',\n mid: '─',\n 'mid-mid': '┼',\n right: '│',\n 'right-mid': '┤',\n middle: '│',\n },\n truncate: '…',\n colWidths: [],\n rowHeights: [],\n colAligns: [],\n rowAligns: [],\n style: {\n 'padding-left': 1,\n 'padding-right': 1,\n head: ['red'],\n border: ['grey'],\n compact: false,\n },\n head: [],\n };\n}\n\nfunction mergeOptions(options, defaults) {\n options = options || {};\n defaults = defaults || defaultOptions();\n let ret = Object.assign({}, defaults, options);\n ret.chars = Object.assign({}, defaults.chars, options.chars);\n ret.style = Object.assign({}, defaults.style, options.style);\n return ret;\n}\n\n// Wrap on word boundary\nfunction wordWrap(maxLength, input) {\n let lines = [];\n let split = input.split(/(\\s+)/g);\n let line = [];\n let lineLength = 0;\n let whitespace;\n for (let i = 0; i < split.length; i += 2) {\n let word = split[i];\n let newLength = lineLength + strlen(word);\n if (lineLength > 0 && whitespace) {\n newLength += whitespace.length;\n }\n if (newLength > maxLength) {\n if (lineLength !== 0) {\n lines.push(line.join(''));\n }\n line = [word];\n lineLength = strlen(word);\n } else {\n line.push(whitespace || '', word);\n lineLength = newLength;\n }\n whitespace = split[i + 1];\n }\n if (lineLength) {\n lines.push(line.join(''));\n }\n return lines;\n}\n\n// Wrap text (ignoring word boundaries)\nfunction textWrap(maxLength, input) {\n let lines = [];\n let line = '';\n function pushLine(str, ws) {\n if (line.length && ws) line += ws;\n line += str;\n while (line.length > maxLength) {\n lines.push(line.slice(0, maxLength));\n line = line.slice(maxLength);\n }\n }\n let split = input.split(/(\\s+)/g);\n for (let i = 0; i < split.length; i += 2) {\n pushLine(split[i], i && split[i - 1]);\n }\n if (line.length) lines.push(line);\n return lines;\n}\n\nfunction multiLineWordWrap(maxLength, input, wrapOnWordBoundary = true) {\n let output = [];\n input = input.split('\\n');\n const handler = wrapOnWordBoundary ? wordWrap : textWrap;\n for (let i = 0; i < input.length; i++) {\n output.push.apply(output, handler(maxLength, input[i]));\n }\n return output;\n}\n\nfunction colorizeLines(input) {\n let state = {};\n let output = [];\n for (let i = 0; i < input.length; i++) {\n let line = rewindState(state, input[i]);\n state = readState(line);\n let temp = Object.assign({}, state);\n output.push(unwindState(temp, line));\n }\n return output;\n}\n\n/**\n * Credit: Matheus Sampaio https://github.com/matheussampaio\n */\nfunction hyperlink(url, text) {\n const OSC = '\\u001B]';\n const BEL = '\\u0007';\n const SEP = ';';\n\n return [OSC, '8', SEP, SEP, url || text, BEL, text, OSC, '8', SEP, SEP, BEL].join('');\n}\n\nmodule.exports = {\n strlen: strlen,\n repeat: repeat,\n pad: pad,\n truncate: truncate,\n mergeOptions: mergeOptions,\n wordWrap: multiLineWordWrap,\n colorizeLines: colorizeLines,\n hyperlink,\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar styles = {};\nmodule['exports'] = styles;\n\nvar codes = {\n reset: [0, 0],\n\n bold: [1, 22],\n dim: [2, 22],\n italic: [3, 23],\n underline: [4, 24],\n inverse: [7, 27],\n hidden: [8, 28],\n strikethrough: [9, 29],\n\n black: [30, 39],\n red: [31, 39],\n green: [32, 39],\n yellow: [33, 39],\n blue: [34, 39],\n magenta: [35, 39],\n cyan: [36, 39],\n white: [37, 39],\n gray: [90, 39],\n grey: [90, 39],\n\n brightRed: [91, 39],\n brightGreen: [92, 39],\n brightYellow: [93, 39],\n brightBlue: [94, 39],\n brightMagenta: [95, 39],\n brightCyan: [96, 39],\n brightWhite: [97, 39],\n\n bgBlack: [40, 49],\n bgRed: [41, 49],\n bgGreen: [42, 49],\n bgYellow: [43, 49],\n bgBlue: [44, 49],\n bgMagenta: [45, 49],\n bgCyan: [46, 49],\n bgWhite: [47, 49],\n bgGray: [100, 49],\n bgGrey: [100, 49],\n\n bgBrightRed: [101, 49],\n bgBrightGreen: [102, 49],\n bgBrightYellow: [103, 49],\n bgBrightBlue: [104, 49],\n bgBrightMagenta: [105, 49],\n bgBrightCyan: [106, 49],\n bgBrightWhite: [107, 49],\n\n // legacy styles for colors pre v1.0.0\n blackBG: [40, 49],\n redBG: [41, 49],\n greenBG: [42, 49],\n yellowBG: [43, 49],\n blueBG: [44, 49],\n magentaBG: [45, 49],\n cyanBG: [46, 49],\n whiteBG: [47, 49],\n\n};\n\nObject.keys(codes).forEach(function(key) {\n var val = codes[key];\n var style = styles[key] = [];\n style.open = '\\u001b[' + val[0] + 'm';\n style.close = '\\u001b[' + val[1] + 'm';\n});\n","/*\nMIT License\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy of\nthis software and associated documentation files (the \"Software\"), to deal in\nthe Software without restriction, including without limitation the rights to\nuse, copy, modify, merge, publish, distribute, sublicense, and/or sell copies\nof the Software, and to permit persons to whom the Software is furnished to do\nso, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n*/\n\n'use strict';\n\nmodule.exports = function(flag, argv) {\n argv = argv || process.argv;\n\n var terminatorPos = argv.indexOf('--');\n var prefix = /^-{1,2}/.test(flag) ? '' : '--';\n var pos = argv.indexOf(prefix + flag);\n\n return pos !== -1 && (terminatorPos === -1 ? true : pos < terminatorPos);\n};\n","/*\nThe MIT License (MIT)\n\nCopyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\n'use strict';\n\nvar os = require('os');\nvar hasFlag = require('./has-flag.js');\n\nvar env = process.env;\n\nvar forceColor = void 0;\nif (hasFlag('no-color') || hasFlag('no-colors') || hasFlag('color=false')) {\n forceColor = false;\n} else if (hasFlag('color') || hasFlag('colors') || hasFlag('color=true')\n || hasFlag('color=always')) {\n forceColor = true;\n}\nif ('FORCE_COLOR' in env) {\n forceColor = env.FORCE_COLOR.length === 0\n || parseInt(env.FORCE_COLOR, 10) !== 0;\n}\n\nfunction translateLevel(level) {\n if (level === 0) {\n return false;\n }\n\n return {\n level: level,\n hasBasic: true,\n has256: level >= 2,\n has16m: level >= 3,\n };\n}\n\nfunction supportsColor(stream) {\n if (forceColor === false) {\n return 0;\n }\n\n if (hasFlag('color=16m') || hasFlag('color=full')\n || hasFlag('color=truecolor')) {\n return 3;\n }\n\n if (hasFlag('color=256')) {\n return 2;\n }\n\n if (stream && !stream.isTTY && forceColor !== true) {\n return 0;\n }\n\n var min = forceColor ? 1 : 0;\n\n if (process.platform === 'win32') {\n // Node.js 7.5.0 is the first version of Node.js to include a patch to\n // libuv that enables 256 color output on Windows. Anything earlier and it\n // won't work. However, here we target Node.js 8 at minimum as it is an LTS\n // release, and Node.js 7 is not. Windows 10 build 10586 is the first\n // Windows release that supports 256 colors. Windows 10 build 14931 is the\n // first release that supports 16m/TrueColor.\n var osRelease = os.release().split('.');\n if (Number(process.versions.node.split('.')[0]) >= 8\n && Number(osRelease[0]) >= 10 && Number(osRelease[2]) >= 10586) {\n return Number(osRelease[2]) >= 14931 ? 3 : 2;\n }\n\n return 1;\n }\n\n if ('CI' in env) {\n if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI'].some(function(sign) {\n return sign in env;\n }) || env.CI_NAME === 'codeship') {\n return 1;\n }\n\n return min;\n }\n\n if ('TEAMCITY_VERSION' in env) {\n return (/^(9\\.(0*[1-9]\\d*)\\.|\\d{2,}\\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0\n );\n }\n\n if ('TERM_PROGRAM' in env) {\n var version = parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);\n\n switch (env.TERM_PROGRAM) {\n case 'iTerm.app':\n return version >= 3 ? 3 : 2;\n case 'Hyper':\n return 3;\n case 'Apple_Terminal':\n return 2;\n // No default\n }\n }\n\n if (/-256(color)?$/i.test(env.TERM)) {\n return 2;\n }\n\n if (/^screen|^xterm|^vt100|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {\n return 1;\n }\n\n if ('COLORTERM' in env) {\n return 1;\n }\n\n if (env.TERM === 'dumb') {\n return min;\n }\n\n return min;\n}\n\nfunction getSupportLevel(stream) {\n var level = supportsColor(stream);\n return translateLevel(level);\n}\n\nmodule.exports = {\n supportsColor: getSupportLevel,\n stdout: getSupportLevel(process.stdout),\n stderr: getSupportLevel(process.stderr),\n};\n","module['exports'] = function runTheTrap(text, options) {\n var result = '';\n text = text || 'Run the trap, drop the bass';\n text = text.split('');\n var trap = {\n a: ['\\u0040', '\\u0104', '\\u023a', '\\u0245', '\\u0394', '\\u039b', '\\u0414'],\n b: ['\\u00df', '\\u0181', '\\u0243', '\\u026e', '\\u03b2', '\\u0e3f'],\n c: ['\\u00a9', '\\u023b', '\\u03fe'],\n d: ['\\u00d0', '\\u018a', '\\u0500', '\\u0501', '\\u0502', '\\u0503'],\n e: ['\\u00cb', '\\u0115', '\\u018e', '\\u0258', '\\u03a3', '\\u03be', '\\u04bc',\n '\\u0a6c'],\n f: ['\\u04fa'],\n g: ['\\u0262'],\n h: ['\\u0126', '\\u0195', '\\u04a2', '\\u04ba', '\\u04c7', '\\u050a'],\n i: ['\\u0f0f'],\n j: ['\\u0134'],\n k: ['\\u0138', '\\u04a0', '\\u04c3', '\\u051e'],\n l: ['\\u0139'],\n m: ['\\u028d', '\\u04cd', '\\u04ce', '\\u0520', '\\u0521', '\\u0d69'],\n n: ['\\u00d1', '\\u014b', '\\u019d', '\\u0376', '\\u03a0', '\\u048a'],\n o: ['\\u00d8', '\\u00f5', '\\u00f8', '\\u01fe', '\\u0298', '\\u047a', '\\u05dd',\n '\\u06dd', '\\u0e4f'],\n p: ['\\u01f7', '\\u048e'],\n q: ['\\u09cd'],\n r: ['\\u00ae', '\\u01a6', '\\u0210', '\\u024c', '\\u0280', '\\u042f'],\n s: ['\\u00a7', '\\u03de', '\\u03df', '\\u03e8'],\n t: ['\\u0141', '\\u0166', '\\u0373'],\n u: ['\\u01b1', '\\u054d'],\n v: ['\\u05d8'],\n w: ['\\u0428', '\\u0460', '\\u047c', '\\u0d70'],\n x: ['\\u04b2', '\\u04fe', '\\u04fc', '\\u04fd'],\n y: ['\\u00a5', '\\u04b0', '\\u04cb'],\n z: ['\\u01b5', '\\u0240'],\n };\n text.forEach(function(c) {\n c = c.toLowerCase();\n var chars = trap[c] || [' '];\n var rand = Math.floor(Math.random() * chars.length);\n if (typeof trap[c] !== 'undefined') {\n result += trap[c][rand];\n } else {\n result += c;\n }\n });\n return result;\n};\n","// please no\nmodule['exports'] = function zalgo(text, options) {\n text = text || ' he is here ';\n var soul = {\n 'up': [\n '̍', '̎', '̄', '̅',\n '̿', '̑', '̆', '̐',\n '͒', '͗', '͑', '̇',\n '̈', '̊', '͂', '̓',\n '̈', '͊', '͋', '͌',\n '̃', '̂', '̌', '͐',\n '̀', '́', '̋', '̏',\n '̒', '̓', '̔', '̽',\n '̉', 'ͣ', 'ͤ', 'ͥ',\n 'ͦ', 'ͧ', 'ͨ', 'ͩ',\n 'ͪ', 'ͫ', 'ͬ', 'ͭ',\n 'ͮ', 'ͯ', '̾', '͛',\n '͆', '̚',\n ],\n 'down': [\n '̖', '̗', '̘', '̙',\n '̜', '̝', '̞', '̟',\n '̠', '̤', '̥', '̦',\n '̩', '̪', '̫', '̬',\n '̭', '̮', '̯', '̰',\n '̱', '̲', '̳', '̹',\n '̺', '̻', '̼', 'ͅ',\n '͇', '͈', '͉', '͍',\n '͎', '͓', '͔', '͕',\n '͖', '͙', '͚', '̣',\n ],\n 'mid': [\n '̕', '̛', '̀', '́',\n '͘', '̡', '̢', '̧',\n '̨', '̴', '̵', '̶',\n '͜', '͝', '͞',\n '͟', '͠', '͢', '̸',\n '̷', '͡', ' ҉',\n ],\n };\n var all = [].concat(soul.up, soul.down, soul.mid);\n\n function randomNumber(range) {\n var r = Math.floor(Math.random() * range);\n return r;\n }\n\n function isChar(character) {\n var bool = false;\n all.filter(function(i) {\n bool = (i === character);\n });\n return bool;\n }\n\n\n function heComes(text, options) {\n var result = '';\n var counts;\n var l;\n options = options || {};\n options['up'] =\n typeof options['up'] !== 'undefined' ? options['up'] : true;\n options['mid'] =\n typeof options['mid'] !== 'undefined' ? options['mid'] : true;\n options['down'] =\n typeof options['down'] !== 'undefined' ? options['down'] : true;\n options['size'] =\n typeof options['size'] !== 'undefined' ? options['size'] : 'maxi';\n text = text.split('');\n for (l in text) {\n if (isChar(l)) {\n continue;\n }\n result = result + text[l];\n counts = {'up': 0, 'down': 0, 'mid': 0};\n switch (options.size) {\n case 'mini':\n counts.up = randomNumber(8);\n counts.mid = randomNumber(2);\n counts.down = randomNumber(8);\n break;\n case 'maxi':\n counts.up = randomNumber(16) + 3;\n counts.mid = randomNumber(4) + 1;\n counts.down = randomNumber(64) + 3;\n break;\n default:\n counts.up = randomNumber(8) + 1;\n counts.mid = randomNumber(6) / 2;\n counts.down = randomNumber(8) + 1;\n break;\n }\n\n var arr = ['up', 'mid', 'down'];\n for (var d in arr) {\n var index = arr[d];\n for (var i = 0; i <= counts[index]; i++) {\n if (options[index]) {\n result = result + soul[index][randomNumber(soul[index].length)];\n }\n }\n }\n }\n return result;\n }\n // don't summon him\n return heComes(text, options);\n};\n\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n if (letter === ' ') return letter;\n switch (i%3) {\n case 0: return colors.red(letter);\n case 1: return colors.white(letter);\n case 2: return colors.blue(letter);\n }\n };\n};\n","module['exports'] = function(colors) {\n return function(letter, i, exploded) {\n return i % 2 === 0 ? letter : colors.inverse(letter);\n };\n};\n","module['exports'] = function(colors) {\n // RoY G BiV\n var rainbowColors = ['red', 'yellow', 'green', 'blue', 'magenta'];\n return function(letter, i, exploded) {\n if (letter === ' ') {\n return letter;\n } else {\n return colors[rainbowColors[i++ % rainbowColors.length]](letter);\n }\n };\n};\n\n","module['exports'] = function(colors) {\n var available = ['underline', 'inverse', 'grey', 'yellow', 'red', 'green',\n 'blue', 'white', 'cyan', 'magenta', 'brightYellow', 'brightRed',\n 'brightGreen', 'brightBlue', 'brightWhite', 'brightCyan', 'brightMagenta'];\n return function(letter, i, exploded) {\n return letter === ' ' ? letter :\n colors[\n available[Math.round(Math.random() * (available.length - 2))]\n ](letter);\n };\n};\n","/*\n\nThe MIT License (MIT)\n\nOriginal Library\n - Copyright (c) Marak Squires\n\nAdditional functionality\n - Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (sindresorhus.com)\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in\nall copies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\nTHE SOFTWARE.\n\n*/\n\nvar colors = {};\nmodule['exports'] = colors;\n\ncolors.themes = {};\n\nvar util = require('util');\nvar ansiStyles = colors.styles = require('./styles');\nvar defineProps = Object.defineProperties;\nvar newLineRegex = new RegExp(/[\\r\\n]+/g);\n\ncolors.supportsColor = require('./system/supports-colors').supportsColor;\n\nif (typeof colors.enabled === 'undefined') {\n colors.enabled = colors.supportsColor() !== false;\n}\n\ncolors.enable = function() {\n colors.enabled = true;\n};\n\ncolors.disable = function() {\n colors.enabled = false;\n};\n\ncolors.stripColors = colors.strip = function(str) {\n return ('' + str).replace(/\\x1B\\[\\d+m/g, '');\n};\n\n// eslint-disable-next-line no-unused-vars\nvar stylize = colors.stylize = function stylize(str, style) {\n if (!colors.enabled) {\n return str+'';\n }\n\n var styleMap = ansiStyles[style];\n\n // Stylize should work for non-ANSI styles, too\n if (!styleMap && style in colors) {\n // Style maps like trap operate as functions on strings;\n // they don't have properties like open or close.\n return colors[style](str);\n }\n\n return styleMap.open + str + styleMap.close;\n};\n\nvar matchOperatorsRe = /[|\\\\{}()[\\]^$+*?.]/g;\nvar escapeStringRegexp = function(str) {\n if (typeof str !== 'string') {\n throw new TypeError('Expected a string');\n }\n return str.replace(matchOperatorsRe, '\\\\$&');\n};\n\nfunction build(_styles) {\n var builder = function builder() {\n return applyStyle.apply(builder, arguments);\n };\n builder._styles = _styles;\n // __proto__ is used because we must return a function, but there is\n // no way to create a function with a different prototype.\n builder.__proto__ = proto;\n return builder;\n}\n\nvar styles = (function() {\n var ret = {};\n ansiStyles.grey = ansiStyles.gray;\n Object.keys(ansiStyles).forEach(function(key) {\n ansiStyles[key].closeRe =\n new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');\n ret[key] = {\n get: function() {\n return build(this._styles.concat(key));\n },\n };\n });\n return ret;\n})();\n\nvar proto = defineProps(function colors() {}, styles);\n\nfunction applyStyle() {\n var args = Array.prototype.slice.call(arguments);\n\n var str = args.map(function(arg) {\n // Use weak equality check so we can colorize null/undefined in safe mode\n if (arg != null && arg.constructor === String) {\n return arg;\n } else {\n return util.inspect(arg);\n }\n }).join(' ');\n\n if (!colors.enabled || !str) {\n return str;\n }\n\n var newLinesPresent = str.indexOf('\\n') != -1;\n\n var nestedStyles = this._styles;\n\n var i = nestedStyles.length;\n while (i--) {\n var code = ansiStyles[nestedStyles[i]];\n str = code.open + str.replace(code.closeRe, code.open) + code.close;\n if (newLinesPresent) {\n str = str.replace(newLineRegex, function(match) {\n return code.close + match + code.open;\n });\n }\n }\n\n return str;\n}\n\ncolors.setTheme = function(theme) {\n if (typeof theme === 'string') {\n console.log('colors.setTheme now only accepts an object, not a string. ' +\n 'If you are trying to set a theme from a file, it is now your (the ' +\n 'caller\\'s) responsibility to require the file. The old syntax ' +\n 'looked like colors.setTheme(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'); The new syntax looks like '+\n 'colors.setTheme(require(__dirname + ' +\n '\\'/../themes/generic-logging.js\\'));');\n return;\n }\n for (var style in theme) {\n (function(style) {\n colors[style] = function(str) {\n if (typeof theme[style] === 'object') {\n var out = str;\n for (var i in theme[style]) {\n out = colors[theme[style][i]](out);\n }\n return out;\n }\n return colors[theme[style]](str);\n };\n })(style);\n }\n};\n\nfunction init() {\n var ret = {};\n Object.keys(styles).forEach(function(name) {\n ret[name] = {\n get: function() {\n return build([name]);\n },\n };\n });\n return ret;\n}\n\nvar sequencer = function sequencer(map, str) {\n var exploded = str.split('');\n exploded = exploded.map(map);\n return exploded.join('');\n};\n\n// custom formatter methods\ncolors.trap = require('./custom/trap');\ncolors.zalgo = require('./custom/zalgo');\n\n// maps\ncolors.maps = {};\ncolors.maps.america = require('./maps/america')(colors);\ncolors.maps.zebra = require('./maps/zebra')(colors);\ncolors.maps.rainbow = require('./maps/rainbow')(colors);\ncolors.maps.random = require('./maps/random')(colors);\n\nfor (var map in colors.maps) {\n (function(map) {\n colors[map] = function(str) {\n return sequencer(colors.maps[map], str);\n };\n })(map);\n}\n\ndefineProps(colors, init());\n","//\n// Remark: Requiring this file will use the \"safe\" colors API,\n// which will not touch String.prototype.\n//\n// var colors = require('colors/safe');\n// colors.red(\"foo\")\n//\n//\nvar colors = require('./lib/colors');\nmodule['exports'] = colors;\n","const { info, debug } = require('./debug');\nconst utils = require('./utils');\n\nclass Cell {\n /**\n * A representation of a cell within the table.\n * Implementations must have `init` and `draw` methods,\n * as well as `colSpan`, `rowSpan`, `desiredHeight` and `desiredWidth` properties.\n * @param options\n * @constructor\n */\n constructor(options) {\n this.setOptions(options);\n\n /**\n * Each cell will have it's `x` and `y` values set by the `layout-manager` prior to\n * `init` being called;\n * @type {Number}\n */\n this.x = null;\n this.y = null;\n }\n\n setOptions(options) {\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof options) !== -1) {\n options = { content: '' + options };\n }\n options = options || {};\n this.options = options;\n let content = options.content;\n if (['boolean', 'number', 'bigint', 'string'].indexOf(typeof content) !== -1) {\n this.content = String(content);\n } else if (!content) {\n this.content = this.options.href || '';\n } else {\n throw new Error('Content needs to be a primitive, got: ' + typeof content);\n }\n this.colSpan = options.colSpan || 1;\n this.rowSpan = options.rowSpan || 1;\n if (this.options.href) {\n Object.defineProperty(this, 'href', {\n get() {\n return this.options.href;\n },\n });\n }\n }\n\n mergeTableOptions(tableOptions, cells) {\n this.cells = cells;\n\n let optionsChars = this.options.chars || {};\n let tableChars = tableOptions.chars;\n let chars = (this.chars = {});\n CHAR_NAMES.forEach(function (name) {\n setOption(optionsChars, tableChars, name, chars);\n });\n\n this.truncate = this.options.truncate || tableOptions.truncate;\n\n let style = (this.options.style = this.options.style || {});\n let tableStyle = tableOptions.style;\n setOption(style, tableStyle, 'padding-left', this);\n setOption(style, tableStyle, 'padding-right', this);\n this.head = style.head || tableStyle.head;\n this.border = style.border || tableStyle.border;\n\n this.fixedWidth = tableOptions.colWidths[this.x];\n this.lines = this.computeLines(tableOptions);\n\n this.desiredWidth = utils.strlen(this.content) + this.paddingLeft + this.paddingRight;\n this.desiredHeight = this.lines.length;\n }\n\n computeLines(tableOptions) {\n const tableWordWrap = tableOptions.wordWrap || tableOptions.textWrap;\n const { wordWrap = tableWordWrap } = this.options;\n if (this.fixedWidth && wordWrap) {\n this.fixedWidth -= this.paddingLeft + this.paddingRight;\n if (this.colSpan) {\n let i = 1;\n while (i < this.colSpan) {\n this.fixedWidth += tableOptions.colWidths[this.x + i];\n i++;\n }\n }\n const { wrapOnWordBoundary: tableWrapOnWordBoundary = true } = tableOptions;\n const { wrapOnWordBoundary = tableWrapOnWordBoundary } = this.options;\n return this.wrapLines(utils.wordWrap(this.fixedWidth, this.content, wrapOnWordBoundary));\n }\n return this.wrapLines(this.content.split('\\n'));\n }\n\n wrapLines(computedLines) {\n const lines = utils.colorizeLines(computedLines);\n if (this.href) {\n return lines.map((line) => utils.hyperlink(this.href, line));\n }\n return lines;\n }\n\n /**\n * Initializes the Cells data structure.\n *\n * @param tableOptions - A fully populated set of tableOptions.\n * In addition to the standard default values, tableOptions must have fully populated the\n * `colWidths` and `rowWidths` arrays. Those arrays must have lengths equal to the number\n * of columns or rows (respectively) in this table, and each array item must be a Number.\n *\n */\n init(tableOptions) {\n let x = this.x;\n let y = this.y;\n this.widths = tableOptions.colWidths.slice(x, x + this.colSpan);\n this.heights = tableOptions.rowHeights.slice(y, y + this.rowSpan);\n this.width = this.widths.reduce(sumPlusOne, -1);\n this.height = this.heights.reduce(sumPlusOne, -1);\n\n this.hAlign = this.options.hAlign || tableOptions.colAligns[x];\n this.vAlign = this.options.vAlign || tableOptions.rowAligns[y];\n\n this.drawRight = x + this.colSpan == tableOptions.colWidths.length;\n }\n\n /**\n * Draws the given line of the cell.\n * This default implementation defers to methods `drawTop`, `drawBottom`, `drawLine` and `drawEmpty`.\n * @param lineNum - can be `top`, `bottom` or a numerical line number.\n * @param spanningCell - will be a number if being called from a RowSpanCell, and will represent how\n * many rows below it's being called from. Otherwise it's undefined.\n * @returns {String} The representation of this line.\n */\n draw(lineNum, spanningCell) {\n if (lineNum == 'top') return this.drawTop(this.drawRight);\n if (lineNum == 'bottom') return this.drawBottom(this.drawRight);\n let content = utils.truncate(this.content, 10, this.truncate);\n if (!lineNum) {\n info(`${this.y}-${this.x}: ${this.rowSpan - lineNum}x${this.colSpan} Cell ${content}`);\n } else {\n // debug(`${lineNum}-${this.x}: 1x${this.colSpan} RowSpanCell ${content}`);\n }\n let padLen = Math.max(this.height - this.lines.length, 0);\n let padTop;\n switch (this.vAlign) {\n case 'center':\n padTop = Math.ceil(padLen / 2);\n break;\n case 'bottom':\n padTop = padLen;\n break;\n default:\n padTop = 0;\n }\n if (lineNum < padTop || lineNum >= padTop + this.lines.length) {\n return this.drawEmpty(this.drawRight, spanningCell);\n }\n let forceTruncation = this.lines.length > this.height && lineNum + 1 >= this.height;\n return this.drawLine(lineNum - padTop, this.drawRight, forceTruncation, spanningCell);\n }\n\n /**\n * Renders the top line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawTop(drawRight) {\n let content = [];\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n this.widths.forEach(function (width, index) {\n content.push(this._topLeftChar(index));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], width));\n }, this);\n } else {\n content.push(this._topLeftChar(0));\n content.push(utils.repeat(this.chars[this.y == 0 ? 'top' : 'mid'], this.width));\n }\n if (drawRight) {\n content.push(this.chars[this.y == 0 ? 'topRight' : 'rightMid']);\n }\n return this.wrapWithStyleColors('border', content.join(''));\n }\n\n _topLeftChar(offset) {\n let x = this.x + offset;\n let leftChar;\n if (this.y == 0) {\n leftChar = x == 0 ? 'topLeft' : offset == 0 ? 'topMid' : 'top';\n } else {\n if (x == 0) {\n leftChar = 'leftMid';\n } else {\n leftChar = offset == 0 ? 'midMid' : 'bottomMid';\n if (this.cells) {\n //TODO: cells should always exist - some tests don't fill it in though\n let spanAbove = this.cells[this.y - 1][x] instanceof Cell.ColSpanCell;\n if (spanAbove) {\n leftChar = offset == 0 ? 'topMid' : 'mid';\n }\n if (offset == 0) {\n let i = 1;\n while (this.cells[this.y][x - i] instanceof Cell.ColSpanCell) {\n i++;\n }\n if (this.cells[this.y][x - i] instanceof Cell.RowSpanCell) {\n leftChar = 'leftMid';\n }\n }\n }\n }\n }\n return this.chars[leftChar];\n }\n\n wrapWithStyleColors(styleProperty, content) {\n if (this[styleProperty] && this[styleProperty].length) {\n try {\n let colors = require('@colors/colors/safe');\n for (let i = this[styleProperty].length - 1; i >= 0; i--) {\n colors = colors[this[styleProperty][i]];\n }\n return colors(content);\n } catch (e) {\n return content;\n }\n } else {\n return content;\n }\n }\n\n /**\n * Renders a line of text.\n * @param lineNum - Which line of text to render. This is not necessarily the line within the cell.\n * There may be top-padding above the first line of text.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param forceTruncationSymbol - `true` if the rendered text should end with the truncation symbol even\n * if the text fits. This is used when the cell is vertically truncated. If `false` the text should\n * only include the truncation symbol if the text will not fit horizontally within the cell width.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawLine(lineNum, drawRight, forceTruncationSymbol, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let leftPadding = utils.repeat(' ', this.paddingLeft);\n let right = drawRight ? this.chars['right'] : '';\n let rightPadding = utils.repeat(' ', this.paddingRight);\n let line = this.lines[lineNum];\n let len = this.width - (this.paddingLeft + this.paddingRight);\n if (forceTruncationSymbol) line += this.truncate || '…';\n let content = utils.truncate(line, len, this.truncate);\n content = utils.pad(content, len, ' ', this.hAlign);\n content = leftPadding + content + rightPadding;\n return this.stylizeLine(left, content, right);\n }\n\n stylizeLine(left, content, right) {\n left = this.wrapWithStyleColors('border', left);\n right = this.wrapWithStyleColors('border', right);\n if (this.y === 0) {\n content = this.wrapWithStyleColors('head', content);\n }\n return left + content + right;\n }\n\n /**\n * Renders the bottom line of the cell.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @returns {String}\n */\n drawBottom(drawRight) {\n let left = this.chars[this.x == 0 ? 'bottomLeft' : 'bottomMid'];\n let content = utils.repeat(this.chars.bottom, this.width);\n let right = drawRight ? this.chars['bottomRight'] : '';\n return this.wrapWithStyleColors('border', left + content + right);\n }\n\n /**\n * Renders a blank line of text within the cell. Used for top and/or bottom padding.\n * @param drawRight - true if this method should render the right edge of the cell.\n * @param spanningCell - a number of if being called from a RowSpanCell. (how many rows below). otherwise undefined.\n * @returns {String}\n */\n drawEmpty(drawRight, spanningCell) {\n let left = this.chars[this.x == 0 ? 'left' : 'middle'];\n if (this.x && spanningCell && this.cells) {\n let cellLeft = this.cells[this.y + spanningCell][this.x - 1];\n while (cellLeft instanceof ColSpanCell) {\n cellLeft = this.cells[cellLeft.y][cellLeft.x - 1];\n }\n if (!(cellLeft instanceof RowSpanCell)) {\n left = this.chars['rightMid'];\n }\n }\n let right = drawRight ? this.chars['right'] : '';\n let content = utils.repeat(' ', this.width);\n return this.stylizeLine(left, content, right);\n }\n}\n\nclass ColSpanCell {\n /**\n * A Cell that doesn't do anything. It just draws empty lines.\n * Used as a placeholder in column spanning.\n * @constructor\n */\n constructor() {}\n\n draw(lineNum) {\n if (typeof lineNum === 'number') {\n debug(`${this.y}-${this.x}: 1x1 ColSpanCell`);\n }\n return '';\n }\n\n init() {}\n\n mergeTableOptions() {}\n}\n\nclass RowSpanCell {\n /**\n * A placeholder Cell for a Cell that spans multiple rows.\n * It delegates rendering to the original cell, but adds the appropriate offset.\n * @param originalCell\n * @constructor\n */\n constructor(originalCell) {\n this.originalCell = originalCell;\n }\n\n init(tableOptions) {\n let y = this.y;\n let originalY = this.originalCell.y;\n this.cellOffset = y - originalY;\n this.offset = findDimension(tableOptions.rowHeights, originalY, this.cellOffset);\n }\n\n draw(lineNum) {\n if (lineNum == 'top') {\n return this.originalCell.draw(this.offset, this.cellOffset);\n }\n if (lineNum == 'bottom') {\n return this.originalCell.draw('bottom');\n }\n debug(`${this.y}-${this.x}: 1x${this.colSpan} RowSpanCell for ${this.originalCell.content}`);\n return this.originalCell.draw(this.offset + 1 + lineNum);\n }\n\n mergeTableOptions() {}\n}\n\nfunction firstDefined(...args) {\n return args.filter((v) => v !== undefined && v !== null).shift();\n}\n\n// HELPER FUNCTIONS\nfunction setOption(objA, objB, nameB, targetObj) {\n let nameA = nameB.split('-');\n if (nameA.length > 1) {\n nameA[1] = nameA[1].charAt(0).toUpperCase() + nameA[1].substr(1);\n nameA = nameA.join('');\n targetObj[nameA] = firstDefined(objA[nameA], objA[nameB], objB[nameA], objB[nameB]);\n } else {\n targetObj[nameB] = firstDefined(objA[nameB], objB[nameB]);\n }\n}\n\nfunction findDimension(dimensionTable, startingIndex, span) {\n let ret = dimensionTable[startingIndex];\n for (let i = 1; i < span; i++) {\n ret += 1 + dimensionTable[startingIndex + i];\n }\n return ret;\n}\n\nfunction sumPlusOne(a, b) {\n return a + b + 1;\n}\n\nlet CHAR_NAMES = [\n 'top',\n 'top-mid',\n 'top-left',\n 'top-right',\n 'bottom',\n 'bottom-mid',\n 'bottom-left',\n 'bottom-right',\n 'left',\n 'left-mid',\n 'mid',\n 'mid-mid',\n 'right',\n 'right-mid',\n 'middle',\n];\n\nmodule.exports = Cell;\nmodule.exports.ColSpanCell = ColSpanCell;\nmodule.exports.RowSpanCell = RowSpanCell;\n","const { warn, debug } = require('./debug');\nconst Cell = require('./cell');\nconst { ColSpanCell, RowSpanCell } = Cell;\n\n(function () {\n function next(alloc, col) {\n if (alloc[col] > 0) {\n return next(alloc, col + 1);\n }\n return col;\n }\n\n function layoutTable(table) {\n let alloc = {};\n table.forEach(function (row, rowIndex) {\n let col = 0;\n row.forEach(function (cell) {\n cell.y = rowIndex;\n // Avoid erroneous call to next() on first row\n cell.x = rowIndex ? next(alloc, col) : col;\n const rowSpan = cell.rowSpan || 1;\n const colSpan = cell.colSpan || 1;\n if (rowSpan > 1) {\n for (let cs = 0; cs < colSpan; cs++) {\n alloc[cell.x + cs] = rowSpan;\n }\n }\n col = cell.x + colSpan;\n });\n Object.keys(alloc).forEach((idx) => {\n alloc[idx]--;\n if (alloc[idx] < 1) delete alloc[idx];\n });\n });\n }\n\n function maxWidth(table) {\n let mw = 0;\n table.forEach(function (row) {\n row.forEach(function (cell) {\n mw = Math.max(mw, cell.x + (cell.colSpan || 1));\n });\n });\n return mw;\n }\n\n function maxHeight(table) {\n return table.length;\n }\n\n function cellsConflict(cell1, cell2) {\n let yMin1 = cell1.y;\n let yMax1 = cell1.y - 1 + (cell1.rowSpan || 1);\n let yMin2 = cell2.y;\n let yMax2 = cell2.y - 1 + (cell2.rowSpan || 1);\n let yConflict = !(yMin1 > yMax2 || yMin2 > yMax1);\n\n let xMin1 = cell1.x;\n let xMax1 = cell1.x - 1 + (cell1.colSpan || 1);\n let xMin2 = cell2.x;\n let xMax2 = cell2.x - 1 + (cell2.colSpan || 1);\n let xConflict = !(xMin1 > xMax2 || xMin2 > xMax1);\n\n return yConflict && xConflict;\n }\n\n function conflictExists(rows, x, y) {\n let i_max = Math.min(rows.length - 1, y);\n let cell = { x: x, y: y };\n for (let i = 0; i <= i_max; i++) {\n let row = rows[i];\n for (let j = 0; j < row.length; j++) {\n if (cellsConflict(cell, row[j])) {\n return true;\n }\n }\n }\n return false;\n }\n\n function allBlank(rows, y, xMin, xMax) {\n for (let x = xMin; x < xMax; x++) {\n if (conflictExists(rows, x, y)) {\n return false;\n }\n }\n return true;\n }\n\n function addRowSpanCells(table) {\n table.forEach(function (row, rowIndex) {\n row.forEach(function (cell) {\n for (let i = 1; i < cell.rowSpan; i++) {\n let rowSpanCell = new RowSpanCell(cell);\n rowSpanCell.x = cell.x;\n rowSpanCell.y = cell.y + i;\n rowSpanCell.colSpan = cell.colSpan;\n insertCell(rowSpanCell, table[rowIndex + i]);\n }\n });\n });\n }\n\n function addColSpanCells(cellRows) {\n for (let rowIndex = cellRows.length - 1; rowIndex >= 0; rowIndex--) {\n let cellColumns = cellRows[rowIndex];\n for (let columnIndex = 0; columnIndex < cellColumns.length; columnIndex++) {\n let cell = cellColumns[columnIndex];\n for (let k = 1; k < cell.colSpan; k++) {\n let colSpanCell = new ColSpanCell();\n colSpanCell.x = cell.x + k;\n colSpanCell.y = cell.y;\n cellColumns.splice(columnIndex + 1, 0, colSpanCell);\n }\n }\n }\n }\n\n function insertCell(cell, row) {\n let x = 0;\n while (x < row.length && row[x].x < cell.x) {\n x++;\n }\n row.splice(x, 0, cell);\n }\n\n function fillInTable(table) {\n let h_max = maxHeight(table);\n let w_max = maxWidth(table);\n debug(`Max rows: ${h_max}; Max cols: ${w_max}`);\n for (let y = 0; y < h_max; y++) {\n for (let x = 0; x < w_max; x++) {\n if (!conflictExists(table, x, y)) {\n let opts = { x: x, y: y, colSpan: 1, rowSpan: 1 };\n x++;\n while (x < w_max && !conflictExists(table, x, y)) {\n opts.colSpan++;\n x++;\n }\n let y2 = y + 1;\n while (y2 < h_max && allBlank(table, y2, opts.x, opts.x + opts.colSpan)) {\n opts.rowSpan++;\n y2++;\n }\n let cell = new Cell(opts);\n cell.x = opts.x;\n cell.y = opts.y;\n warn(`Missing cell at ${cell.y}-${cell.x}.`);\n insertCell(cell, table[y]);\n }\n }\n }\n }\n\n function generateCells(rows) {\n return rows.map(function (row) {\n if (!Array.isArray(row)) {\n let key = Object.keys(row)[0];\n row = row[key];\n if (Array.isArray(row)) {\n row = row.slice();\n row.unshift(key);\n } else {\n row = [key, row];\n }\n }\n return row.map(function (cell) {\n return new Cell(cell);\n });\n });\n }\n\n function makeTableLayout(rows) {\n let cellRows = generateCells(rows);\n layoutTable(cellRows);\n fillInTable(cellRows);\n addRowSpanCells(cellRows);\n addColSpanCells(cellRows);\n return cellRows;\n }\n\n module.exports = {\n makeTableLayout: makeTableLayout,\n layoutTable: layoutTable,\n addRowSpanCells: addRowSpanCells,\n maxWidth: maxWidth,\n fillInTable: fillInTable,\n computeWidths: makeComputeWidths('colSpan', 'desiredWidth', 'x', 1),\n computeHeights: makeComputeWidths('rowSpan', 'desiredHeight', 'y', 1),\n };\n})();\n\nfunction makeComputeWidths(colSpan, desiredWidth, x, forcedMin) {\n return function (vals, table) {\n let result = [];\n let spanners = [];\n let auto = {};\n table.forEach(function (row) {\n row.forEach(function (cell) {\n if ((cell[colSpan] || 1) > 1) {\n spanners.push(cell);\n } else {\n result[cell[x]] = Math.max(result[cell[x]] || 0, cell[desiredWidth] || 0, forcedMin);\n }\n });\n });\n\n vals.forEach(function (val, index) {\n if (typeof val === 'number') {\n result[index] = val;\n }\n });\n\n //spanners.forEach(function(cell){\n for (let k = spanners.length - 1; k >= 0; k--) {\n let cell = spanners[k];\n let span = cell[colSpan];\n let col = cell[x];\n let existingWidth = result[col];\n let editableCols = typeof vals[col] === 'number' ? 0 : 1;\n if (typeof existingWidth === 'number') {\n for (let i = 1; i < span; i++) {\n existingWidth += 1 + result[col + i];\n if (typeof vals[col + i] !== 'number') {\n editableCols++;\n }\n }\n } else {\n existingWidth = desiredWidth === 'desiredWidth' ? cell.desiredWidth - 1 : 1;\n if (!auto[col] || auto[col] < existingWidth) {\n auto[col] = existingWidth;\n }\n }\n\n if (cell[desiredWidth] > existingWidth) {\n let i = 0;\n while (editableCols > 0 && cell[desiredWidth] > existingWidth) {\n if (typeof vals[col + i] !== 'number') {\n let dif = Math.round((cell[desiredWidth] - existingWidth) / editableCols);\n existingWidth += dif;\n result[col + i] += dif;\n editableCols--;\n }\n i++;\n }\n }\n }\n\n Object.assign(vals, result, auto);\n for (let j = 0; j < vals.length; j++) {\n vals[j] = Math.max(forcedMin, vals[j] || 0);\n }\n };\n}\n","const debug = require('./debug');\nconst utils = require('./utils');\nconst tableLayout = require('./layout-manager');\n\nclass Table extends Array {\n constructor(opts) {\n super();\n\n const options = utils.mergeOptions(opts);\n Object.defineProperty(this, 'options', {\n value: options,\n enumerable: options.debug,\n });\n\n if (options.debug) {\n switch (typeof options.debug) {\n case 'boolean':\n debug.setDebugLevel(debug.WARN);\n break;\n case 'number':\n debug.setDebugLevel(options.debug);\n break;\n case 'string':\n debug.setDebugLevel(parseInt(options.debug, 10));\n break;\n default:\n debug.setDebugLevel(debug.WARN);\n debug.warn(`Debug option is expected to be boolean, number, or string. Received a ${typeof options.debug}`);\n }\n Object.defineProperty(this, 'messages', {\n get() {\n return debug.debugMessages();\n },\n });\n }\n }\n\n toString() {\n let array = this;\n let headersPresent = this.options.head && this.options.head.length;\n if (headersPresent) {\n array = [this.options.head];\n if (this.length) {\n array.push.apply(array, this);\n }\n } else {\n this.options.style.head = [];\n }\n\n let cells = tableLayout.makeTableLayout(array);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.mergeTableOptions(this.options, cells);\n }, this);\n }, this);\n\n tableLayout.computeWidths(this.options.colWidths, cells);\n tableLayout.computeHeights(this.options.rowHeights, cells);\n\n cells.forEach(function (row) {\n row.forEach(function (cell) {\n cell.init(this.options);\n }, this);\n }, this);\n\n let result = [];\n\n for (let rowIndex = 0; rowIndex < cells.length; rowIndex++) {\n let row = cells[rowIndex];\n let heightOfRow = this.options.rowHeights[rowIndex];\n\n if (rowIndex === 0 || !this.options.style.compact || (rowIndex == 1 && headersPresent)) {\n doDraw(row, 'top', result);\n }\n\n for (let lineNum = 0; lineNum < heightOfRow; lineNum++) {\n doDraw(row, lineNum, result);\n }\n\n if (rowIndex + 1 == cells.length) {\n doDraw(row, 'bottom', result);\n }\n }\n\n return result.join('\\n');\n }\n\n get width() {\n let str = this.toString().split('\\n');\n return str[0].length;\n }\n}\n\nTable.reset = () => debug.reset();\n\nfunction doDraw(row, lineNum, result) {\n let line = [];\n row.forEach(function (cell) {\n line.push(cell.draw(lineNum));\n });\n let str = line.join('');\n if (str.length) result.push(str);\n}\n\nmodule.exports = Table;\n","module.exports = require('./src/table');","/**\n * Fennec CLI Formatting System\n *\n * Central module for all CLI output formatting.\n * Uses picocolors (7KB, zero dependencies) for coloring.\n *\n * Design principles:\n * - Minimal dependencies (picocolors only)\n * - Clean, modern, readable output\n * - Consistent spacing and alignment\n * - Fox-themed (🦊) but not overwhelming\n */\n\nimport { createInterface } from \"node:readline\";\nimport pc from \"picocolors\";\nimport CliTable3 from \"cli-table3\";\n\n// ─── Color Helpers ───────────────────────────────────────────────\n\n/**\n * Custom hex color formatter.\n * picocolors has hex() at runtime but can be undefined on some Node.js\n * versions due to CJS/ESM interop issues. We detect and fall back.\n */\nfunction hex(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\n// Brand colors (runtime-safe, bypass TypeScript limitations)\nconst fennecOrange = hex(\"#FF6432\");\nconst blueAccent = hex(\"#4A90D9\");\nconst redAccent = hex(\"#E94560\");\n\n// ─── Color Palette ───────────────────────────────────────────────\n\nexport const colors = {\n // Brand colors\n primary: fennecOrange,\n secondary: blueAccent,\n accent: redAccent,\n\n // Semantic colors\n success: pc.green,\n error: pc.red,\n warning: pc.yellow,\n info: pc.cyan,\n muted: pc.dim,\n highlight: pc.bold,\n\n // Backgrounds\n bgSuccess: (s: string) => pc.bgGreen(pc.black(` ${s} `)),\n bgError: (s: string) => pc.bgRed(pc.white(` ${s} `)),\n bgWarning: (s: string) => pc.bgYellow(pc.black(` ${s} `)),\n bgInfo: (s: string) => pc.bgCyan(pc.black(` ${s} `)),\n} as const;\n\n// ─── Symbols ─────────────────────────────────────────────────────\n\nexport const symbols = {\n // Status\n active: pc.green(\"●\"),\n inactive: pc.dim(\"○\"),\n error: pc.red(\"✗\"),\n warning: pc.yellow(\"⚠\"),\n success: pc.green(\"✓\"),\n info: pc.cyan(\"ℹ\"),\n pending: pc.yellow(\"◌\"),\n\n // UI\n bullet: pc.dim(\"│\"),\n dot: pc.dim(\"·\"),\n arrow: pc.cyan(\"→\"),\n pointer: fennecOrange(\"▶\"),\n separator: pc.dim(\"─\"),\n\n // Fennec\n fox: \"🦊\",\n ears: \"⏜\",\n} as const;\n\n// ─── Status Badges ───────────────────────────────────────────────\n\nexport type ProcessStatus = \"running\" | \"stopped\" | \"error\" | \"starting\" | \"unknown\";\n\nexport function statusBadge(status: ProcessStatus): string {\n switch (status) {\n case \"running\": return pc.green(\"● running\");\n case \"stopped\": return pc.dim(\"○ stopped\");\n case \"error\": return pc.red(\"✗ error\");\n case \"starting\": return pc.yellow(\"◌ starting\");\n case \"unknown\": return pc.dim(\"? unknown\");\n }\n}\n\nexport type LogLevel = \"error\" | \"warn\" | \"info\" | \"debug\" | \"verbose\";\n\nexport function logLevel(label: string): string {\n const upper = label.toUpperCase().padEnd(5);\n switch (label.toLowerCase()) {\n case \"error\": return pc.bgRed(pc.white(` ${upper} `));\n case \"warn\": return pc.bgYellow(pc.black(` ${upper} `));\n case \"info\": return pc.bgCyan(pc.black(` ${upper} `));\n case \"debug\": return pc.dim(pc.italic(upper));\n case \"verbose\": return pc.dim(pc.italic(upper));\n default: return pc.dim(upper);\n }\n}\n\n// ─── Table Renderer (cli-table3 powered) ────────────────────────\n\nexport interface Column {\n key: string;\n label: string;\n align?: \"left\" | \"right\" | \"center\";\n width?: number;\n format?: (value: unknown) => string;\n}\n\nexport interface Row {\n [key: string]: unknown;\n}\n\nexport function renderTable(columns: Column[], rows: Row[], options?: { padding?: number; compact?: boolean }): string {\n const pad = options?.padding ?? 1;\n\n if (rows.length === 0) {\n return pc.dim(\" (no data)\");\n }\n\n // Build cli-table3 instance\n const table = new CliTable3({\n head: columns.map((c) => pc.bold(c.label)),\n colAligns: columns.map((c) => c.align ?? \"left\"),\n style: {\n \"padding-left\": pad,\n \"padding-right\": pad,\n head: [], // reset default styles; our pc.bold is already applied\n border: [],\n compact: false,\n },\n chars: {\n top: \"─\", \"top-mid\": \"┬\", \"top-left\": \"┌\", \"top-right\": \"┐\",\n \"bottom\": \"─\", \"bottom-mid\": \"┴\", \"bottom-left\": \"└\", \"bottom-right\": \"┘\",\n left: \"│\", \"left-mid\": \"├\", mid: \"─\", \"mid-mid\": \"┼\",\n right: \"│\", \"right-mid\": \"┤\",\n middle: \"│\",\n },\n truncate: \"…\",\n });\n\n for (const row of rows) {\n const values = columns.map((col) => {\n const raw = row[col.key];\n return col.format ? col.format(raw) : String(raw ?? \"-\");\n });\n table.push(values);\n }\n\n const output = table.toString();\n\n // Apply dim to all border lines (head, body, foot)\n const lines = output.split(\"\\n\");\n return lines.map((l) => {\n // Only dim border chars (lines that start with box-drawing chars)\n if (l.length > 0 && (l[0] === \"┌\" || l[0] === \"│\" || l[0] === \"├\" || l[0] === \"└\" || l[0] === \"─\")) {\n // Dim the border characters but keep cell content bright\n return l.replace(/^([│├└┌┐┤┴┬─]+)/, (m) => pc.dim(m));\n }\n return l;\n }).join(\"\\n\");\n}\n\n// ─── Key-Value Display ───────────────────────────────────────────\n\nexport function renderKV(key: string, value: string, options?: { indent?: number; separator?: string }): string {\n const indent = options?.indent ?? 2;\n const sep = options?.separator ?? \":\";\n const pad = \" \".repeat(indent);\n return `${pad}${pc.dim(key + sep)} ${value}`;\n}\n\nexport function renderKVColor(key: string, value: string, color: (s: string) => string = pc.bold): string {\n return ` ${pc.dim(key + \":\")} ${color(value)}`;\n}\n\nexport function renderSection(title: string, content: string): string {\n const line = pc.dim(\"─\".repeat(40));\n return `\\n ${pc.bold(title)}\\n ${line}\\n${content}\\n`;\n}\n\n// ─── Box Renderer ────────────────────────────────────────────────\n\nexport function renderBox(title: string, content: string, options?: {\n width?: number;\n borderColor?: (s: string) => string;\n titleColor?: (s: string) => string;\n}): string {\n const width = options?.width ?? 50;\n const border = options?.borderColor ?? pc.dim;\n const titleColor = options?.titleColor ?? pc.bold;\n\n const lines = content.split(\"\\n\");\n const wrapped = lines.map((l) => {\n const clean = l.replace(/\\x1b\\[[0-9;]*m/g, \"\");\n return l + \" \".repeat(Math.max(0, width - clean.length - 2));\n });\n\n const top = border(`┌─ ${titleColor(title)} ${\"─\".repeat(Math.max(0, width - title.length - 4))}┐`);\n const mid = wrapped.map((l) => border(\"│ \") + l + border(\" │\")).join(\"\\n\");\n const bot = border(`└${\"─\".repeat(width)}┘`);\n\n return `\\n${top}\\n${mid}\\n${bot}\\n`;\n}\n\n// ─── Spinner (minimal, no dependencies) ──────────────────────────\n\nexport interface Spinner {\n update(text: string): void;\n succeed(text: string): void;\n fail(text: string): void;\n warn(text: string): void;\n stop(): void;\n}\n\nexport function createSpinner(text: string): Spinner {\n const frames = [\"⠋\", \"⠙\", \"⠹\", \"⠸\", \"⠼\", \"⠴\", \"⠦\", \"⠧\", \"⠇\", \"⠏\"];\n let i = 0;\n let running = true;\n\n const interval = setInterval(() => {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${text}`);\n i = (i + 1) % frames.length;\n }, 80);\n\n return {\n update(newText: string) {\n if (!running) return;\n process.stdout.write(`\\r${pc.cyan(frames[i])} ${newText}`);\n },\n succeed(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.green(\"✓\")} ${msg}\\n`);\n },\n fail(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.red(\"✗\")} ${msg}\\n`);\n },\n warn(msg: string) {\n running = false;\n clearInterval(interval);\n process.stdout.write(`\\r${pc.yellow(\"⚠\")} ${msg}\\n`);\n },\n stop() {\n running = false;\n clearInterval(interval);\n },\n };\n}\n\n// ─── Interactive Select (enhanced) ───────────────────────────────\n\nexport async function selectPrompt<T extends string>(\n message: string,\n options: { value: T; label: string; description?: string }[],\n): Promise<T | null> {\n console.log(`\\n ${pc.bold(message)}\\n`);\n options.forEach((opt, i) => {\n const num = pc.cyan(` ${i + 1}`);\n console.log(`${num} ${opt.label}`);\n if (opt.description) {\n console.log(` ${pc.dim(opt.description)}`);\n }\n });\n console.log(` ${pc.dim(\"0) Cancel\")}\\n`);\n\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(` ${pc.bold(\"Enter number\")} ${pc.dim(\"(0-\" + options.length + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim());\n });\n });\n\n const num = parseInt(answer, 10);\n if (isNaN(num) || num === 0) return null;\n const selected = options[num - 1];\n if (!selected) {\n console.log(` ${pc.red(\"Invalid selection.\")}`);\n return null;\n }\n return selected.value;\n}\n\nexport async function confirmPrompt(message: string, defaultValue = false): Promise<boolean> {\n const hint = defaultValue ? pc.bold(\"Y\") + pc.dim(\"/n\") : pc.dim(\"y/\") + pc.bold(\"N\");\n const rl = createInterface({ input: process.stdin, output: process.stdout });\n const answer = await new Promise<string>((resolve) => {\n rl.question(`\\n ${message} ${pc.dim(\"(\" + hint + \")\")}: `, (ans) => {\n rl.close();\n resolve(ans.trim().toLowerCase());\n });\n });\n\n if (!answer) return defaultValue;\n return answer === \"y\" || answer === \"yes\";\n}\n\n// ─── Divider ─────────────────────────────────────────────────────\n\nexport function divider(text?: string): string {\n if (text) {\n const len = 50 - text.length - 2;\n const left = Math.floor(len / 2);\n const right = len - left;\n return pc.dim(\"─\".repeat(left) + ` ${text} ` + \"─\".repeat(right));\n }\n return pc.dim(\"─\".repeat(50));\n}\n\n// ─── Timestamp ───────────────────────────────────────────────────\n\nexport function timestamp(date?: Date): string {\n const d = date ?? new Date();\n const time = d.toLocaleTimeString(\"en-US\", { hour12: false });\n return pc.dim(`[${time}]`);\n}\n\n// ─── Command Line ────────────────────────────────────────────────\n\nexport function renderCommand(cmd: string): string {\n return fennecOrange(`$ ${cmd}`);\n}\n\nexport function renderAppName(name: string): string {\n return fennecOrange(pc.bold(name));\n}\n\n// ─── Error Display ───────────────────────────────────────────────\n\nexport function renderError(title: string, details?: string, suggestions?: string[]): string {\n const lines: string[] = [];\n lines.push(`\\n ${pc.bgRed(pc.white(\" ERROR \"))} ${pc.bold(title)}`);\n if (details) {\n lines.push(` ${pc.dim(details)}`);\n }\n if (suggestions && suggestions.length > 0) {\n lines.push(`\\n ${pc.bold(\"Suggestions:\")}`);\n for (const s of suggestions) {\n lines.push(` ${pc.cyan(\"→\")} ${s}`);\n }\n }\n return lines.join(\"\\n\") + \"\\n\";\n}\n\nexport function renderSuccess(message: string): string {\n return ` ${pc.green(\"✓\")} ${message}`;\n}\n\nexport function renderWarning(message: string): string {\n return ` ${pc.yellow(\"⚠\")} ${message}`;\n}\n","/**\n * Fennec CLI Banner\n *\n * Pure-text ASCII art banner using picocolors only.\n * No external font libraries — avoids ESM/CJS interop issues\n * (cfonts uses dynamic require(\"os\") which crashes in ESM bundles).\n *\n * Falls back to a compact fox icon for non-TTY environments.\n * All picocolors-based, no additional dependencies.\n */\n\nimport pc from \"picocolors\";\n\n// ─── Hex color helper ──────────────────────────────────────────\n\nexport function hexColor(color: string): (s: string) => string {\n if (typeof (pc as any).hex === \"function\") {\n return (pc as any).hex(color);\n }\n return (s: string) => s;\n}\n\nconst fennecOrange = hexColor(\"#FF6432\");\nconst fennecGold = hexColor(\"#FFB347\");\n\n// ─── Version ────────────────────────────────────────────────────\n\nexport const VERSION = \"1.12.2\";\n\n// ─── Banner generation ──────────────────────────────────────────\n\nlet cachedBanner: string | null = null;\nlet cachedCompact: string | null = null;\n\n/**\n * Generate the full FENNEC ASCII art banner.\n * Pure-text — no external font library needed.\n * Cached after first call.\n */\nfunction generateBanner(): string {\n if (cachedBanner) return cachedBanner;\n\n const logo = [\n \"███████╗███████╗███╗ ██╗███╗ ██╗███████╗ ██████╗\",\n \"██╔════╝██╔════╝████╗ ██║████╗ ██║██╔════╝██╔════╝\",\n \"█████╗ █████╗ ██╔██╗ ██║██╔██╗ ██║█████╗ ██║ \",\n \"██╔══╝ ██╔══╝ ██║╚██╗██║██║╚██╗██║██╔══╝ ██║ \",\n \"██║ ███████╗██║ ╚████║██║ ╚████║███████╗╚██████╗\",\n \"╚═╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═══╝╚══════╝ ╚═════╝\",\n ];\n\n // Apply gradient: orange → gold\n const gradientSteps = logo.length;\n const bannerStr = logo\n .map((line, i) => {\n const ratio = i / (gradientSteps - 1);\n const color = ratio < 0.5 ? fennecOrange : fennecGold;\n return color(line);\n })\n .join(\"\\n\");\n\n const tagline = pc.dim(\"ears everywhere in your stack.\") + pc.dim(` v${VERSION}`);\n\n cachedBanner = `\\n${bannerStr}\\n ${tagline}\\n`;\n return cachedBanner;\n}\n\n/**\n * Compact banner for non-TTY or quick commands.\n */\nfunction generateCompactBanner(): string {\n if (cachedCompact) return cachedCompact;\n cachedCompact = `${pc.redBright(\" 🦊\")} ${pc.bold(\"Fennec\")} ${pc.dim(`v${VERSION}`)}`;\n return cachedCompact;\n}\n\n// ─── Public API ─────────────────────────────────────────────────\n\n/**\n * Print the full FENNEC banner (ASCII art) to stderr.\n * Uses full logo in TTY mode, compact in non-TTY.\n */\nexport function printBanner(): void {\n if (process.stdout.isTTY) {\n console.error(generateBanner());\n } else {\n console.error(generateCompactBanner());\n }\n}\n\n/**\n * Print a mini/compact banner (fox icon + version only).\n * Suitable for quick commands like ps, status, kill.\n */\nexport function printMiniBanner(): void {\n console.error(generateCompactBanner());\n}\n\n// ─── Exports for reuse ──────────────────────────────────────────\n\nexport const FOX = generateBanner();\nexport const FOX_COMPACT = generateCompactBanner();\n","import pc from \"picocolors\";\nimport { hexColor } from \"./banner.js\";\n\nconst fennecOrange = hexColor(\"#FF6432\");\n\nexport function showHelp(): void {\n const sep = fennecOrange(\"─\".repeat(50));\n\n console.error(`\n\n ${pc.bold(\"Usage:\")} fennec ${pc.dim(\"<command>\")} ${pc.dim(\"[options]\")}\n\n ${sep}\n ${pc.bold(\"Server\")}\n ${sep}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"Start Fennec MCP server (default)\")}\n ${pc.dim(\"--config\")} Path to config file\n ${pc.dim(\"--transport\")} Transport type ${pc.dim(\"(stdio | sse) [default: stdio]\")}\n ${pc.dim(\"--api-port\")} Management API port ${pc.dim(\"[default: 3456]\")}\n\n ${pc.cyan(\"start\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Start an app under Fennec observation (new!)\")}\n ${pc.dim(\"--name\")} App name ${pc.dim(\"(required for tracking)\")}\n ${pc.dim(\"--port\")} Port the app listens on ${pc.dim(\"(optional)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${sep}\n ${pc.bold(\"Process Management\")}\n ${sep}\n\n ${pc.cyan(\"ps\")} ${pc.dim(\"[options]\")} ${pc.dim(\"List Fennec-tracked apps (like PM2)\")}\n ${pc.dim(\"--system, -a\")} Show all system processes\n ${pc.dim(\"--name\")} Filter by app name\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(system processes refresh every 3s)\")}\n\n ${pc.cyan(\"run\")} ${pc.dim(\"<command>\")} ${pc.dim(\"Run a command under Fennec observation\")}\n ${pc.dim(\"--name\")} Process name ${pc.dim(\"(required)\")}\n ${pc.dim(\"--cwd\")} Working directory\n ${pc.dim(\"--restart\")} Auto-restart on crash\n\n ${pc.cyan(\"status\")} ${pc.dim(\"[name]\")} ${pc.dim(\"Show system overview & top processes\")}\n ${pc.dim(\"-w, --watch\")} Watch mode ${pc.dim(\"(refresh every 3s)\")}\n\n ${pc.cyan(\"log\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Show logs for a process\")}\n ${pc.dim(\"--lines\")} Number of lines ${pc.dim(\"[default: 30]\")}\n ${pc.dim(\"-f, --follow\")} Follow mode ${pc.dim(\"(journalctl --follow)\")}\n\n ${pc.cyan(\"kill\")} ${pc.dim(\"<pid|name|all>\")} ${pc.dim(\"Kill process(es) by PID, name, or all\")}\n ${pc.dim(\"--signal\")} Signal to send ${pc.dim(\"[default: SIGTERM]\")}\n ${pc.dim(\"--all\")} Kill all user processes\n\n ${pc.cyan(\"restart\")} ${pc.dim(\"<pid|name>\")} ${pc.dim(\"Kill + show re-run command\")}\n\n ${sep}\n ${pc.bold(\"Observation\")}\n ${sep}\n\n ${pc.cyan(\"attach\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Observe a process by port\")}\n ${pc.dim(\"--name\")} Process name\n\n ${pc.cyan(\"pipe\")} ${pc.dim(\"Pipe stdin to log watcher\")}\n ${pc.dim(\"--name\")} Watcher name ${pc.dim(\"(required)\")}\n\n ${pc.cyan(\"watch\")} ${pc.dim(\"Watch a log file\")}\n ${pc.dim(\"--file\")} File path ${pc.dim(\"(required)\")}\n ${pc.dim(\"--name\")} Watcher name\n\n ${pc.cyan(\"attach-pid\")} ${pc.dim(\"<pid>\")} ${pc.dim(\"Attach to process by PID\")}\n ${pc.cyan(\"attach-port\")} ${pc.dim(\"<port>\")} ${pc.dim(\"Attach to process by port\")}\n\n ${sep}\n ${pc.bold(\"Configuration\")}\n ${sep}\n\n ${pc.cyan(\"init\")} ${pc.dim(\"Generate fennec.config.yaml\")}\n ${pc.cyan(\"setup\")} ${pc.dim(\"Configure MCP client\")}\n ${pc.cyan(\"install-browsers\")} ${pc.dim(\"Install Playwright browser engines\")}\n ${pc.cyan(\"sessions\")} ${pc.dim(\"List saved auth sessions\")}\n\n ${sep}\n ${pc.bold(\"Other\")}\n ${sep}\n\n ${pc.cyan(\"help\")} ${pc.dim(\"Show this help message\")}\n ${pc.cyan(\"version\")} ${pc.dim(\"Show version\")}\n\n ${pc.dim(\"─\".repeat(50))}\n\n ${pc.dim(\"Learn more:\")} ${pc.cyan(\"https://github.com/plumpslabs/fennec\")}\n `);\n}\n","export async function pipeCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : \"pipe\";\n\n if (!name) {\n console.error(\"Error: --name is required for pipe command\");\n process.exit(1);\n }\n\n const { PipeWatcher } = await import(\"@plumpslabs/fennec-core\");\n const watcher = new PipeWatcher();\n const { write } = watcher.createPipe(name);\n\n console.error(`Pipe watcher '${name}' active. Forwarding stdin...`);\n\n const onDrain = () => {\n process.stdin.resume();\n };\n process.stdout.on(\"drain\", onDrain);\n\n process.stdin.setEncoding(\"utf-8\");\n process.stdin.on(\"data\", (data: string) => {\n try {\n write(data);\n const canContinue = process.stdout.write(data);\n if (!canContinue) {\n process.stdin.pause();\n }\n } catch (error) {\n console.error(\"Pipe error:\", error);\n }\n });\n\n process.stdin.on(\"error\", (error) => {\n console.error(\"Pipe stdin error:\", error);\n });\n\n process.stdin.on(\"end\", () => {\n console.error(`Pipe watcher '${name}' ended.`);\n watcher.cleanup();\n });\n\n const shutdown = () => {\n watcher.cleanup();\n process.stdout.removeListener(\"drain\", onDrain);\n process.stdin.removeAllListeners();\n process.exit(0);\n };\n process.on(\"SIGINT\", shutdown);\n process.on(\"SIGTERM\", shutdown);\n}\n","export async function attachPidCommand(args: string[]): Promise<void> {\n const pid = parseInt(args[0]!, 10);\n if (isNaN(pid)) {\n console.error(\"Error: valid PID is required\");\n process.exit(1);\n }\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPid(pid);\n if (info) {\n console.log(`Attached to PID ${pid}${info.command ? ` (${info.command})` : \"\"}`);\n if (info.port) console.log(` Port: ${info.port}`);\n } else {\n console.error(`Could not find process with PID ${pid}`);\n process.exit(1);\n }\n}\n","export async function attachPortCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) {\n console.error(\"Error: valid port number is required\");\n process.exit(1);\n }\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n console.log(`Found process on port ${port}: PID ${info.pid}${info.command ? ` (${info.command})` : \"\"}`);\n } else {\n console.error(`No process found listening on port ${port}`);\n process.exit(1);\n }\n}\n","import { existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport async function watchCommand(args: string[]): Promise<void> {\n const fileIndex = args.indexOf(\"--file\");\n const filePath = fileIndex !== -1 ? args[fileIndex + 1] : undefined;\n if (!filePath) {\n console.error(\"Error: --file is required for watch command\");\n process.exit(1);\n }\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const resolvedPath = resolve(filePath);\n if (!existsSync(resolvedPath)) {\n console.error(`Error: File not found: ${resolvedPath}`);\n process.exit(1);\n }\n const { LogWatcher } = await import(\"@plumpslabs/fennec-core\");\n const watcher = new LogWatcher();\n const watcherId = watcher.watchFile(resolvedPath, name);\n console.log(`Watching file: ${resolvedPath}`);\n console.log(`Watcher ID: ${watcherId}`);\n process.stdin.resume();\n}\n","/**\n * Command: start / run — Spawn a process as a detached daemon.\n * Includes auto-resurrect: on server start, re-spawns tracked processes\n * that died since last session (like PM2 resurrect).\n */\nimport { createWriteStream, readFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { FennecServer } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderAppName, renderError, divider, createSpinner } from \"../utils/format.js\";\nimport { readTracked, addTracked, removeTracked, rotateLogFile } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\nimport type { TrackedProcess } from \"./tracker.js\";\n\n// Re-export from tracker for backward compat\nexport type { TrackedProcess };\n\nexport async function startServer(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting Fennec MCP server...\")}\\n`);\n\n const configIndex = args.indexOf(\"--config\");\n const configPath = configIndex !== -1 ? args[configIndex + 1] : undefined;\n\n try {\n const server = new FennecServer(configPath);\n\n // 🔥 Auto-resurrect: re-spawn tracked processes that died since last session\n await resurrectTracked();\n\n await server.start();\n\n console.error(`\\n ${pc.green(\"✓\")} ${pc.bold(\"Fennec server is running\")}`);\n console.error(` ${renderKV(\"Transport\", \"stdio\")}`);\n console.error(` ${renderKV(\"AI Agent\", \"Connect via MCP protocol\")}`);\n console.error(`\\n ${pc.dim(\"Press Ctrl+C to stop\")}\\n`);\n } catch (error) {\n console.error(renderError(\"Failed to start server\", String(error)));\n process.exit(1);\n }\n}\n\nexport async function startCommand(args: string[]): Promise<void> {\n printBanner();\n console.error(` ${pc.dim(\"Starting app...\")}\\n`);\n await runCommand(args);\n}\n\nexport async function runCommand(args: string[]): Promise<void> {\n const nameIndex = args.indexOf(\"--name\");\n const name = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const portIndex = args.indexOf(\"--port\");\n const port = portIndex !== -1 ? parseInt(args[portIndex + 1]!, 10) : undefined;\n const cwdIndex = args.indexOf(\"--cwd\");\n const cwd = cwdIndex !== -1 ? args[cwdIndex + 1] : undefined;\n\n const stopFlags = [nameIndex, portIndex, cwdIndex].filter((i) => i !== -1) as number[];\n const cmdEnd = Math.min(...stopFlags, Infinity);\n const cmdParts = args.slice(0, cmdEnd);\n const cmd = cmdParts.join(\" \");\n\n if (!cmd) {\n console.error(renderError(\"Missing command\", \"Usage: fennec start|run <command> --name <name> [--port <port>] [--cwd <dir>]\"));\n process.exit(1);\n }\n\n const appName = name ?? cmdParts[0] ?? \"app\";\n\n // Duplicate Prevention\n const tracked = readTracked();\n const existing = tracked.find((t) => t.name === appName);\n if (existing && isProcessRunning(existing.pid)) {\n console.error();\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(appName)} ${pc.dim(`is already running (PID: ${existing.pid})`)}`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n process.exit(0);\n }\n\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${appName}.log`);\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Starting\")} ${renderAppName(appName)} ${pc.dim(\"(daemon)\")}\\n`);\n console.error(` ${renderKV(\"Command\", cmd)}`);\n if (port) console.error(` ${renderKV(\"Port\", String(port))}`);\n if (cwd) console.error(` ${renderKV(\"Directory\", cwd)}`);\n console.error(` ${divider()}`);\n\n try {\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n const pid = child.pid ?? 0;\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n\n child.unref();\n\n addTracked({\n name: appName,\n pid,\n command: cmd,\n port,\n cwd,\n startedAt: new Date().toISOString(),\n });\n\n console.error(`\\n ${pc.green(\"●\")} ${pc.bold(appName)} ${pc.dim(`started (PID: ${pid})`)}${port ? pc.dim(` :${port}`) : \"\"}\\n`);\n\n await new Promise((r) => setTimeout(r, 1500));\n\n try {\n const initialLogs = readFileSync(logFilePath, \"utf-8\")\n .split(\"\\n\")\n .filter(Boolean)\n .slice(-8);\n if (initialLogs.length > 0) {\n for (const line of initialLogs) {\n const truncated = line.length > 150 ? line.slice(0, 150) + \"\\u2026\" : line;\n if (line.toLowerCase().includes(\"error\")) {\n console.error(` ${pc.dim(\"│\")} ${pc.red(truncated)}`);\n } else if (line.toLowerCase().includes(\"warn\")) {\n console.error(` ${pc.dim(\"│\")} ${pc.yellow(truncated)}`);\n } else {\n console.error(` ${pc.dim(\"│\")} ${truncated}`);\n }\n }\n }\n } catch { /* initial log peek is best-effort */ }\n\n console.error();\n console.error(` ${pc.green(\"✓\")} ${pc.bold(appName)} running in background`);\n console.error(` ${renderKV(\"Logs\", pc.cyan(`fennec log ${appName}`))}`);\n console.error(` ${renderKV(\"Status\", pc.cyan(\"fennec ps\"))}`);\n console.error(` ${renderKV(\"Stop\", pc.cyan(`fennec kill ${appName}`))}`);\n console.error();\n } catch (error) {\n console.error(renderError(`Failed to start ${appName}`, String(error)));\n process.exit(1);\n }\n}\n\n/**\n * 🔥 PM2-like resurrect: Re-spawn tracked processes that died.\n * Called automatically during `fennec start` (server mode).\n * Reads tracked.json, checks each PID, re-spawns stopped ones.\n */\nexport async function resurrectTracked(): Promise<void> {\n const tracked = readTracked();\n if (tracked.length === 0) return;\n\n const dead = tracked.filter((t) => !isProcessRunning(t.pid));\n if (dead.length === 0) return;\n\n const spinner = createSpinner(`Resurrecting ${dead.length} stopped process(es)...`);\n let resurrected = 0;\n let failed = 0;\n\n for (const proc of dead) {\n // Only resurrect if the process has a command (not just a PID reference)\n if (!proc.command) {\n removeTracked(proc.name);\n continue;\n }\n\n try {\n const cmdParts = proc.command.split(/\\s+/);\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${proc.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: proc.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Update PID in tracked.json\n addTracked({\n name: proc.name,\n pid: child.pid ?? 0,\n command: proc.command,\n port: proc.port,\n cwd: proc.cwd,\n startedAt: new Date().toISOString(),\n });\n\n resurrected++;\n } catch {\n failed++;\n }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n\n if (resurrected > 0) {\n console.error(` ${pc.green(\"●\")} ${pc.bold(`Resurrected ${resurrected} process(es)`)}`);\n }\n if (failed > 0) {\n console.error(` ${pc.red(\"●\")} ${pc.bold(`${failed} process(es) failed to resurrect`)}`);\n }\n}\n","/**\n * Process Tracker — Shared state for managing ~/.fennec/tracked.json\n * Extracted from index.ts to be reusable across all CLI command files.\n */\nimport { existsSync, writeFileSync, readFileSync, mkdirSync, renameSync, statSync, rmSync } from \"node:fs\";\nimport { resolve, dirname, basename } from \"node:path\";\nimport { homedir } from \"node:os\";\n\nexport interface TrackedProcess {\n name: string;\n pid: number;\n command: string;\n port?: number;\n cwd?: string;\n startedAt: string;\n}\n\nexport function getTrackedPath(): string {\n const dir = process.env.FENNEC_DATA_DIR\n ? resolve(process.env.FENNEC_DATA_DIR)\n : resolve(homedir(), \".fennec\");\n return resolve(dir, \"tracked.json\");\n}\n\nexport function readTracked(): TrackedProcess[] {\n try {\n const path = getTrackedPath();\n if (!existsSync(path)) return [];\n return JSON.parse(readFileSync(path, \"utf-8\"));\n } catch {\n return [];\n }\n}\n\nexport function saveTracked(processes: TrackedProcess[]): void {\n try {\n const path = getTrackedPath();\n mkdirSync(dirname(path), { recursive: true });\n writeFileSync(path, JSON.stringify(processes, null, 2), \"utf-8\");\n } catch (err) {\n console.error(\"[fennec] Failed to save tracked processes:\", err instanceof Error ? err.message : String(err));\n }\n}\n\nexport function addTracked(proc: TrackedProcess): void {\n const tracked = readTracked();\n const filtered = tracked.filter((t) => t.name !== proc.name);\n filtered.push(proc);\n saveTracked(filtered);\n}\n\nexport function removeTracked(name: string): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.name !== name));\n}\n\nexport function removeTrackedByPid(pid: number): void {\n const tracked = readTracked();\n saveTracked(tracked.filter((t) => t.pid !== pid));\n}\n\nexport function formatUptime(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n if (seconds < 3600) return `${Math.floor(seconds / 60)}m ${seconds % 60}s`;\n const h = Math.floor(seconds / 3600);\n const m = Math.floor((seconds % 3600) / 60);\n if (h >= 24) {\n const d = Math.floor(h / 24);\n return `${d}d ${h % 24}h ${m}m`;\n }\n return `${h}h ${m}m`;\n}\n\n// ─── Log Rotation ─────────────────────────────────────────────────\n// Rotates log files when they exceed maxSize (default: 10MB).\n// Keeps up to maxFiles rotated copies (default: 3) then deletes oldest.\n\nconst DEFAULT_MAX_LOG_SIZE = 10 * 1024 * 1024; // 10MB\nconst DEFAULT_MAX_LOG_FILES = 3;\n\n/**\n * Check if a log file needs rotation and rotate if necessary.\n * Returns true if rotation was performed.\n */\nexport function rotateLogFile(\n filePath: string,\n maxSize = DEFAULT_MAX_LOG_SIZE,\n maxFiles = DEFAULT_MAX_LOG_FILES,\n): boolean {\n try {\n if (!existsSync(filePath)) return false;\n const stats = statSync(filePath);\n if (stats.size < maxSize) return false;\n\n // Rotate: .log -> .log.1 -> .log.2 -> .log.3 (delete oldest)\n const dir = dirname(filePath);\n const base = basename(filePath);\n\n // Delete oldest if exists\n const oldestPath = resolve(dir, `${base}.${maxFiles}`);\n if (existsSync(oldestPath)) {\n try { rmSync(oldestPath); } catch { /* best-effort */ }\n }\n\n // Shift existing rotations\n for (let i = maxFiles - 1; i >= 1; i--) {\n const src = resolve(dir, `${base}.${i}`);\n const dst = resolve(dir, `${base}.${i + 1}`);\n if (existsSync(src)) {\n try { renameSync(src, dst); } catch { /* best-effort */ }\n }\n }\n\n // Rotate current file\n try {\n renameSync(filePath, resolve(dir, `${base}.1`));\n } catch { /* best-effort */ }\n\n return true;\n } catch (err) {\n console.error(\"[fennec] Log rotation failed:\", err instanceof Error ? err.message : String(err));\n return false;\n }\n}\n\n\n","/**\n * System Process Scanner\n *\n * Reads real system processes from /proc (Linux) or ps (macOS/BSD).\n * Returns process info: pid, name, cpu%, mem%, status, command, ports.\n *\n * Design principles:\n * - Zero external dependencies (uses Node.js built-ins only)\n * - Cross-platform (Linux via /proc, macOS/Windows via exec)\n * - Safe errors (never throws, returns empty array on failure)\n */\n\nimport { readdirSync, readFileSync, existsSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { cpus } from \"node:os\";\n\n// ─── Types ───────────────────────────────────────────────────────\n\nexport interface SystemProcessInfo {\n pid: number;\n name: string;\n command: string;\n cpuPercent: number;\n memPercent: number;\n memRss: number; // Resident Set Size in KB\n state: string; // R=Running, S=Sleeping, Z=Zombie, etc.\n startedAt: string | null;\n ports: number[]; // Listening ports (if any)\n isUserProcess: boolean; // true if owned by current user\n}\n\nexport interface SystemProcessFilter {\n name?: string;\n pid?: number;\n port?: number;\n userOnly?: boolean;\n sortBy?: \"cpu\" | \"mem\" | \"pid\" | \"name\";\n limit?: number;\n}\n\n// ─── Linux /proc Scanner ─────────────────────────────────────────\n\nfunction readProcProcesses(): SystemProcessInfo[] {\n const processes: SystemProcessInfo[] = [];\n const currentUid = process.getuid?.();\n const totalMemKb = readTotalMem();\n\n try {\n const pids = readdirSync(\"/proc\").filter((d) => /^\\d+$/.test(d));\n\n for (const pidStr of pids) {\n try {\n const pid = parseInt(pidStr, 10);\n const proc = readSingleProcProcess(pid, currentUid, totalMemKb);\n if (proc) processes.push(proc);\n } catch {\n // Process might have exited between readdir and stat\n continue;\n }\n }\n } catch {\n // /proc not available (not Linux)\n return [];\n }\n\n return processes;\n}\n\nfunction readSingleProcProcess(\n pid: number,\n currentUid: number | undefined,\n totalMemKb: number,\n): SystemProcessInfo | null {\n const statPath = `/proc/${pid}/stat`;\n const statusPath = `/proc/${pid}/status`;\n const cmdlinePath = `/proc/${pid}/cmdline`;\n\n if (!existsSync(statPath)) return null;\n\n // Read /proc/[pid]/status for name, uid, memory\n const statusText = readSafe(statusPath);\n if (!statusText) return null;\n\n const nameMatch = statusText.match(/Name:\\s+(.+)/);\n const uidMatch = statusText.match(/Uid:\\s+(\\d+)/);\n const vmRssMatch = statusText.match(/VmRSS:\\s+(\\d+)/);\n const stateMatch = statusText.match(/State:\\s+(\\S)/);\n const name = nameMatch?.[1] ?? `pid_${pid}`;\n const uid = uidMatch ? parseInt(uidMatch[1]!, 10) : undefined;\n const vmRss = vmRssMatch ? parseInt(vmRssMatch[1]!, 10) : 0;\n const state = stateMatch?.[1] ?? \"?\";\n\n const isUserProcess = uid !== undefined && currentUid !== undefined && uid === currentUid;\n\n // Read /proc/[pid]/stat for CPU ticks\n const statText = readSafe(statPath);\n let cpuPercent = 0;\n let startedAt: string | null = null;\n\n if (statText) {\n // Parse /proc/[pid]/stat format\n // Format: pid (comm) state ppid pgrp session tty_nr tpgid flags minflt cminflt majflt\n // cmajflt utime stime cutime cstime priority nice num_threads itrealvalue starttime\n const parenEnd = statText.lastIndexOf(\")\");\n if (parenEnd > 0) {\n const fields = statText.slice(parenEnd + 2).split(/\\s+/);\n const utime = parseInt(fields[11] ?? \"0\", 10); // User mode jiffies\n const stime = parseInt(fields[12] ?? \"0\", 10); // Kernel mode jiffies\n const starttime = parseInt(fields[19] ?? \"0\", 10); // Start time in jiffies\n\n // CPU usage = (utime + stime) / uptime_seconds / Hz\n const hertz = 100; // CLK_TCK, typically 100\n const uptimeSeconds = readUptime();\n const totalJiffies = utime + stime;\n\n if (uptimeSeconds > 0) {\n const elapsedJiffies = uptimeSeconds * hertz;\n const processJiffies = totalJiffies;\n cpuPercent = Math.min(100, (processJiffies / Math.max(1, elapsedJiffies)) * 100 * cpus().length);\n }\n\n // Boot time for startedAt\n startedAt = formatStartTime(starttime, uptimeSeconds, hertz);\n }\n }\n\n // Read /proc/[pid]/cmdline for full command\n const cmdlineRaw = readSafe(cmdlinePath);\n const command = cmdlineRaw\n ? cmdlineRaw.split(\"\\0\").filter(Boolean).join(\" \")\n : name;\n\n // Read listening ports\n const ports = detectListeningPorts(pid);\n\n const memPercent = totalMemKb > 0 ? (vmRss / totalMemKb) * 100 : 0;\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpuPercent * 10) / 10,\n memPercent: Math.round(memPercent * 10) / 10,\n memRss: vmRss,\n state,\n startedAt,\n ports,\n isUserProcess,\n };\n}\n\n// ─── macOS / BSD ps fallback ─────────────────────────────────────\n\nfunction runPsProcesses(): SystemProcessInfo[] {\n try {\n const output = execSync(\n \"ps axo pid,comm,pcpu,pmem,rss,state,etime,user --sort=-pcpu 2>/dev/null | head -200\",\n { encoding: \"utf-8\", timeout: 5000 },\n );\n\n const lines = output.trim().split(\"\\n\").slice(1); // Skip header\n const currentUser = execSync(\"whoami\", { encoding: \"utf-8\", timeout: 1000 }).trim();\n\n return lines.map((line) => {\n const parts = line.trim().split(/\\s+/);\n const pid = parseInt(parts[0] ?? \"0\", 10);\n const name = parts[1] ?? \"\";\n const cpu = parseFloat(parts[2] ?? \"0\");\n const mem = parseFloat(parts[3] ?? \"0\");\n const rss = parseInt(parts[4] ?? \"0\", 10);\n const state = parts[5] ?? \"?\";\n const elapsed = parts[6] ?? \"\";\n const user = parts[7] ?? \"\";\n const command = parts.slice(1).join(\" \");\n\n return {\n pid,\n name,\n command: command.length > 200 ? command.slice(0, 200) + \"…\" : command,\n cpuPercent: Math.round(cpu * 10) / 10,\n memPercent: Math.round(mem * 10) / 10,\n memRss: rss,\n state: mapBsdState(state),\n startedAt: elapsed || null,\n ports: [] as number[],\n isUserProcess: user === currentUser,\n };\n });\n } catch {\n return [];\n }\n}\n\nfunction mapBsdState(s: string): string {\n switch (s) {\n case \"R\": return \"R\";\n case \"S\": return \"S\";\n case \"Z\": return \"Z\";\n case \"T\": return \"T\";\n case \"I\": return \"S\";\n default: return s;\n }\n}\n\n// ─── Port Scanner ────────────────────────────────────────────────\n// NOTE: Per-process port detection via /proc/[pid]/net/tcp is unreliable\n// because it shows network namespace ports, not per-process ports.\n// Fennec tracks ports via the --port flag when starting apps.\n// We keep the field for API compatibility but always return empty.\n\nfunction detectListeningPorts(_pid: number): number[] {\n return [];\n}\n\n// ─── Helpers ─────────────────────────────────────────────────────\n\nfunction readSafe(path: string): string | null {\n try {\n return readFileSync(path, \"utf-8\");\n } catch {\n return null;\n }\n}\n\nfunction readTotalMem(): number {\n try {\n const memInfo = readSafe(\"/proc/meminfo\");\n if (memInfo) {\n const match = memInfo.match(/MemTotal:\\s+(\\d+)/);\n if (match) return parseInt(match[1]!, 10);\n }\n } catch {\n // ignore\n }\n return 16_000_000; // Default ~16GB\n}\n\nfunction readUptime(): number {\n try {\n const data = readSafe(\"/proc/uptime\");\n if (data) {\n return parseFloat(data.split(/\\s+/)[0] ?? \"0\");\n }\n } catch {\n // ignore\n }\n return 0;\n}\n\nfunction formatStartTime(starttime: number, uptimeSeconds: number, hertz: number): string | null {\n try {\n const bootTime = Date.now() / 1000 - uptimeSeconds;\n const processStart = bootTime + starttime / hertz;\n return new Date(processStart * 1000).toISOString();\n } catch {\n return null;\n }\n}\n\n// ─── Public API ──────────────────────────────────────────────────\n\n/**\n * Get all system processes.\n * Uses /proc on Linux, falls back to `ps` on macOS/BSD.\n */\nexport function getSystemProcesses(filter?: SystemProcessFilter): SystemProcessInfo[] {\n let processes: SystemProcessInfo[];\n\n // Try /proc first (Linux), fall back to ps (macOS/BSD)\n if (existsSync(\"/proc\")) {\n processes = readProcProcesses();\n } else {\n processes = runPsProcesses();\n }\n\n // Apply filters\n if (filter) {\n if (filter.userOnly) {\n processes = processes.filter((p) => p.isUserProcess);\n }\n if (filter.name) {\n const nameLower = filter.name.toLowerCase();\n processes = processes.filter(\n (p) => p.name.toLowerCase().includes(nameLower) || p.command.toLowerCase().includes(nameLower),\n );\n }\n if (filter.pid) {\n processes = processes.filter((p) => p.pid === filter.pid);\n }\n if (filter.port) {\n processes = processes.filter((p) => p.ports.includes(filter.port!));\n }\n\n // Sort\n if (filter.sortBy) {\n processes.sort((a, b) => {\n switch (filter.sortBy) {\n case \"cpu\": return b.cpuPercent - a.cpuPercent;\n case \"mem\": return b.memPercent - a.memPercent;\n case \"pid\": return a.pid - b.pid;\n case \"name\": return a.name.localeCompare(b.name);\n default: return b.cpuPercent - a.cpuPercent;\n }\n });\n }\n\n // Limit\n if (filter.limit && filter.limit > 0) {\n processes = processes.slice(0, filter.limit);\n }\n }\n\n return processes;\n}\n\n/**\n * Get a single process by PID. Returns null if not found.\n */\nexport function getProcessByPid(pid: number): SystemProcessInfo | null {\n const processes = getSystemProcesses({ pid });\n return processes[0] ?? null;\n}\n\n/**\n * Kill a process by PID. Returns true if successful.\n */\nexport function killProcess(pid: number, signal: NodeJS.Signals = \"SIGTERM\"): boolean {\n try {\n process.kill(pid, signal);\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Check if a process is running.\n */\nexport function isProcessRunning(pid: number): boolean {\n try {\n process.kill(pid, 0); // Signal 0 checks existence without killing\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get human-readable process state.\n */\nexport function formatProcessState(state: string): string {\n switch (state) {\n case \"R\": return \"Running\";\n case \"S\": return \"Sleeping\";\n case \"D\": return \"Disk Sleep\";\n case \"Z\": return \"Zombie\";\n case \"T\": return \"Stopped\";\n case \"t\": return \"Tracing\";\n case \"X\": return \"Dead\";\n case \"I\": return \"Idle\";\n default: return state;\n }\n}\n","/**\n * Command: ps, status — List tracked processes and system overview.\n */\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderTable, renderError, renderCommand, createSpinner, timestamp, type Column, type Row } from \"../utils/format.js\";\nimport { getSystemProcesses, isProcessRunning, formatProcessState } from \"../utils/system-process.js\";\nimport { readTracked, formatUptime } from \"./tracker.js\";\n\nexport async function psCommand(args: string[]): Promise<void> {\n const watchFlag = args.includes(\"-w\") || args.includes(\"--watch\");\n const systemFlag = args.includes(\"--system\") || args.includes(\"-a\") || args.includes(\"--all\");\n const nameFilter = args.includes(\"--name\") ? args[args.indexOf(\"--name\") + 1] : undefined;\n const sortBy = args.includes(\"--sort\")\n ? (args[args.indexOf(\"--sort\") + 1] as \"cpu\" | \"mem\" | \"pid\" | \"name\")\n : \"name\";\n\n if (watchFlag && systemFlag) {\n await watchSystemProcesses(sortBy, 15);\n return;\n }\n\n if (systemFlag) {\n const spinner = createSpinner(\"Scanning system processes...\");\n try {\n const processes = getSystemProcesses({ name: nameFilter, userOnly: true, sortBy, limit: 30 });\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n if (processes.length === 0) {\n console.error(`\\n ${pc.dim(\"No system processes found.\")}\\n`);\n return;\n }\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"State\", format: (v) => { const s = String(v); if (s === \"R\" || s === \"Running\") return pc.green(s); if (s === \"Z\" || s === \"Zombie\") return pc.red(s); if (s === \"S\" || s === \"Sleeping\") return pc.cyan(s); return pc.dim(s); } },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: formatProcessState(p.state) }));\n console.error(`\\n ${symbols.fox} ${pc.bold(\"System Processes\")} ${pc.dim(`(top ${processes.length} by ${sortBy})`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error();\n } catch (error) {\n spinner.fail(\"Failed to scan processes\");\n console.error(renderError(\"Process scan failed\", String(error)));\n }\n return;\n }\n\n const tracked = readTracked();\n if (tracked.length === 0) {\n console.error(`\\n ${pc.dim(\"No tracked processes.\")}`);\n console.error(` ${pc.dim(\"Start an app with:\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n return;\n }\n\n const columns: Column[] = [\n { key: \"name\", label: \"App\", format: (v) => pc.bold(String(v)) },\n { key: \"pid\", label: \"PID\", align: \"right\" },\n { key: \"status\", label: \"Status\", format: (v) => { const s = v as string; return s === \"running\" ? pc.green(\"● running\") : pc.red(\"○ stopped\"); } },\n { key: \"port\", label: \"Port\", format: (v) => { const p = v as number | null; return p ? pc.yellow(`:${p}`) : pc.dim(\"-\"); } },\n { key: \"command\", label: \"Command\", format: (v) => { const c = String(v); return c.length > 50 ? c.slice(0, 50) + \"…\" : c; } },\n { key: \"uptime\", label: \"Uptime\", format: (v) => pc.dim(String(v)) },\n ];\n\n const rows: Row[] = tracked.map((t) => {\n const running = isProcessRunning(t.pid);\n const uptime = running ? formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000)) : \"-\";\n return { name: t.name, pid: running ? String(t.pid) : pc.dim(String(t.pid)), status: running ? \"running\" : \"stopped\", port: t.port ?? null, command: t.command, uptime };\n });\n\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec start <command> --name <name> --port <port>\")} ${pc.dim(\"to add more apps.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec log <name>\")} ${pc.dim(\"to view logs.\")}`);\n console.error(` ${pc.dim(\"Use\")} ${pc.cyan(\"fennec kill <name>\")} ${pc.dim(\"to stop an app.\")}`);\n console.error();\n}\n\nexport async function statusCommand(_args: string[]): Promise<void> {\n const watchFlag = _args.includes(\"-w\") || _args.includes(\"--watch\");\n const tracked = readTracked();\n const topSystem = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 5 });\n const totalUserProcs = getSystemProcesses({ userOnly: true }).length;\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Status\")}\\n`);\n\n if (tracked.length > 0) {\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n console.error(` ${pc.bold(\"Managed Apps\")} ${pc.dim(`(${runningCount}/${tracked.length} running)`)}\\n`);\n for (const t of tracked) {\n const running = isProcessRunning(t.pid);\n const statusIcon = running ? pc.green(\"●\") : pc.red(\"○\");\n const portStr = t.port ? ` ${pc.yellow(`:${t.port}`)}` : \"\";\n const uptime = running ? pc.dim(formatUptime(Math.floor((Date.now() - new Date(t.startedAt).getTime()) / 1000))) : pc.red(\"stopped\");\n console.error(` ${statusIcon} ${pc.bold(t.name)}${portStr} ${pc.dim(`(PID ${t.pid})`)} — ${uptime}`);\n }\n console.error();\n } else {\n console.error(` ${pc.dim(\"No managed apps.\")} ${pc.cyan(\"fennec start <command> --name <name>\")}\\n`);\n }\n\n console.error(` ${pc.bold(\"System\")} ${pc.dim(`(${totalUserProcs} user processes)`)}`);\n for (const p of topSystem) {\n const cpuStr = p.cpuPercent > 10 ? pc.red(`${p.cpuPercent}%`) : p.cpuPercent > 5 ? pc.yellow(`${p.cpuPercent}%`) : pc.dim(`${p.cpuPercent}%`);\n const memStr = p.memPercent > 10 ? pc.red(`${p.memPercent}%`) : p.memPercent > 5 ? pc.yellow(`${p.memPercent}%`) : pc.dim(`${p.memPercent}%`);\n console.error(` ${pc.dim(`PID ${p.pid}`)} ${pc.bold(p.name)} — CPU: ${cpuStr} MEM: ${memStr}`);\n }\n\n if (watchFlag) await watchSystemProcesses(\"cpu\", 15);\n console.error();\n}\n\nasync function watchSystemProcesses(sortBy: string, limit: number): Promise<void> {\n console.error(`\\n ${pc.bold(\"Watching system processes\")} ${pc.dim(\"(Ctrl+C to stop, refreshes every 3s)\")}\\n`);\n\n const render = () => {\n const processes = getSystemProcesses({ userOnly: true, sortBy: sortBy as \"cpu\" | \"mem\" | \"pid\" | \"name\", limit });\n const columns: Column[] = [\n { key: \"pid\", label: \"PID\", align: \"right\", format: (v) => pc.dim(String(v).padStart(6)) },\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"cpu\", label: \"CPU%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"mem\", label: \"MEM%\", align: \"right\", format: (v) => { const n = v as number; return n > 10 ? pc.red(String(n)) : n > 5 ? pc.yellow(String(n)) : pc.dim(String(n)); } },\n { key: \"state\", label: \"S\", align: \"center\" },\n ];\n const rows: Row[] = processes.map((p) => ({ pid: p.pid, name: p.name, cpu: p.cpuPercent, mem: p.memPercent, state: p.state }));\n return ` ${timestamp()} ${pc.dim(`${processes.length} processes`)}\\n${renderTable(columns, rows, { compact: true })}`;\n };\n\n console.error(render());\n const interval = setInterval(() => { process.stdout.write(\"\\x1B[J\"); console.error(render()); }, 3000);\n // Keep alive until SIGINT — resolves cleanly (no process.exit)\n await new Promise<void>((resolve) => {\n process.once(\"SIGINT\", () => {\n clearInterval(interval);\n process.stdout.write(\"\\x1B[J\");\n resolve();\n });\n });\n}\n","/**\n * Command: kill — Kill process by PID, name, or kill all user processes.\n */\nimport pc from \"picocolors\";\nimport { renderError, renderCommand, createSpinner, selectPrompt, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { removeTrackedByPid } from \"./tracker.js\";\n\nexport async function killCommand(args: string[]): Promise<void> {\n const rawTarget = args[0];\n const signalIndex = args.indexOf(\"--signal\");\n const signalRaw = signalIndex !== -1 ? args[signalIndex + 1] : \"SIGTERM\";\n const signal = (signalRaw ?? \"SIGTERM\") as NodeJS.Signals;\n\n if (rawTarget === \"all\" || args.includes(\"--all\") || args.includes(\"-a\")) {\n await killAll(signal);\n return;\n }\n\n if (!rawTarget) {\n console.error(renderError(\"Missing target\", \"Usage: fennec kill <pid|name|all> [--signal SIGTERM|SIGKILL|SIGINT]\"));\n process.exit(1);\n }\n\n let targetPid: number;\n let displayName: string;\n const pid = parseInt(rawTarget, 10);\n\n if (!isNaN(pid) && String(pid) === rawTarget) {\n if (!isProcessRunning(pid)) { console.error(renderError(\"Process not found\", `No process with PID ${pid} is running`)); process.exit(1); }\n targetPid = pid;\n displayName = `PID ${pid}`;\n } else {\n const matches = getSystemProcesses({ name: rawTarget, userOnly: true, sortBy: \"cpu\" });\n if (matches.length === 0) { console.error(renderError(\"Process not found\", `No running process matching \"${rawTarget}\"`)); process.exit(1); }\n if (matches.length > 1) {\n console.error(`\\n ${pc.bold(`Multiple processes match \"${rawTarget}\":`)}`);\n const selected = await selectPrompt(\"Select which to kill:\", matches.map((p, i) => ({ value: String(i), label: `${p.name} (PID ${p.pid})`, description: `${p.command.slice(0, 80)} — CPU: ${p.cpuPercent}% MEM: ${p.memPercent}%` })));\n if (selected === null) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n const idx = parseInt(selected, 10);\n targetPid = matches[idx]!.pid;\n displayName = `${matches[idx]!.name} (PID ${targetPid})`;\n } else {\n targetPid = matches[0]!.pid;\n displayName = `${matches[0]!.name} (PID ${targetPid})`;\n }\n }\n\n const confirmed = await confirmPrompt(`Kill ${pc.bold(displayName)} with ${pc.yellow(signal)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Sending ${signal} to ${displayName}...`);\n const success = sysKill(targetPid, signal);\n\n if (success) {\n await new Promise((r) => setTimeout(r, 200));\n const stillRunning = isProcessRunning(targetPid);\n if (stillRunning && signal !== \"SIGKILL\") {\n spinner.warn(`${displayName} did not respond to ${signal}`);\n const forceKill = await confirmPrompt(`Send ${pc.red(\"SIGKILL\")} to force stop?`, true);\n if (forceKill) {\n const forceSpinner = createSpinner(`Sending SIGKILL to ${displayName}...`);\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 300));\n isProcessRunning(targetPid) ? forceSpinner.fail(`${displayName} could not be stopped (permission denied?)`) : forceSpinner.succeed(`${displayName} force stopped`);\n } else {\n console.error(` ${pc.dim(\"Retrying with SIGTERM...\")}`);\n sysKill(targetPid, \"SIGTERM\");\n console.error(` ${pc.yellow(\"⚠\")} ${displayName} ${pc.dim(\"may still be running\")}`);\n }\n } else {\n removeTrackedByPid(targetPid);\n spinner.succeed(`${displayName} stopped`);\n }\n } else {\n spinner.fail(`Failed to kill ${displayName}`);\n console.error(renderError(\"Permission denied\", \"Try running with sudo or use a different signal.\"));\n }\n}\n\nasync function killAll(signal: NodeJS.Signals): Promise<void> {\n const userProcs = getSystemProcesses({ userOnly: true, sortBy: \"cpu\", limit: 200 });\n if (userProcs.length === 0) { console.error(` ${pc.dim(\"No user processes to kill.\")}`); return; }\n\n console.error(`\\n ${pc.bold(`Kill ${userProcs.length} user processes?`)}`);\n console.error(` ${pc.dim(\"This will stop ALL your running processes.\")}`);\n console.error(` ${pc.yellow(\"⚠ System processes will not be affected.\")}\\n`);\n\n const confirmed = await confirmPrompt(`${pc.red(\"Are you sure?\")} ${pc.dim(\"This cannot be undone\")}`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled.\")}`); return; }\n\n const spinner = createSpinner(`Killing ${userProcs.length} processes...`);\n let killed = 0, failed = 0;\n for (const proc of userProcs) {\n if (sysKill(proc.pid, signal)) { killed++; removeTrackedByPid(proc.pid); } else { failed++; }\n if (killed % 10 === 0) await new Promise((r) => setTimeout(r, 50));\n }\n await new Promise((r) => setTimeout(r, 500));\n killed > 0 ? spinner.succeed(`${killed} process(es) killed`) : spinner.fail(\"Failed to kill processes\");\n if (failed > 0) console.error(` ${pc.yellow(`${failed} process(es) could not be killed`)} ${pc.dim(\"(try with sudo)\")}`);\n}\n","/**\n * Command: restart — Kill and re-spawn a tracked process from tracked.json config.\n * Fixed: now actually re-spawns (instead of just killing + suggesting manual re-run).\n */\nimport pc from \"picocolors\";\nimport { mkdirSync, createWriteStream } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn } from \"node:child_process\";\nimport { renderError, renderCommand, createSpinner, confirmPrompt } from \"../utils/format.js\";\nimport { getSystemProcesses, killProcess as sysKill, isProcessRunning } from \"../utils/system-process.js\";\nimport { readTracked, addTracked, removeTrackedByPid, rotateLogFile } from \"./tracker.js\";\n\nexport async function restartCommand(args: string[]): Promise<void> {\n const name = args[0];\n if (!name) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec restart <name|pid>\")); process.exit(1); }\n\n const tracked = readTracked();\n let trackedEntry = tracked.find((t) => t.name === name);\n let targetPid: number;\n\n if (trackedEntry) {\n targetPid = trackedEntry.pid;\n } else {\n const pid = parseInt(name, 10);\n if (!isNaN(pid) && String(pid) === name) {\n targetPid = pid;\n } else {\n const processes = getSystemProcesses({ name, userOnly: true, limit: 1 });\n if (processes.length === 0) { console.error(renderError(\"Process not found\", `No process matching \"${name}\"`)); process.exit(1); }\n targetPid = processes[0]!.pid;\n }\n }\n\n const confirmed = await confirmPrompt(`Restart ${pc.bold(`${name} (PID ${targetPid})`)}?`, false);\n if (!confirmed) { console.error(` ${pc.dim(\"Cancelled\")}`); return; }\n\n const spinner = createSpinner(`Stopping PID ${targetPid}...`);\n const killed = sysKill(targetPid, \"SIGTERM\");\n if (!killed) { spinner.fail(`Failed to stop PID ${targetPid}`); return; }\n\n await new Promise((r) => setTimeout(r, 1000));\n if (isProcessRunning(targetPid)) {\n spinner.warn(\"Process didn't stop, sending SIGKILL...\");\n sysKill(targetPid, \"SIGKILL\");\n await new Promise((r) => setTimeout(r, 500));\n }\n\n spinner.succeed(`${name} stopped`);\n\n if (trackedEntry) {\n const respawnSpinner = createSpinner(`Re-spawning ${trackedEntry.name}...`);\n try {\n const cmdParts = trackedEntry.command.split(\" \");\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n mkdirSync(logDir, { recursive: true });\n const logFilePath = resolve(logDir, `${trackedEntry.name}.log`);\n\n const child = spawn(cmdParts[0]!, cmdParts.slice(1), {\n cwd: trackedEntry.cwd,\n env: { ...process.env },\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n detached: true,\n });\n\n // Rotate log if >10MB, then create write stream\n rotateLogFile(logFilePath);\n const logStream = createWriteStream(logFilePath, { flags: \"a\" });\n if (child.stdout) child.stdout.pipe(logStream);\n if (child.stderr) child.stderr.pipe(logStream);\n child.unref();\n\n // Remove old PID entry, add new one (only after successful spawn)\n removeTrackedByPid(targetPid);\n addTracked({\n name: trackedEntry.name,\n pid: child.pid ?? 0,\n command: trackedEntry.command,\n port: trackedEntry.port,\n cwd: trackedEntry.cwd,\n startedAt: new Date().toISOString(),\n });\n\n respawnSpinner.succeed(`${trackedEntry.name} restarted (PID: ${child.pid})`);\n } catch (error) {\n respawnSpinner.fail(`Failed to re-spawn ${trackedEntry.name}: ${String(error)}`);\n console.error(` ${pc.dim(\"Config preserved. Re-run manually:\")} ${renderCommand(trackedEntry.command)}`);\n }\n } else {\n console.error(` ${pc.dim(\"No tracked config found. Re-run manually:\")} ${renderCommand(name)}`);\n }\n}\n","/**\n * Command: log — Show logs for a tracked/managed process.\n */\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport { spawn, execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { symbols, renderError, renderAppName, createSpinner } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\n\nexport async function logCommand(args: string[]): Promise<void> {\n const target = args[0];\n if (!target) { console.error(renderError(\"Missing process name/pid\", \"Usage: fennec log <name|pid> [--lines N] [-f]\")); process.exit(1); }\n\n const linesIndex = args.indexOf(\"--lines\");\n const lineCount = linesIndex !== -1 ? parseInt(args[linesIndex + 1]!, 10) : 30;\n const followFlag = args.includes(\"-f\") || args.includes(\"--follow\");\n\n let logFilePath: string | null = null;\n let displayName = target;\n const tracked = readTracked();\n const trackedMatch = tracked.find((t) => t.name === target || (parseInt(target, 10) === t.pid && !isNaN(parseInt(target, 10))));\n\n if (trackedMatch) {\n displayName = trackedMatch.name;\n logFilePath = resolve(homedir(), \".fennec\", \"logs\", `${trackedMatch.name}.log`);\n } else {\n const pid = parseInt(target, 10);\n if (!isNaN(pid) && String(pid) === target) {\n const procPath = `/proc/${pid}/fd/1`;\n if (existsSync(procPath)) logFilePath = procPath;\n }\n }\n\n const spinner = createSpinner(`Reading logs for ${displayName}...`);\n try {\n let logLines: string[] = [];\n if (logFilePath && existsSync(logFilePath)) {\n const content = readFileSync(logFilePath, \"utf-8\");\n logLines = content.split(\"\\n\").filter(Boolean);\n } else {\n const pid = trackedMatch?.pid ?? parseInt(target, 10);\n if (!isNaN(pid)) {\n try {\n const output = execSync(`journalctl --no-pager -n ${lineCount} _PID=${pid} 2>/dev/null || echo \"\"`, { encoding: \"utf-8\", timeout: 3000 });\n logLines = output.trim().split(\"\\n\").filter(Boolean);\n } catch { logLines = [\"(no logs available)\"]; }\n } else { logLines = [\"(no logs available)\"]; }\n }\n\n spinner.stop();\n process.stdout.write(\"\\r\\x1b[K\");\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Logs\")} ${renderAppName(displayName)} ${pc.dim(`(last ${logLines.length} lines)`)}\\n`);\n\n const sliced = logLines.slice(-lineCount);\n for (const line of sliced) {\n const display = line.length > 300 ? line.slice(0, 300) + \"…\" : line;\n if (line.toLowerCase().includes(\"error\") || line.toLowerCase().includes(\"fail\")) console.error(` ${pc.red(display)}`);\n else if (line.toLowerCase().includes(\"warn\")) console.error(` ${pc.yellow(display)}`);\n else if (line.toLowerCase().includes(\"info\") || line.includes(\"[\")) console.error(` ${pc.cyan(display)}`);\n else console.error(` ${display}`);\n }\n\n if (followFlag && logFilePath) {\n console.error(`\\n ${pc.dim(\"Following... (Ctrl+C to stop)\")}\\n`);\n const tail = spawn(\"tail\", [\"-n\", \"0\", \"-f\", logFilePath], { stdio: \"inherit\" });\n tail.on(\"exit\", () => process.exit(0));\n await new Promise(() => {});\n }\n console.error();\n } catch (error) {\n spinner.fail(`Failed to read logs for ${displayName}`);\n console.error(renderError(\"Log read failed\", String(error)));\n }\n}\n","/**\n * Command: attach — Attach to a process by port.\n */\nimport pc from \"picocolors\";\nimport { renderError, renderKV, renderAppName, createSpinner } from \"../utils/format.js\";\n\nexport async function attachCommand(args: string[]): Promise<void> {\n const port = parseInt(args[0]!, 10);\n if (isNaN(port)) { console.error(renderError(\"Invalid port\", \"Usage: fennec attach <port> --name <name>\")); process.exit(1); }\n\n const nameIndex = args.indexOf(\"--name\");\n const rawName = nameIndex !== -1 ? args[nameIndex + 1] : undefined;\n const name = rawName ?? `port-${port}`;\n\n const spinner = createSpinner(`Attaching to :${port}...`);\n try {\n const { PortDetector } = await import(\"@plumpslabs/fennec-core\");\n const detector = new PortDetector();\n const info = detector.detectByPort(port);\n if (info) {\n spinner.succeed(`Attached to :${port}`);\n console.error(` ${renderKV(\"Name\", renderAppName(name))}`);\n console.error(` ${renderKV(\"PID\", String(info.pid))}`);\n console.error(` ${renderKV(\"Command\", info.command || pc.dim(\"unknown\"))}`);\n } else {\n spinner.fail(`No process found on port ${port}`);\n process.exit(1);\n }\n } catch (error) {\n spinner.fail(`Failed to attach to :${port}`);\n console.error(renderError(\"Error\", String(error)));\n process.exit(1);\n }\n}\n","/**\n * Command: sessions — List saved auth sessions.\n */\nimport { SessionStore } from \"@plumpslabs/fennec-core\";\nimport pc from \"picocolors\";\nimport { symbols, renderTable, type Column, type Row } from \"../utils/format.js\";\n\nexport async function sessionsCommand(): Promise<void> {\n const store = new SessionStore(\"./.fennec/sessions\");\n const sessions = store.list();\n if (sessions.length === 0) { console.error(`\\n ${pc.dim(\"No saved sessions found.\")}\\n`); return; }\n\n const columns: Column[] = [\n { key: \"name\", label: \"Name\", format: (v) => pc.bold(String(v)) },\n { key: \"origin\", label: \"Origin\" },\n { key: \"savedAt\", label: \"Saved\", format: (v) => pc.dim(String(v)) },\n ];\n const rows: Row[] = sessions.map((s) => ({ name: s.name, origin: s.origin, savedAt: new Date(s.savedAt).toLocaleString() }));\n\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Saved Sessions\")}\\n`);\n console.error(renderTable(columns, rows));\n console.error(` ${pc.dim(`${sessions.length} session(s)`)}\\n`);\n}\n","/**\n * Command: setup — Interactive MCP client setup.\n */\nimport pc from \"picocolors\";\nimport { symbols, renderSuccess, renderCommand, selectPrompt } from \"../utils/format.js\";\n\nexport async function setupCommand(): Promise<void> {\n console.error(`\\n ${symbols.fox} ${pc.bold(\"Fennec Setup\")}\\n`);\n\n const mcpClient = await selectPrompt(\"Which MCP client are you using?\", [\n { value: \"claude\", label: \"Claude Desktop\", description: \"Anthropic's AI desktop app\" },\n { value: \"cursor\", label: \"Cursor\", description: \"AI-powered code editor\" },\n { value: \"cline\", label: \"Cline\", description: \"VS Code MCP client\" },\n { value: \"other\", label: \"Other MCP client\", description: \"Any MCP-compatible client\" },\n ]);\n\n if (!mcpClient) { console.error(` ${pc.dim(\"Setup cancelled.\")}\\n`); return; }\n\n console.error(`\\n ${pc.green(\"✓\")} Selected: ${pc.bold(mcpClient)}\\n`);\n\n const configSnippet = `{\\n \"mcpServers\": {\\n \"fennec\": {\\n \"command\": \"fennec\",\\n \"args\": [\"start\"]\\n }\\n }\\n}`;\n\n console.error(` ${pc.bold(\"Add this to your MCP client config:\")}\\n`);\n console.error(` ${pc.dim(\"```\")}`);\n console.error(configSnippet.split(\"\\n\").map((l) => ` ${l}`).join(\"\\n\"));\n console.error(` ${pc.dim(\"```\")}\\n`);\n console.error(` ${renderSuccess(\"Setup complete!\")} ${pc.dim(\"Run\")} ${renderCommand(\"fennec start\")} ${pc.dim(\"to begin.\")}\\n`);\n}\n","/**\n * Command: init, install-browsers — Project setup utilities.\n */\nimport { existsSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport pc from \"picocolors\";\nimport { renderCommand, renderError, renderSuccess, createSpinner, confirmPrompt } from \"../utils/format.js\";\n\nexport async function installBrowsersCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Installing Browser Engines\")}\\n`);\n const spinner = createSpinner(\"Installing Chromium...\");\n try {\n execSync(\"npx playwright install chromium\", { stdio: \"pipe\", timeout: 120000 });\n spinner.succeed(\"Chromium installed successfully\");\n } catch {\n spinner.fail(\"Failed to install Chromium\");\n console.error(` ${pc.yellow(\"→\")} Try running: ${renderCommand(\"npx playwright install chromium\")}`);\n }\n console.error(`\\n ${pc.green(\"✓\")} Browser installation complete.\\n`);\n}\n\nexport async function initCommand(): Promise<void> {\n console.error(`\\n ${pc.bold(\"Initialize Fennec Configuration\")}\\n`);\n\n const configFile = resolve(\"./fennec.config.yaml\");\n if (existsSync(configFile)) {\n const overwrite = await confirmPrompt(`${pc.yellow(\"fennec.config.yaml\")} already exists. Overwrite?`, false);\n if (!overwrite) { console.error(` ${pc.dim(\"Cancelled.\")}\\n`); return; }\n }\n\n const spinner = createSpinner(\"Generating configuration...\");\n\n const config = `# Fennec Configuration\n# Generated by 'fennec init'\n\nbrowser:\n type: chromium\n headless: true\n defaultTimeout: 30000\n viewport:\n width: 1280\n height: 720\n\nsession:\n maxSessions: 10\n idleTimeoutSecs: 1800\n persistPath: \".fennec/sessions\"\n\nprocess:\n maxProcesses: 10\n logBufferLines: 2000\n spawnAllowlist:\n - \"npm\"\n - \"node\"\n - \"pnpm\"\n - \"yarn\"\n - \"bun\"\n - \"python\"\n - \"python3\"\n\nterminal:\n logBufferLines: 2000\n watchDebounceMs: 50\n\nnetwork:\n bufferSize: 1000\n captureRequestBody: true\n captureResponseBody: true\n slowRequestThresholdMs: 1000\n\nconsole:\n bufferSize: 500\n levels:\n - log\n - info\n - warn\n - error\n - debug\n\ncorrelation:\n windowMs: 500\n enableRootCauseInference: true\n minConfidence: 0.7\n\nsecurity:\n sandbox: true\n allowProcessSpawn: true\n allowProcessKill: false\n allowedDomains: []\n blockedDomains: []\n allowFileProtocol: false\n allowCDPRawAccess: false\n exportPath: \".fennec/exports\"\n maxExportSizeMB: 10\n\ntransport:\n type: stdio\n port: 3333\n host: \"127.0.0.1\"\n\nlogging:\n level: info\n format: pretty\n file: null\n`;\n\n writeFileSync(configFile, config, \"utf-8\");\n spinner.succeed(`Configuration written to ${pc.bold(configFile)}`);\n console.error(`\\n ${pc.dim(\"Edit the file to customize Fennec behavior.\")}\\n`);\n}\n","/**\n * Command: health — Check Fennec system health\n * Returns system status, tracked processes, and resource info.\n */\nimport { readFileSync, existsSync, readdirSync, statSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { resolve } from \"node:path\";\nimport { homedir } from \"node:os\";\nimport pc from \"picocolors\";\nimport { printBanner } from \"../utils/banner.js\";\nimport { symbols, renderKV, renderError } from \"../utils/format.js\";\nimport { readTracked } from \"./tracker.js\";\nimport { isProcessRunning } from \"../utils/system-process.js\";\n\nexport async function healthCommand(): Promise<void> {\n printBanner();\n console.error(` ${pc.bold(\"Fennec Health Check\")}\\n`);\n\n // 1. ADB availability (if needed)\n let adbStatus = \"unknown\";\n try {\n const result = execSync(\"adb --version\", {\n encoding: \"utf-8\",\n timeout: 3000,\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n });\n const version = result.split(\"\\n\")[0]?.trim() ?? \"installed\";\n adbStatus = pc.green(version);\n } catch {\n adbStatus = pc.dim(\"not found\") + \" (optional)\";\n }\n\n // 2. Tracked processes\n const tracked = readTracked();\n const runningCount = tracked.filter((t) => isProcessRunning(t.pid)).length;\n\n // 3. Disk usage for logs\n const logDir = resolve(homedir(), \".fennec\", \"logs\");\n let logSize = \"0 B\";\n try {\n if (existsSync(logDir)) {\n const files = readdirSync(logDir);\n let totalBytes = 0;\n for (const f of files) {\n const fStat = statSync(resolve(logDir, f));\n totalBytes += fStat.size;\n }\n logSize = totalBytes > 1024 * 1024\n ? `${(totalBytes / (1024 * 1024)).toFixed(1)} MB`\n : `${(totalBytes / 1024).toFixed(1)} KB`;\n }\n } catch { /* best-effort */ }\n\n // 4. Memory info\n let memoryInfo = \"unknown\";\n try {\n const mem = process.memoryUsage();\n memoryInfo = `${(mem.rss / (1024 * 1024)).toFixed(0)} MB RSS / ${(mem.heapUsed / (1024 * 1024)).toFixed(0)} MB heap`;\n } catch { /* best-effort */ }\n\n console.error(` ${symbols.fox} ${pc.bold(\"System\")}\\n`);\n console.error(` ${renderKV(\"Node.js\", process.version)}`);\n console.error(` ${renderKV(\"Platform\", `${process.platform} ${process.arch}`)}`);\n console.error(` ${renderKV(\"Memory\", memoryInfo)}`);\n console.error(` ${renderKV(\"ADB\", adbStatus)}`);\n console.error(` ${renderKV(\"PID\", String(process.pid))}`);\n console.error();\n console.error(` ${symbols.fox} ${pc.bold(\"Processes\")}\\n`);\n console.error(` ${renderKV(\"Tracked\", String(tracked.length))}`);\n console.error(` ${renderKV(\"Running\", String(runningCount))}`);\n console.error(` ${renderKV(\"Logs\", logSize)}`);\n console.error();\n\n const allHealthy = runningCount === tracked.length || tracked.length === 0;\n if (allHealthy) {\n console.error(` ${pc.green(\"✓\")} ${pc.bold(\"All systems healthy\")}\\n`);\n } else {\n const stopped = tracked.length - runningCount;\n console.error(` ${pc.yellow(\"⚠\")} ${pc.bold(`${stopped} process(es) stopped`)} ${pc.dim(\"fennec ps\")}\\n`);\n }\n}\n","#!/usr/bin/env node\n\nimport { renderError } from \"./utils/format.js\";\nimport { printBanner } from \"./utils/banner.js\";\nimport { showHelp } from \"./utils/help.js\";\nimport { pipeCommand } from \"./commands/pipe.js\";\nimport { attachPidCommand } from \"./commands/attach-pid.js\";\nimport { attachPortCommand } from \"./commands/attach-port.js\";\nimport { watchCommand } from \"./commands/watch.js\";\nimport { startServer, startCommand, runCommand } from \"./commands/start.js\";\nimport { psCommand, statusCommand } from \"./commands/ps.js\";\nimport { killCommand } from \"./commands/kill.js\";\nimport { restartCommand } from \"./commands/restart.js\";\nimport { logCommand } from \"./commands/log.js\";\nimport { attachCommand } from \"./commands/attach.js\";\nimport { sessionsCommand } from \"./commands/sessions.js\";\nimport { setupCommand } from \"./commands/setup.js\";\nimport { installBrowsersCommand, initCommand } from \"./commands/management.js\";\nimport { healthCommand } from \"./commands/health.js\";\n\nconst [, , command, ...args] = process.argv;\n\nasync function main(): Promise<void> {\n if (!command || command === \"start\") {\n if (args.length === 0 || args[0]?.startsWith(\"--\")) {\n await startServer(args);\n } else {\n await startCommand(args);\n }\n } else if (command === \"run\") {\n await runCommand(args);\n } else if (command === \"ps\") {\n printBanner();\n await psCommand(args);\n } else if (command === \"status\") {\n printBanner();\n await statusCommand(args);\n } else if (command === \"log\") {\n await logCommand(args);\n } else if (command === \"kill\") {\n await killCommand(args);\n } else if (command === \"restart\") {\n await restartCommand(args);\n } else if (command === \"attach\") {\n await attachCommand(args);\n } else if (command === \"pipe\") {\n await pipeCommand(args);\n } else if (command === \"attach-pid\") {\n await attachPidCommand(args);\n } else if (command === \"attach-port\") {\n await attachPortCommand(args);\n } else if (command === \"watch\") {\n await watchCommand(args);\n } else if (command === \"sessions\") {\n await sessionsCommand();\n } else if (command === \"setup\") {\n await setupCommand();\n } else if (command === \"install-browsers\") {\n printBanner();\n await installBrowsersCommand();\n } else if (command === \"health\" || command === \"--health\") {\n await healthCommand();\n } else if (command === \"init\") {\n printBanner();\n await initCommand();\n } else if (command === \"version\" || command === \"--version\" || command === \"-v\") {\n printBanner();\n } else if (command === \"help\" || command === \"--help\" || command === \"-h\") {\n printBanner();\n showHelp();\n } else {\n console.error(renderError(`Unknown command: ${command}`, \"Run 'fennec help' for usage information\"));\n process.exit(1);\n }\n}\n\nmain().catch((error) => {\n console.error(renderError(\"Fatal error\", String(error)));\n process.exit(1);\n});\n"],"mappings":"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","names":["pad","text","options","colors","colors","colors","colors","colors","stylize","builder","args","style","sequencer","map","colors","colors","args","CliTable3","num","resolve","pc","fennecOrange","pc","fennecOrange","pc","args","args","args","args","readFileSync","mkdirSync","resolve","homedir","pc","existsSync","resolve","readFileSync","existsSync","command","args","pc","resolve","homedir","mkdirSync","readFileSync","pc","args","pc","columns","rows","resolve","pc","args","pc","pc","mkdirSync","createWriteStream","resolve","homedir","spawn","args","pc","resolve","homedir","mkdirSync","spawn","createWriteStream","existsSync","readFileSync","resolve","homedir","spawn","execSync","pc","args","resolve","homedir","existsSync","readFileSync","execSync","pc","spawn","pc","args","pc","pc","pc","pc","pc","existsSync","writeFileSync","resolve","execSync","pc","pc","execSync","resolve","existsSync","writeFileSync","existsSync","readdirSync","statSync","execSync","resolve","homedir","pc","pc","execSync","resolve","homedir","existsSync","readdirSync","statSync"]}
|