@cerios/openapi-to-zod 1.3.1 → 1.3.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/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../node_modules/tsup/assets/cjs_shims.js","../../../node_modules/kleur/index.js","../../../node_modules/prompts/dist/util/action.js","../../../node_modules/prompts/dist/util/strip.js","../../../node_modules/sisteransi/src/index.js","../../../node_modules/prompts/dist/util/clear.js","../../../node_modules/prompts/dist/util/figures.js","../../../node_modules/prompts/dist/util/style.js","../../../node_modules/prompts/dist/util/lines.js","../../../node_modules/prompts/dist/util/wrap.js","../../../node_modules/prompts/dist/util/entriesToDisplay.js","../../../node_modules/prompts/dist/util/index.js","../../../node_modules/prompts/dist/elements/prompt.js","../../../node_modules/prompts/dist/elements/text.js","../../../node_modules/prompts/dist/elements/select.js","../../../node_modules/prompts/dist/elements/toggle.js","../../../node_modules/prompts/dist/dateparts/datepart.js","../../../node_modules/prompts/dist/dateparts/meridiem.js","../../../node_modules/prompts/dist/dateparts/day.js","../../../node_modules/prompts/dist/dateparts/hours.js","../../../node_modules/prompts/dist/dateparts/milliseconds.js","../../../node_modules/prompts/dist/dateparts/minutes.js","../../../node_modules/prompts/dist/dateparts/month.js","../../../node_modules/prompts/dist/dateparts/seconds.js","../../../node_modules/prompts/dist/dateparts/year.js","../../../node_modules/prompts/dist/dateparts/index.js","../../../node_modules/prompts/dist/elements/date.js","../../../node_modules/prompts/dist/elements/number.js","../../../node_modules/prompts/dist/elements/multiselect.js","../../../node_modules/prompts/dist/elements/autocomplete.js","../../../node_modules/prompts/dist/elements/autocompleteMultiselect.js","../../../node_modules/prompts/dist/elements/confirm.js","../../../node_modules/prompts/dist/elements/index.js","../../../node_modules/prompts/dist/prompts.js","../../../node_modules/prompts/dist/index.js","../../../node_modules/prompts/lib/util/action.js","../../../node_modules/prompts/lib/util/strip.js","../../../node_modules/prompts/lib/util/clear.js","../../../node_modules/prompts/lib/util/figures.js","../../../node_modules/prompts/lib/util/style.js","../../../node_modules/prompts/lib/util/lines.js","../../../node_modules/prompts/lib/util/wrap.js","../../../node_modules/prompts/lib/util/entriesToDisplay.js","../../../node_modules/prompts/lib/util/index.js","../../../node_modules/prompts/lib/elements/prompt.js","../../../node_modules/prompts/lib/elements/text.js","../../../node_modules/prompts/lib/elements/select.js","../../../node_modules/prompts/lib/elements/toggle.js","../../../node_modules/prompts/lib/dateparts/datepart.js","../../../node_modules/prompts/lib/dateparts/meridiem.js","../../../node_modules/prompts/lib/dateparts/day.js","../../../node_modules/prompts/lib/dateparts/hours.js","../../../node_modules/prompts/lib/dateparts/milliseconds.js","../../../node_modules/prompts/lib/dateparts/minutes.js","../../../node_modules/prompts/lib/dateparts/month.js","../../../node_modules/prompts/lib/dateparts/seconds.js","../../../node_modules/prompts/lib/dateparts/year.js","../../../node_modules/prompts/lib/dateparts/index.js","../../../node_modules/prompts/lib/elements/date.js","../../../node_modules/prompts/lib/elements/number.js","../../../node_modules/prompts/lib/elements/multiselect.js","../../../node_modules/prompts/lib/elements/autocomplete.js","../../../node_modules/prompts/lib/elements/autocompleteMultiselect.js","../../../node_modules/prompts/lib/elements/confirm.js","../../../node_modules/prompts/lib/elements/index.js","../../../node_modules/prompts/lib/prompts.js","../../../node_modules/prompts/lib/index.js","../../../node_modules/prompts/index.js","../src/cli.ts","../src/batch-executor.ts","../src/errors.ts","../src/openapi-generator.ts","../src/generators/enum-generator.ts","../src/utils/name-utils.ts","../src/generators/jsdoc-generator.ts","../src/utils/string-utils.ts","../src/generators/property-generator.ts","../src/utils/lru-cache.ts","../src/utils/pattern-utils.ts","../src/validators/array-validator.ts","../src/validators/composition-validator.ts","../src/validators/number-validator.ts","../src/validators/object-validator.ts","../src/validators/conditional-validator.ts","../src/validators/string-validator.ts","../src/utils/operation-filters.ts","../src/utils/ref-resolver.ts","../src/utils/config-loader.ts","../src/utils/config-schemas.ts","../src/utils/config-validation.ts","../src/utils/typescript-loader.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","'use strict';\n\nconst { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (str.includes(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\tthis.has.includes(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n\n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n\n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage'; // TODO create home() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'home') return 'home'; // TODO create end() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'end') return 'end';\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n return false;\n};","'use strict';\n\nmodule.exports = str => {\n const pattern = ['[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)', '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'].join('|');\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};","'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nconst strip = require('./strip');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst width = str => [...strip(str)].length;\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\n\n\nmodule.exports = function (prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n\n var _iterator = _createForOfIteratorHelper(lines),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n let line = _step.value;\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return erase.lines(rows);\n};","'use strict';\n\nconst main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\n cross: '✖',\n ellipsis: '…',\n pointerSmall: '›',\n line: '─',\n pointer: '❯'\n};\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\n tick: '√',\n cross: '×',\n ellipsis: '...',\n pointerSmall: '»',\n line: '─',\n pointer: '>'\n};\nconst figures = process.platform === 'win32' ? win : main;\nmodule.exports = figures;","'use strict';\n\nconst c = require('kleur');\n\nconst figures = require('./figures'); // rendering user input.\n\n\nconst styles = Object.freeze({\n password: {\n scale: 1,\n render: input => '*'.repeat(input.length)\n },\n emoji: {\n scale: 2,\n render: input => '😃'.repeat(input.length)\n },\n invisible: {\n scale: 0,\n render: input => ''\n },\n default: {\n scale: 1,\n render: input => `${input}`\n }\n});\n\nconst render = type => styles[type] || styles.default; // icon to signalize a prompt.\n\n\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.\n\n\nconst delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};","'use strict';\n\nconst strip = require('./strip');\n/**\n * @param {string} msg\n * @param {number} perLine\n */\n\n\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine)).reduce((a, b) => a + b);\n};","'use strict';\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\n\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin)) ? new Array(parseInt(opts.margin)).fill(' ').join('') : opts.margin || '';\n const width = opts.width;\n return (msg || '').split(/\\r?\\n/g).map(line => line.split(/\\s+/g).reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width) arr[arr.length - 1] += ` ${w}`;else arr.push(`${tab}${w}`);\n return arr;\n }, [tab]).join('\\n')).join('\\n');\n};","'use strict';\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\n\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n let endIndex = Math.min(startIndex + maxVisible, total);\n return {\n startIndex,\n endIndex\n };\n};","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};","'use strict';\n\nconst readline = require('readline');\n\nconst _require = require('../util'),\n action = _require.action;\n\nconst EventEmitter = require('events');\n\nconst _require2 = require('sisteransi'),\n beep = _require2.beep,\n cursor = _require2.cursor;\n\nconst color = require('kleur');\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass Prompt extends EventEmitter {\n constructor(opts = {}) {\n super();\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n\n const rl = readline.createInterface({\n input: this.in,\n escapeCodeTimeout: 50\n });\n readline.emitKeypressEvents(this.in, rl);\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;\n\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n\n}\n\nmodule.exports = Prompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n lines = _require2.lines,\n figures = _require2.figures;\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass TextPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n\n this.validator = opts.validate || (() => true);\n\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n _this2.value = _this2.value || _this2.initial;\n _this2.cursorOffset = 0;\n _this2.cursor = _this2.rendered.length;\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.red = true;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor + n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length + 1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor - 1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor + 1);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || this.placeholder && this.cursor === 1;\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || this.placeholder && this.cursor === this.rendered.length + 1;\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = '';\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.red ? color.red(this.rendered) : this.rendered].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures,\n wrap = _require.wrap,\n entriesToDisplay = _require.entriesToDisplay;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor;\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\n\n\nclass SelectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex; // Print prompt\n\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.done ? this.selection.title : this.selection.disabled ? color.yellow(this.warn) : color.gray(this.hint)].join(' '); // Print choices\n\n if (!this.done) {\n this.outputText += '\\n';\n\n for (let i = startIndex; i < endIndex; i++) {\n let title,\n prefix,\n desc = '',\n v = this.choices[i]; // Determine whether to display \"more choices\" indicators\n\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n\n}\n\nmodule.exports = SelectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor,\n erase = _require2.erase;\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass TogglePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n\n left() {\n this.deactivate();\n }\n\n right() {\n this.activate();\n }\n\n down() {\n this.deactivate();\n }\n\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = TogglePrompt;","'use strict';\n\nclass DatePart {\n constructor({\n token,\n date,\n parts,\n locales\n }) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n\n}\n\nmodule.exports = DatePart;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n\n}\n\nmodule.exports = Meridiem;","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st' : n === 2 ? 'nd' : n === 3 ? 'rd' : 'th';\n};\n\nclass Day extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0') : this.token === 'Do' ? date + pos(date) : this.token === 'd' ? day + 1 : this.token === 'ddd' ? this.locales.weekdaysShort[day] : this.token === 'dddd' ? this.locales.weekdays[day] : date;\n }\n\n}\n\nmodule.exports = Day;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token)) hours = hours % 12 || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n\n}\n\nmodule.exports = Hours;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-this.token.length)));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0').substr(0, this.token.length);\n }\n\n}\n\nmodule.exports = Milliseconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n\n}\n\nmodule.exports = Minutes;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0') : tl === 3 ? this.locales.monthsShort[month] : tl === 4 ? this.locales.months[month] : String(month + 1);\n }\n\n}\n\nmodule.exports = Month;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n\n}\n\nmodule.exports = Seconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n\n}\n\nmodule.exports = Year;","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year')\n};","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n\nconst _require3 = require('../dateparts'),\n DatePart = _require3.DatePart,\n Meridiem = _require3.Meridiem,\n Day = _require3.Day,\n Hours = _require3.Hours,\n Milliseconds = _require3.Milliseconds,\n Minutes = _require3.Minutes,\n Month = _require3.Month,\n Seconds = _require3.Seconds,\n Year = _require3.Year;\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({\n token\n }) => token.replace(/\\\\(.)/g, '$1'),\n 2: opts => new Day(opts),\n // Day // TODO\n 3: opts => new Month(opts),\n // Month\n 4: opts => new Year(opts),\n // Year\n 5: opts => new Meridiem(opts),\n // AM/PM // TODO (special)\n 6: opts => new Hours(opts),\n // Hours\n 7: opts => new Minutes(opts),\n // Minutes\n 8: opts => new Seconds(opts),\n // Seconds\n 9: opts => new Milliseconds(opts) // Fractional seconds\n\n};\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n};\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\nclass DatePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n\n this.validator = opts.validate || (() => true);\n\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date;\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n\n while (result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups ? regexGroups[idx]({\n token: result[idx] || match,\n date: this.date,\n parts: this.parts,\n locales: this.locales\n }) : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string') arr[arr.length - 1] += i;else arr.push(i);\n return arr;\n }, []);\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === 'string') {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = 'red';\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next ? this.parts.indexOf(next) : this.parts.findIndex(part => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render(); // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), []).join('')].join(' '); // Print error\n\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = DatePrompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor,\n erase = _require.erase;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n figures = _require2.figures,\n clear = _require2.clear,\n lines = _require2.lines;\n\nconst isNumber = /[0-9]/;\n\nconst isDef = any => any !== undefined;\n\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n};\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass NumberPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n\n this.validator = opts.validate || (() => true);\n\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c);\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = `red`;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n let x = _this2.value;\n _this2.value = x !== `` ? x : _this2.initial;\n _this2.done = true;\n _this2.aborted = false;\n _this2.error = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write(`\\n`);\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min - this.inc;\n }\n\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min + this.inc;\n }\n\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse(val = val.slice(0, -1)) || ``;\n\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n if (c === `.`) return this.fire();\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = ''; // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n\n}\n\nmodule.exports = NumberPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst Prompt = require('./prompt');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n figures = _require2.figures,\n style = _require2.style,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass MultiselectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value.filter(e => e.selected);\n\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return '\\nInstructions:\\n' + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n` + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n` + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '') + ` enter/return: Complete answer`;\n }\n\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: prefix.length,\n width: this.out.columns\n });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n } // shared with autocompleteMultiselect\n\n\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, options.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n let prefix,\n styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n } // shared with autocomleteMultiselect\n\n\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.value);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = MultiselectPrompt;","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n figures = _require2.figures,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\n\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\n\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\n\n\nclass AutocompletePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number' ? opts.initial : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = {\n noMatches: opts.noMatches || 'no matches found'\n };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number') choice = this.choices[this._fb];else if (typeof this._fb === 'string') choice = {\n title: this._fb\n };\n return choice || this._fb || {\n title: this.i18n.noMatches\n };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0) this.value = getVal(this.suggestions, i);else this.value = this.fallback.value;\n this.fire();\n }\n\n complete(cb) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n const p = _this.completing = _this.suggest(_this.input, _this.choices);\n\n const suggestions = yield p;\n if (_this.completing !== p) return;\n _this.suggestions = suggestions.map((s, i, arr) => ({\n title: getTitle(arr, i),\n value: getVal(arr, i),\n description: s.description\n }));\n _this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n\n _this.moveSelect(Math.min(l, _this.select));\n\n cb && cb();\n })();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length + 1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor - 1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor + 1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor + 1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.select, this.choices.length, this.limit),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n this.outputText = [style.symbol(this.done, this.aborted, this.exited), color.bold(this.msg), style.delimiter(this.completing), this.done && this.suggestions[this.select] ? this.suggestions[this.select].title : this.rendered = this.transform.render(this.input)].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions.slice(startIndex, endIndex).map((item, i) => this.renderOption(item, this.select === i + startIndex, i === 0 && startIndex > 0, i + startIndex === endIndex - 1 && endIndex < this.choices.length)).join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = AutocompletePrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst MultiselectPrompt = require('./multiselect');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n style = _require2.style,\n figures = _require2.figures;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts = {}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value.filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n return false;\n }\n\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight);\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title;\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.filteredOptions);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\n\n\nclass ConfirmPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = ConfirmPrompt;","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};","'use strict';\n\nconst $ = exports;\n\nconst el = require('./elements');\n\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts = {}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.text = args => toPrompt('TextPrompt', args);\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.number = args => toPrompt('NumberPrompt', args);\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.date = args => toPrompt('DatePrompt', args);\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n\n\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.toggle = args => toPrompt('TogglePrompt', args);\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.select = args => toPrompt('SelectPrompt', args);\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase()));\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\n\nconst noop = () => {};\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\n\n\nfunction prompt() {\n return _prompt.apply(this, arguments);\n}\n\nfunction _prompt() {\n _prompt = _asyncToGenerator(function* (questions = [], {\n onSubmit = noop,\n onCancel = noop\n } = {}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (question, answer, skipValidation = false) {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n\n return question.format ? yield question.format(answer, answers) : answer;\n });\n\n return function getFormattedAnswer(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n\n var _iterator = _createForOfIteratorHelper(questions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n question = _step.value;\n var _question = question;\n name = _question.name;\n type = _question.type;\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = yield type(answer, _objectSpread({}, answers), question);\n question['type'] = type;\n }\n\n if (!type) continue; // if property is a function, invoke it unless it's a special function\n\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? yield value(answer, _objectSpread({}, answers), lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n } // update vars in case they changed\n\n\n var _question2 = question;\n name = _question2.name;\n type = _question2.type;\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = yield getFormattedAnswer(question, override[question.name]);\n\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : yield prompts[type](question);\n answers[name] = answer = yield getFormattedAnswer(question, answer, true);\n quit = yield onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(yield onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return answers;\n });\n return _prompt.apply(this, arguments);\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n\n if (answer instanceof Error) {\n throw answer;\n }\n\n return answer === undefined ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, {\n prompt,\n prompts,\n inject,\n override\n});","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n \n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n \n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage';\n // TODO create home() in prompt types (e.g. TextPrompt)\n if (key.name === 'home') return 'home';\n // TODO create end() in prompt types (e.g. TextPrompt)\n if (key.name === 'end') return 'end';\n\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n\n return false;\n};\n","'use strict';\n\nmodule.exports = str => {\n const pattern = [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n ].join('|');\n\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n","'use strict';\n\nconst strip = require('./strip');\nconst { erase, cursor } = require('sisteransi');\n\nconst width = str => [...strip(str)].length;\n\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\nmodule.exports = function(prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n\n return erase.lines(rows);\n};\n","'use strict';\t\n\n const main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\t\n cross: '✖',\t\n ellipsis: '…',\t\n pointerSmall: '›',\t\n line: '─',\t\n pointer: '❯'\t\n};\t\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\t\n tick: '√',\t\n cross: '×',\t\n ellipsis: '...',\t\n pointerSmall: '»',\t\n line: '─',\t\n pointer: '>'\t\n};\t\nconst figures = process.platform === 'win32' ? win : main;\t\n\n module.exports = figures;\n","'use strict';\n\nconst c = require('kleur');\nconst figures = require('./figures');\n\n// rendering user input.\nconst styles = Object.freeze({\n password: { scale: 1, render: input => '*'.repeat(input.length) },\n emoji: { scale: 2, render: input => '😃'.repeat(input.length) },\n invisible: { scale: 0, render: input => '' },\n default: { scale: 1, render: input => `${input}` }\n});\nconst render = type => styles[type] || styles.default;\n\n// icon to signalize a prompt.\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) =>\n aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default;\n\n// between the question and the user's input.\nconst delimiter = completing =>\n c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) =>\n c.gray(expandable ? (expanded ? figures.pointerSmall : '+') : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};\n","'use strict';\n\nconst strip = require('./strip');\n\n/**\n * @param {string} msg\n * @param {number} perLine\n */\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine))\n .reduce((a, b) => a + b);\n};\n","'use strict';\n\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin))\n ? new Array(parseInt(opts.margin)).fill(' ').join('')\n : (opts.margin || '');\n\n const width = opts.width;\n\n return (msg || '').split(/\\r?\\n/g)\n .map(line => line\n .split(/\\s+/g)\n .reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width)\n arr[arr.length - 1] += ` ${w}`;\n else arr.push(`${tab}${w}`);\n return arr;\n }, [ tab ])\n .join('\\n'))\n .join('\\n');\n};\n","'use strict';\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n\n let startIndex = Math.min(total- maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.min(startIndex + maxVisible, total);\n\n return { startIndex, endIndex };\n};\n","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};\n","'use strict';\n\nconst readline = require('readline');\nconst { action } = require('../util');\nconst EventEmitter = require('events');\nconst { beep, cursor } = require('sisteransi');\nconst color = require('kleur');\n\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass Prompt extends EventEmitter {\n constructor(opts={}) {\n super();\n\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n const rl = readline.createInterface({ input:this.in, escapeCodeTimeout:50 });\n readline.emitKeypressEvents(this.in, rl);\n\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = [ 'SelectPrompt', 'MultiselectPrompt' ].indexOf(this.constructor.name) > -1;\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n}\n\nmodule.exports = Prompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, lines, figures } = require('../util');\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass TextPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n this.validator = opts.validate || (() => true);\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n this.value = this.value || this.initial;\n this.cursorOffset = 0;\n this.cursor = this.rendered.length;\n await this.validate();\n if (this.error) {\n this.red = true;\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor+n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length+1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor-1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor+1);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || (this.placeholder && this.cursor === 1);\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || (this.placeholder && this.cursor === this.rendered.length + 1)\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.red ? color.red(this.rendered) : this.rendered\n ].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\nconst { cursor } = require('sisteransi');\n\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\nclass SelectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else\n this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage);\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.done ? this.selection.title : this.selection.disabled\n ? color.yellow(this.warn) : color.gray(this.hint)\n ].join(' ');\n\n // Print choices\n if (!this.done) {\n this.outputText += '\\n';\n for (let i = startIndex; i < endIndex; i++) {\n let title, prefix, desc = '', v = this.choices[i];\n\n // Determine whether to display \"more choices\" indicators\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n}\n\nmodule.exports = SelectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { cursor, erase } = require('sisteransi');\n\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass TogglePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n left() {\n this.deactivate();\n }\n right() {\n this.activate();\n }\n down() {\n this.deactivate();\n }\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.value ? this.inactive : color.cyan().underline(this.inactive),\n color.gray('/'),\n this.value ? color.cyan().underline(this.active) : this.active\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = TogglePrompt;\n","'use strict';\n\nclass DatePart {\n constructor({token, date, parts, locales}) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n}\n\nmodule.exports = DatePart;\n\n\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n}\n\nmodule.exports = Meridiem;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st'\n : n === 2 ? 'nd'\n : n === 3 ? 'rd'\n : 'th';\n}\n\nclass Day extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0')\n : this.token === 'Do' ? date + pos(date)\n : this.token === 'd' ? day + 1\n : this.token === 'ddd' ? this.locales.weekdaysShort[day]\n : this.token === 'dddd' ? this.locales.weekdays[day]\n : date;\n }\n}\n\nmodule.exports = Day;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token))\n hours = (hours % 12) || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n}\n\nmodule.exports = Hours;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-(this.token.length))));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0')\n .substr(0, this.token.length);\n }\n}\n\nmodule.exports = Milliseconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n}\n\nmodule.exports = Minutes;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0')\n : tl === 3 ? this.locales.monthsShort[month]\n : tl === 4 ? this.locales.months[month]\n : String(month + 1);\n }\n}\n\nmodule.exports = Month;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n}\n\nmodule.exports = Seconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n}\n\nmodule.exports = Year;\n","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year'),\n}\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures } = require('../util');\nconst { erase, cursor } = require('sisteransi');\nconst { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({token}) => token.replace(/\\\\(.)/g, '$1'),\n 2: (opts) => new Day(opts), // Day // TODO\n 3: (opts) => new Month(opts), // Month\n 4: (opts) => new Year(opts), // Year\n 5: (opts) => new Meridiem(opts), // AM/PM // TODO (special)\n 6: (opts) => new Hours(opts), // Hours\n 7: (opts) => new Minutes(opts), // Minutes\n 8: (opts) => new Seconds(opts), // Seconds\n 9: (opts) => new Milliseconds(opts), // Fractional seconds\n}\n\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n}\n\n\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass DatePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n this.validator = opts.validate || (() => true);\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n while(result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups\n ? regexGroups[idx]({ token: result[idx] || match, date: this.date, parts: this.parts, locales: this.locales })\n : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string')\n arr[arr.length - 1] += i;\n else arr.push(i);\n return arr;\n }, []);\n\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === 'string') {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = 'red';\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next\n ? this.parts.indexOf(next)\n : this.parts.findIndex((part) => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), [])\n .join('')\n ].join(' ');\n\n // Print error\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce(\n (a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = DatePrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { cursor, erase } = require('sisteransi');\nconst { style, figures, clear, lines } = require('../util');\n\nconst isNumber = /[0-9]/;\nconst isDef = any => any !== undefined;\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n}\n\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass NumberPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.validator = opts.validate || (() => true);\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c)\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = `red`;\n this.fire();\n this.render();\n return;\n }\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = true;\n this.aborted = false;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n up() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min - this.inc;\n }\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min + this.inc;\n }\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse((val = val.slice(0, -1))) || ``;\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n\n if (c === `.`) return this.fire();\n\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n !this.done || (!this.done && !this.placeholder)\n ? color[this.color]().underline(this.rendered) : this.rendered\n ].join(` `);\n\n // Print error\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n}\n\nmodule.exports = NumberPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst Prompt = require('./prompt');\nconst { clear, figures, style, wrap, entriesToDisplay } = require('../util');\n\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass MultiselectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value\n .filter(e => e.selected);\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return '\\nInstructions:\\n'\n + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n`\n + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n`\n + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '')\n + ` enter/return: Complete answer`;\n }\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: prefix.length, width: this.out.columns });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n }\n\n // shared with autocompleteMultiselect\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, options.length, this.optionsPerPage);\n let prefix, styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n }\n\n // shared with autocomleteMultiselect\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.value);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = MultiselectPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\nclass AutocompletePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number'\n ? opts.initial\n : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = { noMatches: opts.noMatches || 'no matches found' };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number')\n choice = this.choices[this._fb];\n else if (typeof this._fb === 'string')\n choice = { title: this._fb };\n return choice || this._fb || { title: this.i18n.noMatches };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0)\n this.value = getVal(this.suggestions, i);\n else this.value = this.fallback.value;\n this.fire();\n }\n\n async complete(cb) {\n const p = (this.completing = this.suggest(this.input, this.choices));\n const suggestions = await p;\n\n if (this.completing !== p) return;\n this.suggestions = suggestions\n .map((s, i, arr) => ({ title: getTitle(arr, i), value: getVal(arr, i), description: s.description }));\n this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n this.moveSelect(Math.min(l, this.select));\n\n cb && cb();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true; \n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length+1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor-1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor-1;\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor+1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor-1;\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor+1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns })\n }\n }\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.select, this.choices.length, this.limit);\n\n this.outputText = [\n style.symbol(this.done, this.aborted, this.exited),\n color.bold(this.msg),\n style.delimiter(this.completing),\n this.done && this.suggestions[this.select]\n ? this.suggestions[this.select].title\n : this.rendered = this.transform.render(this.input)\n ].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions\n .slice(startIndex, endIndex)\n .map((item, i) => this.renderOption(item,\n this.select === i + startIndex,\n i === 0 && startIndex > 0,\n i + startIndex === endIndex - 1 && endIndex < this.choices.length))\n .join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = AutocompletePrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst MultiselectPrompt = require('./multiselect');\nconst { clear, style, figures } = require('../util');\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts={}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value\n .filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n return false;\n }\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight)\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.filteredOptions);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { erase, cursor } = require('sisteransi');\n\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\nclass ConfirmPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.done ? (this.value ? this.yesMsg : this.noMsg)\n : color.gray(this.initialValue ? this.yesOption : this.noOption)\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = ConfirmPrompt;\n","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};\n","'use strict';\nconst $ = exports;\nconst el = require('./elements');\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts={}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.text = args => toPrompt('TextPrompt', args);\n\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.number = args => toPrompt('NumberPrompt', args);\n\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.date = args => toPrompt('DatePrompt', args);\n\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.toggle = args => toPrompt('TogglePrompt', args);\n\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.select = args => toPrompt('SelectPrompt', args);\n\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(\n choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase())\n);\n\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};\n","'use strict';\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\nconst noop = () => {};\n\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\nasync function prompt(questions=[], { onSubmit=noop, onCancel=noop }={}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = async (question, answer, skipValidation = false) => {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n return question.format ? await question.format(answer, answers) : answer\n };\n\n for (question of questions) {\n ({ name, type } = question);\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = await type(answer, { ...answers }, question)\n question['type'] = type\n }\n if (!type) continue;\n\n // if property is a function, invoke it unless it's a special function\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? await value(answer, { ...answers }, lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n }\n\n // update vars in case they changed\n ({ name, type } = question);\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = await getFormattedAnswer(question, override[question.name]);\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : await prompts[type](question);\n answers[name] = answer = await getFormattedAnswer(question, answer, true);\n quit = await onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(await onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n\n return answers;\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n if (answer instanceof Error) {\n throw answer;\n }\n\n return (answer === undefined) ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, { prompt, prompts, inject, override });\n","function isNodeLT(tar) {\n tar = (Array.isArray(tar) ? tar : tar.split('.')).map(Number);\n let i=0, src=process.versions.node.split('.').map(Number);\n for (; i < tar.length; i++) {\n if (src[i] > tar[i]) return false;\n if (tar[i] > src[i]) return true;\n }\n return false;\n}\n\nmodule.exports =\n isNodeLT('8.6.0')\n ? require('./dist/index.js')\n : require('./lib/index.js');\n","#!/usr/bin/env node\nimport { existsSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport prompts from \"prompts\";\nimport { executeBatch, getBatchExitCode } from \"./batch-executor\";\nimport { CliOptionsError } from \"./errors\";\nimport { OpenApiGenerator } from \"./openapi-generator\";\nimport type { ExecutionMode } from \"./types\";\nimport { loadConfig, mergeConfigWithDefaults } from \"./utils/config-loader\";\n\nconst program = new Command();\n\nprogram\n\t.name(\"openapi-to-zod\")\n\t.description(\"Generate Zod v4 schemas from OpenAPI specifications\")\n\t.version(\"1.0.0\")\n\t.option(\"-c, --config <path>\", \"Path to config file (openapi-to-zod.config.{ts,json})\")\n\t.addHelpText(\n\t\t\"after\",\n\t\t`\nExamples:\n # Create a new config file\n $ openapi-to-zod init\n\n # Generate with auto-discovered config\n $ openapi-to-zod\n\n # Generate with custom config path\n $ openapi-to-zod --config custom.config.ts\n`\n\t)\n\t.action(async options => {\n\t\ttry {\n\t\t\tawait executeConfigMode(options);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CliOptionsError) {\n\t\t\t\tconsole.error(error.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tconsole.error(\"Error:\", error instanceof Error ? error.message : String(error));\n\t\t\tif (error instanceof Error && error.stack) {\n\t\t\t\tconsole.error(\"\\nStack trace:\", error.stack);\n\t\t\t}\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\n// Add init command\nprogram\n\t.command(\"init\")\n\t.description(\"Initialize a new openapi-to-zod configuration file\")\n\t.action(async () => {\n\t\ttry {\n\t\t\tawait initConfigFile();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error:\", error instanceof Error ? error.message : String(error));\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\nprogram.parse();\n\n/**\n * Find OpenAPI spec files in spec/ or specs/ folders\n * @returns Object with files (path + size) and totalCount\n */\nfunction findSpecFiles(): { files: Array<{ path: string; size: string }>; totalCount: number } {\n\tconst specFolders = [\"spec\", \"specs\"];\n\tconst validExtensions = [\".yaml\", \".yml\", \".json\"];\n\tconst excludePatterns = [\"node_modules\", \".git\", \"dist\", \"build\", \"coverage\"];\n\tconst allFiles: Array<{ path: string; size: string }> = [];\n\n\tfor (const folder of specFolders) {\n\t\tif (!existsSync(folder)) continue;\n\n\t\ttry {\n\t\t\tconst entries = readdirSync(folder, { recursive: true, encoding: \"utf-8\" });\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = join(folder, entry as string);\n\n\t\t\t\t// Skip if path contains excluded patterns\n\t\t\t\tif (excludePatterns.some(pattern => fullPath.includes(pattern))) continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tif (!stats.isFile()) continue;\n\n\t\t\t\t\t// Check if file has valid extension\n\t\t\t\t\tconst hasValidExt = validExtensions.some(ext => fullPath.endsWith(ext));\n\t\t\t\t\tif (!hasValidExt) continue;\n\n\t\t\t\t\t// Format file size\n\t\t\t\t\tconst sizeKB = (stats.size / 1024).toFixed(2);\n\t\t\t\t\tallFiles.push({ path: fullPath.replace(/\\\\/g, \"/\"), size: `${sizeKB} KB` });\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\t// Sort alphabetically\n\tallFiles.sort((a, b) => a.path.localeCompare(b.path));\n\n\tconst totalCount = allFiles.length;\n\tconst files = allFiles.slice(0, 20);\n\n\treturn { files, totalCount };\n}\n\n/**\n * Execute config mode (only mode available)\n */\nasync function executeConfigMode(options: { config?: string }): Promise<void> {\n\t// Load config file\n\tconst config = await loadConfig(options.config);\n\n\t// Merge defaults with specs\n\tconst specs = mergeConfigWithDefaults(config);\n\n\t// Determine execution mode\n\tconst executionMode: ExecutionMode = config.executionMode || \"parallel\";\n\n\t// Extract batchSize from first spec's options or use default\n\tconst batchSize = specs[0]?.batchSize ?? 10;\n\n\t// Execute batch with generator factory\n\tconst summary = await executeBatch(specs, executionMode, spec => new OpenApiGenerator(spec), batchSize);\n\n\t// Exit with appropriate code\n\tconst exitCode = getBatchExitCode(summary);\n\tif (exitCode !== 0) {\n\t\tprocess.exit(exitCode);\n\t}\n} /**\n * Initialize a new config file with prompts\n */\nasync function initConfigFile(): Promise<void> {\n\tconsole.log(\"Welcome to openapi-to-zod configuration setup!\\n\");\n\n\t// Check for existing config files\n\tconst configFiles = [\"openapi-to-zod.config.ts\", \"openapi-to-zod.config.json\"];\n\n\tconst existingConfig = configFiles.find(f => existsSync(f));\n\tif (existingConfig) {\n\t\tconst { overwrite } = await prompts({\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"overwrite\",\n\t\t\tmessage: `Config file '${existingConfig}' already exists. Overwrite?`,\n\t\t\tinitial: false,\n\t\t});\n\n\t\tif (!overwrite) {\n\t\t\tconsole.log(\"Initialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Discover spec files\n\tconst { files, totalCount } = findSpecFiles();\n\n\t// Show pagination message if needed\n\tif (totalCount > 20) {\n\t\tconsole.log(`Showing first 20 of ${totalCount} files found. Use manual entry to specify others.\\n`);\n\t}\n\n\tlet inputPath: string;\n\n\tif (files.length > 0) {\n\t\t// Show file selection\n\t\tconst choices = [\n\t\t\t...files.map(f => ({ title: `${f.path} (${f.size})`, value: f.path })),\n\t\t\t{ title: \"→ Enter manually...\", value: \"__MANUAL__\" },\n\t\t];\n\n\t\tconst inputResponse = await prompts({\n\t\t\ttype: \"select\",\n\t\t\tname: \"input\",\n\t\t\tmessage: \"Select OpenAPI spec file (YAML or JSON):\",\n\t\t\tchoices,\n\t\t});\n\n\t\tif (!inputResponse.input) {\n\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (inputResponse.input === \"__MANUAL__\") {\n\t\t\t// Manual entry\n\t\t\tconst manualResponse = await prompts({\n\t\t\t\ttype: \"text\",\n\t\t\t\tname: \"input\",\n\t\t\t\tmessage: \"Input OpenAPI file path (YAML or JSON):\",\n\t\t\t\tinitial: \"openapi.{yaml,yml,json}\",\n\t\t\t\tvalidate: value => {\n\t\t\t\t\tif (value.length === 0) return \"Input path is required\";\n\t\t\t\t\tif (!existsSync(value)) return \"⚠️ File does not exist. Continue anyway?\";\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!manualResponse.input) {\n\t\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinputPath = manualResponse.input;\n\t\t} else {\n\t\t\tinputPath = inputResponse.input;\n\t\t}\n\t} else {\n\t\t// No files found, fall back to text input\n\t\tconst manualResponse = await prompts({\n\t\t\ttype: \"text\",\n\t\t\tname: \"input\",\n\t\t\tmessage: \"Input OpenAPI file path (YAML or JSON):\",\n\t\t\tinitial: \"openapi.{yaml,yml,json}\",\n\t\t\tvalidate: value => {\n\t\t\t\tif (value.length === 0) return \"Input path is required\";\n\t\t\t\tif (!existsSync(value)) return \"⚠️ File does not exist. Continue anyway?\";\n\t\t\t\treturn true;\n\t\t\t},\n\t\t});\n\n\t\tif (!manualResponse.input) {\n\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\n\t\tinputPath = manualResponse.input;\n\t}\n\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: \"text\",\n\t\t\tname: \"output\",\n\t\t\tmessage: \"Output TypeScript file path:\",\n\t\t\tinitial: \"src/schemas.ts\",\n\t\t\tvalidate: value => value.length > 0 || \"Output path is required\",\n\t\t},\n\t\t{\n\t\t\ttype: \"select\",\n\t\t\tname: \"format\",\n\t\t\tmessage: \"Config file format:\",\n\t\t\tchoices: [\n\t\t\t\t{ title: \"TypeScript (recommended)\", value: \"ts\" },\n\t\t\t\t{ title: \"JSON\", value: \"json\" },\n\t\t\t],\n\t\t\tinitial: 0,\n\t\t},\n\t\t{\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"includeDefaults\",\n\t\t\tmessage: \"Include commonly-used recommended defaults?\",\n\t\t\tinitial: true,\n\t\t},\n\t]);\n\n\t// Handle user cancellation (Ctrl+C)\n\tif (!response.output || !response.format) {\n\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\treturn;\n\t}\n\n\tconst { output, format, includeDefaults } = response;\n\tconst input = inputPath;\n\n\t// Generate config content\n\tlet configContent: string;\n\tlet configFilename: string;\n\n\tif (format === \"ts\") {\n\t\tconfigFilename = \"openapi-to-zod.config.ts\";\n\t\tif (includeDefaults) {\n\t\t\tconfigContent = `import { defineConfig } from '@cerios/openapi-to-zod';\n\nexport default defineConfig({\n defaults: {\n mode: 'strict',\n includeDescriptions: true,\n\tuseDescribe: false,\n showStats: true,\n\tschemaType: 'all',\n },\n specs: [\n {\n input: '${input}',\n output: '${output}',\n },\n ],\n});\n`;\n\t\t} else {\n\t\t\tconfigContent = `import { defineConfig } from '@cerios/openapi-to-zod';\n\nexport default defineConfig({\n specs: [\n {\n input: '${input}',\n output: '${output}',\n },\n ],\n});\n`;\n\t\t}\n\t} else {\n\t\tconfigFilename = \"openapi-to-zod.config.json\";\n\t\tconst jsonConfig: any = {\n\t\t\tspecs: [\n\t\t\t\t{\n\t\t\t\t\tinput,\n\t\t\t\t\toutput,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (includeDefaults) {\n\t\t\tjsonConfig.defaults = {\n\t\t\t\tmode: \"strict\",\n\t\t\t\tincludeDescriptions: true,\n\t\t\t\tshowStats: false,\n\t\t\t};\n\t\t}\n\n\t\tconfigContent = `${JSON.stringify(jsonConfig, null, 2)}\\n`;\n\t}\n\n\t// Write config file\n\twriteFileSync(configFilename, configContent, \"utf-8\");\n\n\tconsole.log(`\\n✓ Created ${configFilename}`);\n\tconsole.log(\"\\nNext steps:\");\n\tconsole.log(\" 1. Review and customize your config file if needed\");\n\tconsole.log(\" 2. Run 'openapi-to-zod' to generate schemas\\n\");\n\n\t// Random fun messages\n\tconst ceriosMessages = [\n\t\t\"Things just got Cerios!\",\n\t\t\"Getting Cerios about schemas!\",\n\t\t\"Cerios business ahead!\",\n\t\t\"Don't take it too Cerios-ly!\",\n\t\t\"Time to get Cerios!\",\n\t\t\"We're dead Cerios about types!\",\n\t\t\"This is Cerios-ly awesome!\",\n\t\t\"Cerios-ly, you're all set!\",\n\t\t\"You are Cerios right now!\",\n\t\t\"Cerios vibes only!\",\n\t];\n\tconst randomMessage = ceriosMessages[Math.floor(Math.random() * ceriosMessages.length)];\n\tconsole.log(`${randomMessage}\\n`);\n}\n","import { ConfigurationError } from \"./errors\";\nimport type { ExecutionMode } from \"./types\";\n\n/**\n * @shared Generator interface for batch execution\n * @since 1.0.0\n * Interface that both OpenApiGenerator and OpenApiPlaywrightGenerator must implement\n */\nexport interface Generator {\n\tgenerate(): void;\n}\n\n/**\n * Result of processing a single spec\n */\ninterface SpecResult<T> {\n\tspec: T;\n\tsuccess: boolean;\n\terror?: string;\n}\n\n/**\n * Summary of batch execution results\n */\ninterface BatchExecutionSummary<T> {\n\ttotal: number;\n\tsuccessful: number;\n\tfailed: number;\n\tresults: SpecResult<T>[];\n}\n\n/**\n * Process a single spec and return result with error handling\n */\nasync function processSpec<T>(\n\tspec: T,\n\tindex: number,\n\ttotal: number,\n\tcreateGenerator: (spec: T) => Generator\n): Promise<SpecResult<T>> {\n\t// Live progress to stdout\n\tconst specInput = (spec as any).input || \"spec\";\n\tconst specOutput = (spec as any).output || \"output\";\n\tconsole.log(`Processing [${index + 1}/${total}] ${specInput}...`);\n\n\ttry {\n\t\tconst generator = createGenerator(spec);\n\t\tgenerator.generate();\n\n\t\treturn {\n\t\t\tspec,\n\t\t\tsuccess: true,\n\t\t};\n\t} catch (error) {\n\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\tconsole.error(`✗ Failed to generate ${specOutput}: ${errorMessage}`);\n\n\t\treturn {\n\t\t\tspec,\n\t\t\tsuccess: false,\n\t\t\terror: errorMessage,\n\t\t};\n\t}\n}\n\n/**\n * Execute specs in parallel using Promise.allSettled with configurable batch size\n * Processes specifications in batches to control memory usage and concurrency\n * Continues processing all specs even if some fail\n */\nasync function executeParallel<T>(\n\tspecs: T[],\n\tcreateGenerator: (spec: T) => Generator,\n\tbatchSize: number\n): Promise<SpecResult<T>[]> {\n\tconsole.log(`\\nExecuting ${specs.length} specification(s) in parallel (batch size: ${batchSize})...\\n`);\n\n\tconst results: SpecResult<T>[] = [];\n\n\t// Process in batches to control memory usage\n\tfor (let i = 0; i < specs.length; i += batchSize) {\n\t\tconst batch = specs.slice(i, Math.min(i + batchSize, specs.length));\n\t\tconst batchPromises = batch.map((spec, batchIndex) =>\n\t\t\tprocessSpec(spec, i + batchIndex, specs.length, createGenerator)\n\t\t);\n\n\t\tconst batchResults = await Promise.allSettled(batchPromises);\n\n\t\t// Convert settled results to SpecResult\n\t\tfor (let j = 0; j < batchResults.length; j++) {\n\t\t\tconst result = batchResults[j];\n\t\t\tif (result.status === \"fulfilled\") {\n\t\t\t\tresults.push(result.value);\n\t\t\t} else {\n\t\t\t\t// Handle unexpected promise rejection\n\t\t\t\tresults.push({\n\t\t\t\t\tspec: batch[j],\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: result.reason instanceof Error ? result.reason.message : String(result.reason),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n}\n\n/**\n * Execute specs sequentially one at a time\n * Continues processing all specs even if some fail\n */\nasync function executeSequential<T>(specs: T[], createGenerator: (spec: T) => Generator): Promise<SpecResult<T>[]> {\n\tconsole.log(`\\nExecuting ${specs.length} spec(s) sequentially...\\n`);\n\n\tconst results: SpecResult<T>[] = [];\n\n\tfor (let i = 0; i < specs.length; i++) {\n\t\tconst result = await processSpec(specs[i], i, specs.length, createGenerator);\n\t\tresults.push(result);\n\t}\n\n\treturn results;\n}\n\n/**\n * Print final summary of batch execution\n */\nfunction printSummary<T>(summary: BatchExecutionSummary<T>): void {\n\tconsole.log(`\\n${\"=\".repeat(50)}`);\n\tconsole.log(\"Batch Execution Summary\");\n\tconsole.log(\"=\".repeat(50));\n\tconsole.log(`Total specs: ${summary.total}`);\n\tconsole.log(`Successful: ${summary.successful}`);\n\tconsole.log(`Failed: ${summary.failed}`);\n\n\tif (summary.failed > 0) {\n\t\tconsole.log(\"\\nFailed specs:\");\n\t\tfor (const result of summary.results) {\n\t\t\tif (!result.success) {\n\t\t\t\tconst specInput = (result.spec as any).input || \"spec\";\n\t\t\t\tconsole.error(` ✗ ${specInput}`);\n\t\t\t\tconsole.error(` Error: ${result.error}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tconsole.log(`${\"=\".repeat(50)}\\n`);\n}\n\n/**\n * @shared Execute batch processing of multiple specs with custom generator\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * @param specs - Array of spec configurations to process\n * @param executionMode - Execution mode: \"parallel\" (default) or \"sequential\"\n * @param createGenerator - Factory function to create generator from spec\n * @param batchSize - Number of specifications to process concurrently in parallel mode\n * @returns BatchExecutionSummary with results\n * @throws Never throws - collects all errors and reports them\n */\nexport async function executeBatch<T>(\n\tspecs: T[],\n\texecutionMode: ExecutionMode = \"parallel\",\n\tcreateGenerator: (spec: T) => Generator,\n\tbatchSize: number\n): Promise<BatchExecutionSummary<T>> {\n\tif (specs.length === 0) {\n\t\tthrow new ConfigurationError(\"No specs provided for batch execution\", { specsCount: 0, executionMode });\n\t}\n\n\tlet results: SpecResult<T>[] = [];\n\n\ttry {\n\t\t// Execute based on mode\n\t\tresults =\n\t\t\texecutionMode === \"parallel\"\n\t\t\t\t? await executeParallel(specs, createGenerator, batchSize)\n\t\t\t\t: await executeSequential(specs, createGenerator);\n\n\t\t// Calculate summary\n\t\tconst summary: BatchExecutionSummary<T> = {\n\t\t\ttotal: results.length,\n\t\t\tsuccessful: results.filter(r => r.success).length,\n\t\t\tfailed: results.filter(r => !r.success).length,\n\t\t\tresults,\n\t\t};\n\n\t\t// Print summary\n\t\tprintSummary(summary);\n\n\t\treturn summary;\n\t} finally {\n\t\t// Memory leak prevention: Clear large result objects and hint GC for large batches\n\t\tif (results.length > batchSize) {\n\t\t\t// Clear spec references to allow GC\n\t\t\tfor (const result of results) {\n\t\t\t\t// Keep only essential info, clear large objects\n\t\t\t\tif (result.spec) {\n\t\t\t\t\t(result.spec as any) = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hint to V8 garbage collector for large batches (if available)\n\t\t\tif (global.gc) {\n\t\t\t\tglobal.gc();\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Determine exit code based on batch execution results\n * Returns 1 if any spec failed, 0 if all succeeded\n */\nexport function getBatchExitCode<T>(summary: BatchExecutionSummary<T>): number {\n\treturn summary.failed > 0 ? 1 : 0;\n}\n","/**\n * Custom error classes for better error handling and debugging\n */\n\n/**\n * Base error class for all generator errors\n */\nexport class GeneratorError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly code: string,\n\t\tpublic readonly context?: Record<string, unknown>\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"GeneratorError\";\n\t\tError.captureStackTrace?.(this, this.constructor);\n\t}\n}\n\n/**\n * Error thrown when OpenAPI spec validation fails\n */\nexport class SpecValidationError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"SPEC_VALIDATION_ERROR\", context);\n\t\tthis.name = \"SpecValidationError\";\n\t}\n}\n\n/**\n * Error thrown when file operations fail\n */\nexport class FileOperationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly filePath: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"FILE_OPERATION_ERROR\", { ...context, filePath });\n\t\tthis.name = \"FileOperationError\";\n\t}\n}\n\n/**\n * Error thrown when config file is invalid\n */\nexport class ConfigValidationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly configPath?: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"CONFIG_VALIDATION_ERROR\", { ...context, configPath });\n\t\tthis.name = \"ConfigValidationError\";\n\t}\n}\n\n/**\n * Error thrown when schema generation fails\n */\nexport class SchemaGenerationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly schemaName: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"SCHEMA_GENERATION_ERROR\", { ...context, schemaName });\n\t\tthis.name = \"SchemaGenerationError\";\n\t}\n}\n\n/**\n * Error thrown when circular reference is detected in schema\n */\nexport class CircularReferenceError extends SchemaGenerationError {\n\tconstructor(\n\t\tschemaName: string,\n\t\tpublic readonly referencePath: string[]\n\t) {\n\t\tconst pathStr = referencePath.join(\" -> \");\n\t\tsuper(`Circular reference detected in schema: ${pathStr}`, schemaName, { referencePath, circularPath: pathStr });\n\t\tthis.name = \"CircularReferenceError\";\n\t}\n}\n\n/**\n * Error thrown when CLI options are invalid\n */\nexport class CliOptionsError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"CLI_OPTIONS_ERROR\", context);\n\t\tthis.name = \"CliOptionsError\";\n\t}\n}\n\n/**\n * Error thrown when configuration is invalid or missing required values\n */\nexport class ConfigurationError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"CONFIGURATION_ERROR\", context);\n\t\tthis.name = \"ConfigurationError\";\n\t}\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, normalize } from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { parse } from \"yaml\";\nimport { ConfigurationError, FileOperationError, SchemaGenerationError, SpecValidationError } from \"./errors\";\nimport { generateEnum } from \"./generators/enum-generator\";\nimport { generateJSDoc } from \"./generators/jsdoc-generator\";\nimport { PropertyGenerator } from \"./generators/property-generator\";\nimport type { OpenAPISchema, OpenAPISpec, OpenApiGeneratorOptions, ResolvedOptions } from \"./types\";\nimport { resolveRef, toCamelCase, toPascalCase } from \"./utils/name-utils\";\nimport {\n\tcreateFilterStatistics,\n\ttype FilterStatistics,\n\tformatFilterStatistics,\n\tshouldIncludeOperation,\n\tvalidateFilters,\n} from \"./utils/operation-filters\";\nimport { stripPathPrefix, stripPrefix } from \"./utils/pattern-utils\";\nimport { mergeParameters } from \"./utils/ref-resolver\";\nimport { configureDateTimeFormat, configurePatternCache } from \"./validators/string-validator\";\n\ntype SchemaContext = \"request\" | \"response\" | \"both\";\n\nexport class OpenApiGenerator {\n\tprivate schemas: Map<string, string> = new Map();\n\tprivate types: Map<string, string> = new Map();\n\tprivate schemaDependencies: Map<string, Set<string>> = new Map();\n\tprivate options: OpenApiGeneratorOptions;\n\tprivate spec: OpenAPISpec;\n\tprivate propertyGenerator: PropertyGenerator;\n\tprivate schemaUsageMap: Map<string, SchemaContext> = new Map();\n\tprivate requestOptions: ResolvedOptions;\n\tprivate responseOptions: ResolvedOptions;\n\tprivate needsZodImport = true;\n\tprivate filterStats: FilterStatistics = createFilterStatistics();\n\n\tconstructor(options: OpenApiGeneratorOptions) {\n\t\t// Validate input path early\n\t\tif (!options.input) {\n\t\t\tthrow new ConfigurationError(\"Input path is required\", { providedOptions: options });\n\t\t}\n\n\t\tthis.options = {\n\t\t\tmode: options.mode || \"normal\",\n\t\t\tinput: options.input,\n\t\t\toutput: options.output,\n\t\t\tincludeDescriptions: options.includeDescriptions ?? true,\n\t\t\tuseDescribe: options.useDescribe ?? false,\n\t\t\tdefaultNullable: options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: options.emptyObjectBehavior ?? \"loose\",\n\t\t\tschemaType: options.schemaType || \"all\",\n\t\t\tprefix: options.prefix,\n\t\t\tsuffix: options.suffix,\n\t\t\tstripSchemaPrefix: options.stripSchemaPrefix,\n\t\t\tstripPathPrefix: options.stripPathPrefix,\n\t\t\tshowStats: options.showStats ?? true,\n\t\t\trequest: options.request,\n\t\t\tresponse: options.response,\n\t\t\toperationFilters: options.operationFilters,\n\t\t\tignoreHeaders: options.ignoreHeaders,\n\t\t\tcacheSize: options.cacheSize ?? 1000,\n\t\t\tbatchSize: options.batchSize ?? 10,\n\t\t\tcustomDateTimeFormatRegex: options.customDateTimeFormatRegex,\n\t\t};\n\n\t\t// Configure pattern cache size if specified\n\t\tif (this.options.cacheSize) {\n\t\t\tconfigurePatternCache(this.options.cacheSize);\n\t\t}\n\n\t\t// Configure custom date-time format if specified\n\t\tif (this.options.customDateTimeFormatRegex) {\n\t\t\tconfigureDateTimeFormat(this.options.customDateTimeFormatRegex);\n\t\t}\n\n\t\t// Validate input file exists\n\t\ttry {\n\t\t\tconst fs = require(\"node:fs\");\n\t\t\tif (!fs.existsSync(this.options.input)) {\n\t\t\t\tthrow new FileOperationError(`Input file not found: ${this.options.input}`, this.options.input);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileOperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\t// If fs.existsSync fails for another reason, continue and let readFileSync throw\n\t\t}\n\n\t\ttry {\n\t\t\tconst content = readFileSync(this.options.input, \"utf-8\");\n\n\t\t\t// Try parsing as YAML first (works for both YAML and JSON)\n\t\t\ttry {\n\t\t\t\tthis.spec = parse(content);\n\t\t\t} catch (yamlError) {\n\t\t\t\t// If YAML parsing fails, try JSON\n\t\t\t\ttry {\n\t\t\t\t\tthis.spec = JSON.parse(content);\n\t\t\t\t} catch {\n\t\t\t\t\tif (yamlError instanceof Error) {\n\t\t\t\t\t\tconst errorMessage = [\n\t\t\t\t\t\t\t`Failed to parse OpenAPI specification from: ${this.options.input}`,\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t`Error: ${yamlError.message}`,\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\"Please ensure:\",\n\t\t\t\t\t\t\t\" - The file exists and is readable\",\n\t\t\t\t\t\t\t\" - The file contains valid YAML or JSON syntax\",\n\t\t\t\t\t\t\t\" - The file is a valid OpenAPI 3.x specification\",\n\t\t\t\t\t\t].join(\"\\n\");\n\t\t\t\t\t\tthrow new SpecValidationError(errorMessage, {\n\t\t\t\t\t\t\tfilePath: this.options.input,\n\t\t\t\t\t\t\toriginalError: yamlError.message,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow yamlError;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof SpecValidationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (error instanceof Error) {\n\t\t\t\tconst errorMessage = [\n\t\t\t\t\t`Failed to read OpenAPI specification from: ${this.options.input}`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t`Error: ${error.message}`,\n\t\t\t\t].join(\"\\n\");\n\t\t\t\tthrow new SpecValidationError(errorMessage, { filePath: this.options.input, originalError: error.message });\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tthis.validateSpec();\n\n\t\t// Resolve options for request and response contexts\n\t\tthis.requestOptions = this.resolveOptionsForContext(\"request\");\n\t\tthis.responseOptions = this.resolveOptionsForContext(\"response\");\n\n\t\t// Analyze schema usage to determine context (request/response/both)\n\t\tthis.analyzeSchemaUsage();\n\n\t\t// Initialize property generator with context\n\t\t// We'll update this dynamically based on schema context during generation\n\t\tthis.propertyGenerator = new PropertyGenerator({\n\t\t\tspec: this.spec,\n\t\t\tschemaDependencies: this.schemaDependencies,\n\t\t\tschemaType: this.options.schemaType || \"all\",\n\t\t\tmode: this.requestOptions.mode,\n\t\t\tincludeDescriptions: this.requestOptions.includeDescriptions,\n\t\t\tuseDescribe: this.requestOptions.useDescribe,\n\t\t\tdefaultNullable: this.options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: this.options.emptyObjectBehavior ?? \"loose\",\n\t\t\tnamingOptions: {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t},\n\t\t\tstripSchemaPrefix: this.options.stripSchemaPrefix,\n\t\t});\n\t}\n\n\t/**\n\t * Generate schemas as a string (without writing to file)\n\t * @returns The generated TypeScript code as a string\n\t */\n\tgenerateString(): string {\n\t\tif (!this.spec.components?.schemas) {\n\t\t\tthrow new SpecValidationError(\"No schemas found in OpenAPI spec\", { filePath: this.options.input });\n\t\t}\n\n\t\t// Generate schemas and track dependencies\n\t\tfor (const [name, schema] of Object.entries(this.spec.components.schemas)) {\n\t\t\t// Skip schemas not referenced by filtered operations when operation filters are active\n\t\t\tif (this.options.operationFilters && this.schemaUsageMap.size > 0 && !this.schemaUsageMap.has(name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.generateComponentSchema(name, schema);\n\t\t}\n\n\t\t// Generate query parameter schemas from path operations\n\t\tthis.generateQueryParameterSchemas();\n\n\t\t// Generate header parameter schemas from path operations\n\t\tthis.generateHeaderParameterSchemas();\n\n\t\t// Validate filters and emit warnings if needed\n\t\tvalidateFilters(this.filterStats, this.options.operationFilters);\n\n\t\t// Sort schemas by dependencies\n\t\tconst orderedSchemaNames = this.topologicalSort();\n\n\t\t// Build output\n\t\tconst output: string[] = [\"// Auto-generated by @cerios/openapi-to-zod\", \"// Do not edit this file manually\", \"\"];\n\n\t\t// Add statistics if enabled (must be explicitly true)\n\t\tif (this.options.showStats === true) {\n\t\t\toutput.push(...this.generateStats());\n\t\t\toutput.push(\"\");\n\t\t}\n\n\t\t// Conditionally import Zod only if needed\n\t\tif (this.needsZodImport) {\n\t\t\toutput.push('import { z } from \"zod\";');\n\t\t\toutput.push(\"\");\n\t\t}\n\n\t\t// Add schemas and types in dependency order\n\t\toutput.push(\"// Schemas and Types\");\n\t\tfor (const name of orderedSchemaNames) {\n\t\t\tconst schemaCode = this.schemas.get(name);\n\t\t\tconst typeCode = this.types.get(name);\n\n\t\t\tif (schemaCode) {\n\t\t\t\t// Zod schema with inferred type\n\t\t\t\toutput.push(schemaCode);\n\n\t\t\t\t// Add type immediately after schema (if not already included)\n\t\t\t\t// Convert schema name to valid TypeScript type name (handles dotted names)\n\t\t\t\t// Apply stripSchemaPrefix before type name generation\n\t\t\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\t\t\t\tconst typeName = toPascalCase(strippedName);\n\t\t\t\tif (!schemaCode.includes(`export type ${typeName}`)) {\n\t\t\t\t\tconst schemaName = `${toCamelCase(strippedName, { prefix: this.options.prefix, suffix: this.options.suffix })}Schema`;\n\t\t\t\t\toutput.push(`export type ${typeName} = z.infer<typeof ${schemaName}>;`);\n\t\t\t\t}\n\t\t\t\toutput.push(\"\");\n\t\t\t} else if (typeCode) {\n\t\t\t\t// Type only (shouldn't happen in Zod-only mode, but kept for safety)\n\t\t\t\toutput.push(typeCode);\n\t\t\t\toutput.push(\"\");\n\t\t\t}\n\t\t}\n\t\treturn output.join(\"\\n\");\n\t}\n\n\t/**\n\t * Ensure directory exists for a file path\n\t */\n\tprivate ensureDirectoryExists(filePath: string): void {\n\t\tconst normalizedPath = normalize(filePath);\n\t\tconst dir = dirname(normalizedPath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\t}\n\n\t/**\n\t * Generate the complete output file\n\t */\n\tgenerate(): void {\n\t\tconst output = this.generateString();\n\t\tconst normalizedOutput = normalize(this.options.output);\n\t\tthis.ensureDirectoryExists(normalizedOutput);\n\t\twriteFileSync(normalizedOutput, output);\n\t\tconsole.log(` ✓ Generated ${normalizedOutput}`);\n\t}\n\n\t/**\n\t * Resolve options for a specific context (request or response)\n\t * Nested options silently override root-level options\n\t */\n\tprivate resolveOptionsForContext(context: \"request\" | \"response\"): ResolvedOptions {\n\t\tconst contextOptions = context === \"request\" ? this.options.request : this.options.response;\n\n\t\treturn {\n\t\t\tmode: contextOptions?.mode ?? this.options.mode ?? \"normal\",\n\t\t\tuseDescribe: contextOptions?.useDescribe ?? this.options.useDescribe ?? false,\n\t\t\tincludeDescriptions: contextOptions?.includeDescriptions ?? this.options.includeDescriptions ?? true,\n\t\t};\n\t}\n\n\t/**\n\t * Analyze schema usage across the OpenAPI spec to determine if schemas\n\t * are used in request, response, or both contexts\n\t */\n\tprivate analyzeSchemaUsage(): void {\n\t\tconst requestSchemas = new Set<string>();\n\t\tconst responseSchemas = new Set<string>();\n\n\t\t// Analyze paths section if available\n\t\tif (this.spec.paths) {\n\t\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\t\t\t\tfor (const method of methods) {\n\t\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\t\tif (typeof operation !== \"object\" || !operation) continue;\n\n\t\t\t\t\t// Track total operations\n\t\t\t\t\tthis.filterStats.totalOperations++;\n\n\t\t\t\t\t// Apply operation filters\n\t\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters, this.filterStats)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Count included operation\n\t\t\t\t\tthis.filterStats.includedOperations++;\n\n\t\t\t\t\t// Check request bodies\n\t\t\t\t\tif (\n\t\t\t\t\t\t\"requestBody\" in operation &&\n\t\t\t\t\t\toperation.requestBody &&\n\t\t\t\t\t\ttypeof operation.requestBody === \"object\" &&\n\t\t\t\t\t\t\"content\" in operation.requestBody &&\n\t\t\t\t\t\toperation.requestBody.content\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const mediaType of Object.values(operation.requestBody.content)) {\n\t\t\t\t\t\t\tif (mediaType && typeof mediaType === \"object\" && \"schema\" in mediaType && mediaType.schema) {\n\t\t\t\t\t\t\t\tthis.extractSchemaRefs(mediaType.schema, requestSchemas);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check responses\n\t\t\t\t\tif (\"responses\" in operation && operation.responses && typeof operation.responses === \"object\") {\n\t\t\t\t\t\tfor (const response of Object.values(operation.responses)) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tresponse &&\n\t\t\t\t\t\t\t\ttypeof response === \"object\" &&\n\t\t\t\t\t\t\t\t\"content\" in response &&\n\t\t\t\t\t\t\t\tresponse.content &&\n\t\t\t\t\t\t\t\ttypeof response.content === \"object\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfor (const mediaType of Object.values(response.content)) {\n\t\t\t\t\t\t\t\t\tif (mediaType && typeof mediaType === \"object\" && \"schema\" in mediaType && mediaType.schema) {\n\t\t\t\t\t\t\t\t\t\tthis.extractSchemaRefs(mediaType.schema, responseSchemas);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check parameters\n\t\t\t\t\tif (\"parameters\" in operation && Array.isArray(operation.parameters)) {\n\t\t\t\t\t\tfor (const param of operation.parameters) {\n\t\t\t\t\t\t\tif (param && typeof param === \"object\" && \"schema\" in param && param.schema) {\n\t\t\t\t\t\t\t\tthis.extractSchemaRefs(param.schema, requestSchemas);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Expand to include all transitively referenced schemas\n\t\t\tthis.expandTransitiveReferences(requestSchemas);\n\t\t\tthis.expandTransitiveReferences(responseSchemas);\n\t\t}\n\n\t\t// Fallback: analyze readOnly/writeOnly properties if paths not available\n\t\tif (!this.spec.paths || (requestSchemas.size === 0 && responseSchemas.size === 0)) {\n\t\t\tfor (const [name, schema] of Object.entries(this.spec.components?.schemas || {})) {\n\t\t\t\tconst hasReadOnly = this.hasReadOnlyProperties(schema);\n\t\t\t\tconst hasWriteOnly = this.hasWriteOnlyProperties(schema);\n\n\t\t\t\tif (hasWriteOnly && !hasReadOnly) {\n\t\t\t\t\trequestSchemas.add(name);\n\t\t\t\t} else if (hasReadOnly && !hasWriteOnly) {\n\t\t\t\t\tresponseSchemas.add(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Build usage map with circular reference detection\n\t\tfor (const [name] of Object.entries(this.spec.components?.schemas || {})) {\n\t\t\tif (requestSchemas.has(name) && responseSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"both\");\n\t\t\t} else if (requestSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"request\");\n\t\t\t} else if (responseSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"response\");\n\t\t\t}\n\t\t\t// Unreferenced schemas are not added to map (will use root typeMode)\n\t\t}\n\n\t\t// Detect circular references and mark entire chain as \"both\"\n\t\tthis.detectCircularReferences();\n\t}\n\n\t/**\n\t * Expand a set of schemas to include all transitively referenced schemas\n\t */\n\tprivate expandTransitiveReferences(schemas: Set<string>): void {\n\t\tconst toProcess = Array.from(schemas);\n\t\tconst processed = new Set<string>();\n\n\t\twhile (toProcess.length > 0) {\n\t\t\tconst schemaName = toProcess.pop();\n\t\t\tif (!schemaName || processed.has(schemaName)) continue;\n\n\t\t\tprocessed.add(schemaName);\n\n\t\t\tconst schema = this.spec.components?.schemas?.[schemaName];\n\t\t\tif (schema) {\n\t\t\t\tconst refs = new Set<string>();\n\t\t\t\tthis.extractSchemaRefs(schema, refs);\n\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\tif (!schemas.has(ref)) {\n\t\t\t\t\t\tschemas.add(ref);\n\t\t\t\t\t\ttoProcess.push(ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Extract schema names from $ref and nested structures\n\t */\n\tprivate extractSchemaRefs(schema: any, refs: Set<string>): void {\n\t\tif (!schema) return;\n\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\trefs.add(refName);\n\t\t}\n\n\t\tif (schema.allOf) {\n\t\t\tfor (const subSchema of schema.allOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.oneOf) {\n\t\t\tfor (const subSchema of schema.oneOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.anyOf) {\n\t\t\tfor (const subSchema of schema.anyOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.items) {\n\t\t\tthis.extractSchemaRefs(schema.items, refs);\n\t\t}\n\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tthis.extractSchemaRefs(prop, refs);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check if schema has readOnly properties\n\t */\n\tprivate hasReadOnlyProperties(schema: OpenAPISchema): boolean {\n\t\tif (schema.readOnly) return true;\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tif (this.hasReadOnlyProperties(prop)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Check if schema has writeOnly properties\n\t */\n\tprivate hasWriteOnlyProperties(schema: OpenAPISchema): boolean {\n\t\tif (schema.writeOnly) return true;\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tif (this.hasWriteOnlyProperties(prop)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Detect circular references and mark them as \"both\" context for safety\n\t */\n\tprivate detectCircularReferences(): void {\n\t\tconst visited = new Set<string>();\n\t\tconst recursionStack = new Set<string>();\n\n\t\tconst detectCycle = (name: string): boolean => {\n\t\t\tif (recursionStack.has(name)) {\n\t\t\t\t// Found a cycle - mark all schemas in the cycle as \"both\"\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (visited.has(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvisited.add(name);\n\t\t\trecursionStack.add(name);\n\n\t\t\tconst schema = this.spec.components?.schemas?.[name];\n\t\t\tif (schema) {\n\t\t\t\tconst refs = new Set<string>();\n\t\t\t\tthis.extractSchemaRefs(schema, refs);\n\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\tif (detectCycle(ref)) {\n\t\t\t\t\t\t// Mark this schema as \"both\" since it's part of a circular chain\n\t\t\t\t\t\tthis.schemaUsageMap.set(name, \"both\");\n\t\t\t\t\t\trecursionStack.delete(name);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trecursionStack.delete(name);\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (const name of Object.keys(this.spec.components?.schemas || {})) {\n\t\t\tdetectCycle(name);\n\t\t}\n\t}\n\n\t/**\n\t * Validate the OpenAPI specification\n\t */\n\tprivate validateSpec(): void {\n\t\tif (!this.spec.components?.schemas) {\n\t\t\tthrow new SpecValidationError(\n\t\t\t\t`No schemas found in OpenAPI spec at ${this.options.input}. Expected to find schemas at components.schemas`,\n\t\t\t\t{ filePath: this.options.input }\n\t\t\t);\n\t\t}\n\n\t\t// Validate all $refs can be resolved\n\t\tconst allSchemas = Object.keys(this.spec.components.schemas);\n\t\tfor (const [name, schema] of Object.entries(this.spec.components.schemas)) {\n\t\t\ttry {\n\t\t\t\tthis.validateSchemaRefs(name, schema, allSchemas);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tthrow new SchemaGenerationError(`Invalid schema '${name}': ${error.message}`, name, {\n\t\t\t\t\t\toriginalError: error.message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate all $ref references in a schema\n\t */\n\tprivate validateSchemaRefs(schemaName: string, schema: OpenAPISchema, allSchemas: string[], path = \"\"): void {\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\tif (!allSchemas.includes(refName)) {\n\t\t\t\tthrow new SpecValidationError(\n\t\t\t\t\t`Invalid reference${path ? ` at '${path}'` : \"\"}: ` +\n\t\t\t\t\t\t`'${schema.$ref}' points to non-existent schema '${refName}'`,\n\t\t\t\t\t{ schemaName, path, ref: schema.$ref, refName }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Recursively validate nested schemas\n\t\tif (schema.properties) {\n\t\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t\tthis.validateSchemaRefs(schemaName, propSchema, allSchemas, path ? `${path}.${propName}` : propName);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.items) {\n\t\t\tthis.validateSchemaRefs(schemaName, schema.items, allSchemas, `${path}[]`);\n\t\t}\n\n\t\tif (schema.prefixItems) {\n\t\t\tschema.prefixItems.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.prefixItems[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.allOf) {\n\t\t\tschema.allOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.allOf[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.oneOf) {\n\t\t\tschema.oneOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.oneOf[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.anyOf) {\n\t\t\tschema.anyOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.anyOf[${i}]`);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Generate schema for a component\n\t */\n\tprivate generateComponentSchema(name: string, schema: OpenAPISchema): void {\n\t\t// Initialize dependencies for this schema\n\t\tif (!this.schemaDependencies.has(name)) {\n\t\t\tthis.schemaDependencies.set(name, new Set());\n\t\t}\n\n\t\tconst context = this.schemaUsageMap.get(name);\n\t\tconst resolvedOptions = context === \"response\" ? this.responseOptions : this.requestOptions;\n\n\t\t// Handle enums at the top level\n\t\tif (schema.enum) {\n\t\t\tconst jsdoc = generateJSDoc(schema, name, { includeDescriptions: resolvedOptions.includeDescriptions });\n\n\t\t\t// Apply stripSchemaPrefix before generating enum\n\t\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\n\t\t\t// Generate Zod enum\n\t\t\tconst { schemaCode, typeCode } = generateEnum(strippedName, schema.enum, {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t});\n\n\t\t\tconst enumSchemaCode = `${jsdoc}${schemaCode}\\n${typeCode}`;\n\t\t\tthis.schemas.set(name, enumSchemaCode);\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate Zod schema\n\t\t// Apply stripSchemaPrefix to get cleaner schema names\n\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\t\tconst schemaName = `${toCamelCase(strippedName, { prefix: this.options.prefix, suffix: this.options.suffix })}Schema`;\n\t\tconst jsdoc = generateJSDoc(schema, name, { includeDescriptions: resolvedOptions.includeDescriptions });\n\n\t\t// For allOf with single $ref, track dependency manually since we simplify it\n\t\tif (schema.allOf && schema.allOf.length === 1 && schema.allOf[0].$ref) {\n\t\t\tconst refName = resolveRef(schema.allOf[0].$ref);\n\t\t\tthis.schemaDependencies.get(name)?.add(refName);\n\t\t}\n\n\t\t// Update property generator context for this schema\n\t\tthis.propertyGenerator = new PropertyGenerator({\n\t\t\tspec: this.spec,\n\t\t\tschemaDependencies: this.schemaDependencies,\n\t\t\tschemaType: this.options.schemaType || \"all\",\n\t\t\tmode: resolvedOptions.mode,\n\t\t\tincludeDescriptions: resolvedOptions.includeDescriptions,\n\t\t\tuseDescribe: resolvedOptions.useDescribe,\n\t\t\tdefaultNullable: this.options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: this.options.emptyObjectBehavior ?? \"loose\",\n\t\t\tnamingOptions: {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t},\n\t\t\tstripSchemaPrefix: this.options.stripSchemaPrefix,\n\t\t});\n\n\t\t// Check if this is just a simple $ref (alias)\n\t\t// Pass isTopLevel=true for top-level schema generation to prevent defaultNullable from applying\n\t\tconst zodSchema = this.propertyGenerator.generatePropertySchema(schema, name, true);\n\t\tconst zodSchemaCode = `${jsdoc}export const ${schemaName} = ${zodSchema};`;\n\n\t\t// Track dependencies from discriminated unions\n\t\t// Extract schema references like \"carSchema, truckSchema\" from discriminatedUnion calls\n\t\tif (zodSchema.includes(\"z.discriminatedUnion(\")) {\n\t\t\tconst match = zodSchema.match(/z\\.discriminatedUnion\\([^,]+,\\s*\\[([^\\]]+)\\]/);\n\t\t\tif (match) {\n\t\t\t\tconst refs = match[1].split(\",\").map(ref => ref.trim());\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\t// Extract schema name from camelCase reference (e.g., \"carSchema\" -> \"Car\")\n\t\t\t\t\tconst depMatch = ref.match(/^([a-z][a-zA-Z0-9]*?)Schema$/);\n\t\t\t\t\tif (depMatch) {\n\t\t\t\t\t\t// Convert camelCase to PascalCase (carSchema -> Car)\n\t\t\t\t\t\tconst depName = depMatch[1].charAt(0).toUpperCase() + depMatch[1].slice(1);\n\t\t\t\t\t\tthis.schemaDependencies.get(name)?.add(depName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.schemas.set(name, zodSchemaCode);\n\t}\n\n\t/**\n\t * Generate query parameter schemas for each operation\n\t */\n\tprivate generateQueryParameterSchemas(): void {\n\t\tif (!this.spec.paths) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\tif (!pathItem || typeof pathItem !== \"object\") continue;\n\n\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\n\t\t\tfor (const method of methods) {\n\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\tif (!operation) continue;\n\n\t\t\t\t// Apply operation filters (stats already tracked in analyzeSchemaUsage)\n\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Merge path-level and operation-level parameters, resolving $refs\n\t\t\t\tconst allParams = mergeParameters(pathItem.parameters, operation.parameters, this.spec);\n\n\t\t\t\t// Filter for query parameters only\n\t\t\t\tconst queryParams = allParams.filter(\n\t\t\t\t\t(param: any) => param && typeof param === \"object\" && param.in === \"query\"\n\t\t\t\t);\n\n\t\t\t\tif (queryParams.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Generate schema name from operationId or path+method fallback\n\t\t\t\tlet pascalOperationId: string;\n\t\t\t\tif (operation.operationId) {\n\t\t\t\t\t// Use toPascalCase only for kebab-case IDs, simple capitalization for camelCase\n\t\t\t\t\tpascalOperationId = operation.operationId.includes(\"-\")\n\t\t\t\t\t\t? toPascalCase(operation.operationId)\n\t\t\t\t\t\t: operation.operationId.charAt(0).toUpperCase() + operation.operationId.slice(1);\n\t\t\t\t} else {\n\t\t\t\t\t// Fallback: generate name from path + method\n\t\t\t\t\t// Apply stripPathPrefix if configured (for consistency with Playwright service generator)\n\t\t\t\t\tconst strippedPath = stripPathPrefix(path, this.options.stripPathPrefix);\n\t\t\t\t\tpascalOperationId = this.generateMethodNameFromPath(method, strippedPath);\n\t\t\t\t}\n\t\t\t\tconst schemaName = `${pascalOperationId}QueryParams`; // Initialize dependencies for this schema\n\t\t\t\tif (!this.schemaDependencies.has(schemaName)) {\n\t\t\t\t\tthis.schemaDependencies.set(schemaName, new Set());\n\t\t\t\t}\n\n\t\t\t\t// Build object schema properties\n\t\t\t\tconst properties: Record<string, string> = {};\n\t\t\t\tconst required: string[] = [];\n\n\t\t\t\tfor (const param of queryParams) {\n\t\t\t\t\tconst paramName = param.name;\n\t\t\t\t\tconst isRequired = param.required === true;\n\t\t\t\t\tconst paramSchema = param.schema;\n\n\t\t\t\t\tif (!paramSchema) continue;\n\n\t\t\t\t\t// Generate Zod schema for this parameter\n\t\t\t\t\tlet zodType = this.generateQueryParamType(paramSchema, param);\n\n\t\t\t\t\t// Handle arrays with serialization styles\n\t\t\t\t\tif (paramSchema.type === \"array\" && paramSchema.items) {\n\t\t\t\t\t\tconst itemType = this.generateQueryParamType(paramSchema.items, param);\n\n\t\t\t\t\t\t// Note: Query param arrays are sent as strings and need to be split on the client side\n\t\t\t\t\t\t// The style is documented but validation is for the array type\n\t\t\t\t\t\tzodType = `z.array(${itemType})`;\n\n\t\t\t\t\t\t// Description is handled by addDescription below\n\t\t\t\t\t} // Add description if available (before .optional())\n\t\t\t\t\tif (param.description && this.requestOptions.includeDescriptions) {\n\t\t\t\t\t\tif (this.requestOptions.useDescribe) {\n\t\t\t\t\t\t\tzodType = `${zodType}.describe(${JSON.stringify(param.description)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Make optional if not required (don't add defaults)\n\t\t\t\t\tif (!isRequired) {\n\t\t\t\t\t\tzodType = `${zodType}.optional()`;\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties[paramName] = zodType;\n\t\t\t\t\tif (isRequired) {\n\t\t\t\t\t\trequired.push(paramName);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Track dependencies from schema references\n\t\t\t\t\tif (paramSchema.$ref) {\n\t\t\t\t\t\tconst refName = resolveRef(paramSchema.$ref);\n\t\t\t\t\t\tthis.schemaDependencies.get(schemaName)?.add(refName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Generate the object schema code\n\t\t\t\tconst objectMode = this.requestOptions.mode;\n\t\t\t\tconst zodMethod = objectMode === \"strict\" ? \"strictObject\" : objectMode === \"loose\" ? \"looseObject\" : \"object\";\n\n\t\t\t\tconst propsCode = Object.entries(properties)\n\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t// Quote property names that contain special characters or are not valid identifiers\n\t\t\t\t\t\tconst needsQuotes = !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key);\n\t\t\t\t\t\tconst quotedKey = needsQuotes ? `\"${key}\"` : key;\n\t\t\t\t\t\treturn ` ${quotedKey}: ${value}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\",\\n\");\n\n\t\t\t\tconst schemaCode = `z.${zodMethod}({\\n${propsCode}\\n})`; // Apply prefix/suffix to the operation name only, then add QueryParams and Schema\n\t\t\t\tconst operationName = pascalOperationId; // Already PascalCase\n\t\t\t\tconst prefixedName = this.options.prefix\n\t\t\t\t\t? `${toPascalCase(this.options.prefix)}${operationName}`\n\t\t\t\t\t: operationName;\n\t\t\t\tconst suffixedName = this.options.suffix ? `${prefixedName}${toPascalCase(this.options.suffix)}` : prefixedName;\n\t\t\t\tconst camelCaseSchemaName = `${suffixedName.charAt(0).toLowerCase() + suffixedName.slice(1)}QueryParamsSchema`;\n\n\t\t\t\t// Generate JSDoc - use operationId if available, otherwise use method + path\n\t\t\t\tconst jsdocOperationName = operation.operationId || `${method.toUpperCase()} ${path}`;\n\t\t\t\tconst jsdoc = `/**\\n * Query parameters for ${jsdocOperationName}\\n */\\n`;\n\t\t\t\tconst fullSchemaCode = `${jsdoc}export const ${camelCaseSchemaName} = ${schemaCode};`;\n\n\t\t\t\tthis.schemas.set(schemaName, fullSchemaCode);\n\t\t\t\tthis.needsZodImport = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generate a PascalCase method name from HTTP method and path\n\t * Used as fallback when operationId is not available\n\t * @internal\n\t */\n\tprivate generateMethodNameFromPath(method: string, path: string): string {\n\t\t// Convert path to PascalCase\n\t\t// e.g., GET /users/{userId}/posts -> GetUsersByUserIdPosts\n\t\t// e.g., GET /api/v0.1/users -> GetApiV01Users\n\t\tconst segments = path\n\t\t\t.split(\"/\")\n\t\t\t.filter(Boolean)\n\t\t\t.map(segment => {\n\t\t\t\tif (segment.startsWith(\"{\") && segment.endsWith(\"}\")) {\n\t\t\t\t\t// Path parameter - convert to \"ByParamName\"\n\t\t\t\t\tconst paramName = segment.slice(1, -1);\n\t\t\t\t\treturn `By${this.capitalizeSegment(paramName)}`;\n\t\t\t\t}\n\t\t\t\t// Regular segment - capitalize and handle special characters\n\t\t\t\treturn this.capitalizeSegment(segment);\n\t\t\t})\n\t\t\t.join(\"\");\n\n\t\t// Capitalize first letter of method\n\t\tconst capitalizedMethod = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();\n\t\treturn `${capitalizedMethod}${segments}`;\n\t}\n\n\t/**\n\t * Capitalizes a path segment, handling special characters like dashes, underscores, and dots\n\t * @internal\n\t */\n\tprivate capitalizeSegment(str: string): string {\n\t\t// Handle kebab-case, snake_case, and dots\n\t\tif (str.includes(\"-\") || str.includes(\"_\") || str.includes(\".\")) {\n\t\t\treturn str\n\t\t\t\t.split(/[-_.]/)\n\t\t\t\t.map(part => {\n\t\t\t\t\tif (!part) return \"\";\n\t\t\t\t\treturn part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();\n\t\t\t\t})\n\t\t\t\t.join(\"\");\n\t\t}\n\n\t\t// Regular word - just capitalize first letter\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\t/**\n\t * Check if a header should be ignored based on filter patterns\n\t * @internal\n\t */\n\tprivate shouldIgnoreHeader(headerName: string): boolean {\n\t\tconst ignorePatterns = this.options.ignoreHeaders;\n\t\tif (!ignorePatterns || ignorePatterns.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (ignorePatterns.includes(\"*\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst headerLower = headerName.toLowerCase();\n\n\t\treturn ignorePatterns.some((pattern: string) => {\n\t\t\tconst patternLower = pattern.toLowerCase();\n\t\t\treturn minimatch(headerLower, patternLower);\n\t\t});\n\t}\n\n\t/**\n\t * Generate header parameter schemas for each operation\n\t * Header parameters are always string type (HTTP header semantics)\n\t */\n\tprivate generateHeaderParameterSchemas(): void {\n\t\tif (!this.spec.paths) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\tif (!pathItem || typeof pathItem !== \"object\") continue;\n\n\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\n\t\t\tfor (const method of methods) {\n\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\tif (!operation) continue;\n\n\t\t\t\t// Apply operation filters\n\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Merge path-level and operation-level parameters, resolving $refs\n\t\t\t\tconst allParams = mergeParameters(pathItem.parameters, operation.parameters, this.spec);\n\n\t\t\t\t// Filter for header parameters only, excluding ignored ones\n\t\t\t\tconst headerParams = allParams.filter(\n\t\t\t\t\t(param: any) =>\n\t\t\t\t\t\tparam && typeof param === \"object\" && param.in === \"header\" && !this.shouldIgnoreHeader(param.name)\n\t\t\t\t);\n\n\t\t\t\tif (headerParams.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Generate schema name from operationId or path+method fallback\n\t\t\t\tlet pascalOperationId: string;\n\t\t\t\tif (operation.operationId) {\n\t\t\t\t\tpascalOperationId = operation.operationId.includes(\"-\")\n\t\t\t\t\t\t? toPascalCase(operation.operationId)\n\t\t\t\t\t\t: operation.operationId.charAt(0).toUpperCase() + operation.operationId.slice(1);\n\t\t\t\t} else {\n\t\t\t\t\t// Fallback: generate name from path + method\n\t\t\t\t\t// Apply stripPathPrefix if configured (for consistency with Playwright service generator)\n\t\t\t\t\tconst strippedPath = stripPathPrefix(path, this.options.stripPathPrefix);\n\t\t\t\t\tpascalOperationId = this.generateMethodNameFromPath(method, strippedPath);\n\t\t\t\t}\n\t\t\t\tconst schemaName = `${pascalOperationId}HeaderParams`;\n\n\t\t\t\t// Initialize dependencies for this schema\n\t\t\t\tif (!this.schemaDependencies.has(schemaName)) {\n\t\t\t\t\tthis.schemaDependencies.set(schemaName, new Set());\n\t\t\t\t}\n\n\t\t\t\t// Build object schema properties (headers are always strings)\n\t\t\t\tconst properties: Record<string, string> = {};\n\n\t\t\t\tfor (const param of headerParams) {\n\t\t\t\t\tconst paramName = param.name;\n\t\t\t\t\tconst paramSchema = param.schema;\n\n\t\t\t\t\tif (!paramSchema) continue;\n\n\t\t\t\t\t// Headers are always strings in HTTP, regardless of schema type\n\t\t\t\t\tlet zodType = \"z.string()\";\n\n\t\t\t\t\t// Add description if available\n\t\t\t\t\tif (param.description && this.requestOptions.includeDescriptions) {\n\t\t\t\t\t\tif (this.requestOptions.useDescribe) {\n\t\t\t\t\t\t\tzodType = `${zodType}.describe(${JSON.stringify(param.description)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Headers are always optional in service layer (as per requirements)\n\t\t\t\t\tzodType = `${zodType}.optional()`;\n\n\t\t\t\t\tproperties[paramName] = zodType;\n\n\t\t\t\t\t// Track dependencies from schema references (if any)\n\t\t\t\t\tif (paramSchema.$ref) {\n\t\t\t\t\t\tconst refName = resolveRef(paramSchema.$ref);\n\t\t\t\t\t\tthis.schemaDependencies.get(schemaName)?.add(refName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Generate the object schema code\n\t\t\t\tconst objectMode = this.requestOptions.mode;\n\t\t\t\tconst zodMethod = objectMode === \"strict\" ? \"strictObject\" : objectMode === \"loose\" ? \"looseObject\" : \"object\";\n\n\t\t\t\tconst propsCode = Object.entries(properties)\n\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t// Quote property names that contain special characters or are not valid identifiers\n\t\t\t\t\t\tconst needsQuotes = !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key);\n\t\t\t\t\t\tconst quotedKey = needsQuotes ? `\"${key}\"` : key;\n\t\t\t\t\t\treturn ` ${quotedKey}: ${value}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\",\\n\");\n\n\t\t\t\tconst schemaCode = `z.${zodMethod}({\\n${propsCode}\\n})`;\n\n\t\t\t\t// Apply prefix/suffix to the operation name only, then add HeaderParams and Schema\n\t\t\t\tconst operationName = pascalOperationId;\n\t\t\t\tconst prefixedName = this.options.prefix\n\t\t\t\t\t? `${toPascalCase(this.options.prefix)}${operationName}`\n\t\t\t\t\t: operationName;\n\t\t\t\tconst suffixedName = this.options.suffix ? `${prefixedName}${toPascalCase(this.options.suffix)}` : prefixedName;\n\t\t\t\tconst camelCaseSchemaName = `${suffixedName.charAt(0).toLowerCase() + suffixedName.slice(1)}HeaderParamsSchema`;\n\n\t\t\t\t// Generate JSDoc - use operationId if available, otherwise use method + path\n\t\t\t\tconst jsdocOperationName = operation.operationId || `${method.toUpperCase()} ${path}`;\n\t\t\t\tconst jsdoc = `/**\\n * Header parameters for ${jsdocOperationName}\\n */\\n`;\n\t\t\t\tconst fullSchemaCode = `${jsdoc}export const ${camelCaseSchemaName} = ${schemaCode};`;\n\n\t\t\t\tthis.schemas.set(schemaName, fullSchemaCode);\n\t\t\t\tthis.needsZodImport = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generate Zod type for a query parameter schema\n\t */\n\tprivate generateQueryParamType(schema: OpenAPISchema, param: any): string {\n\t\t// Handle references\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\t// Apply stripSchemaPrefix to referenced schema names\n\t\t\tconst strippedRefName = stripPrefix(refName, this.options.stripSchemaPrefix);\n\t\t\tconst schemaName = toCamelCase(strippedRefName, { prefix: this.options.prefix, suffix: this.options.suffix });\n\t\t\treturn `${schemaName}Schema`;\n\t\t}\n\n\t\t// Handle enums\n\t\tif (schema.enum) {\n\t\t\t// Check if all values are booleans\n\t\t\tconst allBooleans = schema.enum.every((v: any) => typeof v === \"boolean\");\n\t\t\tif (allBooleans) {\n\t\t\t\treturn \"z.boolean()\";\n\t\t\t}\n\n\t\t\t// Check if all values are strings\n\t\t\tconst allStrings = schema.enum.every((v: any) => typeof v === \"string\");\n\t\t\tif (allStrings) {\n\t\t\t\tconst enumValues = schema.enum.map(v => `\"${v}\"`).join(\", \");\n\t\t\t\treturn `z.enum([${enumValues}])`;\n\t\t\t}\n\n\t\t\t// For numeric or mixed enums, use z.union with z.literal\n\t\t\tconst literalValues = schema.enum\n\t\t\t\t.map((v: any) => {\n\t\t\t\t\tif (typeof v === \"string\") {\n\t\t\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `z.literal(${v})`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\treturn `z.union([${literalValues}])`;\n\t\t}\n\n\t\t// Handle primitive types\n\t\tconst type = schema.type;\n\n\t\tif (type === \"string\") {\n\t\t\t// Use Zod v4 top-level format validators for known formats\n\t\t\tconst formatMap: Record<string, string> = {\n\t\t\t\temail: \"z.email()\",\n\t\t\t\turi: \"z.url()\",\n\t\t\t\turl: \"z.url()\",\n\t\t\t\tuuid: \"z.uuid()\",\n\t\t\t};\n\n\t\t\t// Check if format has a dedicated Zod v4 validator\n\t\t\tif (schema.format && formatMap[schema.format]) {\n\t\t\t\tlet zodType = formatMap[schema.format];\n\t\t\t\t// Add string validations (these still work on format types)\n\t\t\t\tif (schema.minLength !== undefined) zodType = `${zodType}.min(${schema.minLength})`;\n\t\t\t\tif (schema.maxLength !== undefined) zodType = `${zodType}.max(${schema.maxLength})`;\n\t\t\t\tif (schema.pattern) zodType = `${zodType}.regex(/${schema.pattern}/)`;\n\t\t\t\treturn zodType;\n\t\t\t}\n\n\t\t\t// Fallback to z.string() for unknown formats or no format\n\t\t\tlet zodType = \"z.string()\";\n\t\t\tif (schema.minLength !== undefined) zodType = `${zodType}.min(${schema.minLength})`;\n\t\t\tif (schema.maxLength !== undefined) zodType = `${zodType}.max(${schema.maxLength})`;\n\t\t\tif (schema.pattern) zodType = `${zodType}.regex(/${schema.pattern}/)`;\n\t\t\treturn zodType;\n\t\t}\n\n\t\tif (type === \"number\" || type === \"integer\") {\n\t\t\tlet zodType = type === \"integer\" ? \"z.number().int()\" : \"z.number()\";\n\t\t\t// Add number validations\n\t\t\tif (schema.minimum !== undefined) {\n\t\t\t\tzodType = schema.exclusiveMinimum ? `${zodType}.gt(${schema.minimum})` : `${zodType}.gte(${schema.minimum})`;\n\t\t\t}\n\t\t\tif (schema.maximum !== undefined) {\n\t\t\t\tzodType = schema.exclusiveMaximum ? `${zodType}.lt(${schema.maximum})` : `${zodType}.lte(${schema.maximum})`;\n\t\t\t}\n\t\t\treturn zodType;\n\t\t}\n\n\t\tif (type === \"boolean\") {\n\t\t\treturn \"z.boolean()\";\n\t\t}\n\n\t\tif (type === \"array\" && schema.items) {\n\t\t\tconst itemType = this.generateQueryParamType(schema.items, param);\n\t\t\tlet arrayType = `z.array(${itemType})`;\n\t\t\t// Add array validations\n\t\t\tif (schema.minItems !== undefined) arrayType = `${arrayType}.min(${schema.minItems})`;\n\t\t\tif (schema.maxItems !== undefined) arrayType = `${arrayType}.max(${schema.maxItems})`;\n\t\t\treturn arrayType;\n\t\t}\n\n\t\t// Fallback to z.unknown() for unhandled types\n\t\treturn \"z.unknown()\";\n\t}\n\n\t/**\n\t * Topological sort for schema dependencies\n\t * Returns schemas in the order they should be declared\n\t */\n\tprivate topologicalSort(): string[] {\n\t\tconst sorted: string[] = [];\n\t\tconst visited = new Set<string>();\n\t\tconst visiting = new Set<string>();\n\t\tconst aliases: string[] = [];\n\t\tconst circularDeps = new Set<string>(); // Track schemas involved in circular dependencies\n\n\t\t// Performance optimization: Cache schema and type code lookups\n\t\tconst codeCache = new Map<string, string>();\n\t\tfor (const [name, code] of this.schemas) {\n\t\t\tcodeCache.set(name, code);\n\t\t}\n\t\tfor (const [name, code] of this.types) {\n\t\t\tcodeCache.set(name, code);\n\t\t}\n\n\t\tconst visit = (name: string): void => {\n\t\t\tif (visited.has(name)) return;\n\n\t\t\t// Detect circular dependencies\n\t\t\tif (visiting.has(name)) {\n\t\t\t\t// Mark this as a circular dependency but don't add it yet\n\t\t\t\tcircularDeps.add(name);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvisiting.add(name);\n\n\t\t\t// Check if this is a simple alias (just assigns another schema directly)\n\t\t\tconst code = codeCache.get(name) || \"\";\n\t\t\tconst isSimpleAlias =\n\t\t\t\tcode.match(/= (\\w+Schema);$/) !== null &&\n\t\t\t\t!code.includes(\"z.object\") &&\n\t\t\t\t!code.includes(\"z.enum\") &&\n\t\t\t\t!code.includes(\"z.union\") &&\n\t\t\t\t!code.includes(\"z.array\") &&\n\t\t\t\t!code.includes(\".and(\");\n\n\t\t\tif (isSimpleAlias) {\n\t\t\t\t// For simple aliases, just mark as visited and add to aliases list\n\t\t\t\tvisiting.delete(name);\n\t\t\t\tvisited.add(name);\n\t\t\t\taliases.push(name);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Visit dependencies first for non-alias schemas\n\t\t\tconst deps = this.schemaDependencies.get(name);\n\t\t\tif (deps && deps.size > 0) {\n\t\t\t\tfor (const dep of deps) {\n\t\t\t\t\tif (this.schemas.has(dep) || this.types.has(dep)) {\n\t\t\t\t\t\tvisit(dep);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisiting.delete(name);\n\t\t\tvisited.add(name);\n\n\t\t\t// Don't add circular dependencies yet - they need special handling\n\t\t\tif (!circularDeps.has(name)) {\n\t\t\t\tsorted.push(name);\n\t\t\t}\n\t\t};\n\n\t\t// Visit all schemas and types\n\t\tconst allNames = new Set([...this.schemas.keys(), ...this.types.keys()]);\n\t\tfor (const name of allNames) {\n\t\t\tvisit(name);\n\t\t}\n\n\t\t// Add circular dependencies at the end (before aliases)\n\t\t// This ensures they come after their non-circular dependencies\n\t\tfor (const name of circularDeps) {\n\t\t\tif (!visited.has(name)) {\n\t\t\t\tsorted.push(name);\n\t\t\t\tvisited.add(name);\n\t\t\t}\n\t\t}\n\n\t\t// Add aliases at the end\n\t\treturn [...sorted, ...aliases];\n\t}\n\n\t/**\n\t * Generate statistics about the generated schemas\n\t */\n\tprivate generateStats(): string[] {\n\t\tconst stats = {\n\t\t\ttotalSchemas: this.schemas.size,\n\t\t\twithCircularRefs: 0,\n\t\t\twithDiscriminators: 0,\n\t\t\twithConstraints: 0,\n\t\t};\n\n\t\t// Count schemas with special features\n\t\tfor (const code of this.schemas.values()) {\n\t\t\tif (code.includes(\"z.lazy(\")) stats.withCircularRefs++;\n\t\t\tif (code.includes(\"z.discriminatedUnion\")) stats.withDiscriminators++;\n\t\t\tif (code.includes(\".min(\") || code.includes(\".max(\") || code.includes(\".gte(\")) {\n\t\t\t\tstats.withConstraints++;\n\t\t\t}\n\t\t}\n\n\t\tconst output = [\n\t\t\t\"// Generation Statistics:\",\n\t\t\t`// Total schemas: ${stats.totalSchemas}`,\n\t\t\t`// Circular references: ${stats.withCircularRefs}`,\n\t\t\t`// Discriminated unions: ${stats.withDiscriminators}`,\n\t\t\t`// With constraints: ${stats.withConstraints}`,\n\t\t];\n\n\t\t// Add filter statistics if filtering was used\n\t\tif (this.options.operationFilters && this.filterStats.totalOperations > 0) {\n\t\t\toutput.push(\"//\");\n\t\t\tconst filterStatsStr = formatFilterStatistics(this.filterStats);\n\t\t\tfor (const line of filterStatsStr.split(\"\\n\")) {\n\t\t\t\toutput.push(`// ${line}`);\n\t\t\t}\n\t\t}\n\n\t\toutput.push(`// Generated at: ${new Date().toISOString()}`);\n\n\t\treturn output;\n\t}\n}\n","import type { NamingOptions } from \"../utils/name-utils\";\nimport { toCamelCase, toPascalCase } from \"../utils/name-utils\";\n\nexport interface EnumOpenApiGeneratorOptions extends NamingOptions {}\n\nexport interface EnumResult {\n\tschemaCode: string;\n\ttypeCode: string;\n}\n\n/**\n * Generate Zod enum schema\n * - String-only enums: z.enum()\n * - Numeric enums: z.union([z.literal(), ...])\n * - Boolean enums: z.boolean()\n * - Mixed enums: z.union([z.literal(), ...])\n */\nexport function generateEnum(\n\tname: string,\n\tvalues: (string | number | boolean)[],\n\toptions: EnumOpenApiGeneratorOptions\n): EnumResult {\n\tconst schemaName = `${toCamelCase(name, options)}Schema`;\n\tconst typeName = toPascalCase(name);\n\n\t// Check if all values are booleans\n\tconst allBooleans = values.every(v => typeof v === \"boolean\");\n\tif (allBooleans) {\n\t\t// For boolean enums, use z.boolean()\n\t\tconst schemaCode = `export const ${schemaName} = z.boolean();`;\n\t\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\t\treturn { schemaCode, typeCode };\n\t}\n\n\t// Check if all values are strings\n\tconst allStrings = values.every(v => typeof v === \"string\");\n\tif (allStrings) {\n\t\t// z.enum only accepts string values\n\t\tconst enumValues = values.map(v => `\"${v}\"`).join(\", \");\n\t\tconst schemaCode = `export const ${schemaName} = z.enum([${enumValues}]);`;\n\t\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\t\treturn { schemaCode, typeCode };\n\t}\n\n\t// For numeric or mixed enums, use z.union with z.literal\n\tconst literalValues = values\n\t\t.map(v => {\n\t\t\tif (typeof v === \"string\") {\n\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t}\n\t\t\treturn `z.literal(${v})`;\n\t\t})\n\t\t.join(\", \");\n\n\tconst schemaCode = `export const ${schemaName} = z.union([${literalValues}]);`;\n\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\n\treturn { schemaCode, typeCode };\n}\n","/**\n * Name conversion utilities\n */\n\nexport interface NamingOptions {\n\tprefix?: string;\n\tsuffix?: string;\n}\n\n/**\n * Sanitize a string by replacing invalid identifier characters with underscores\n * Preserves dots, hyphens, underscores, and spaces as word separators\n * Example: \"User@Domain\" -> \"User_Domain\"\n * Example: \"User-Data@2024\" -> \"User-Data_2024\"\n */\nfunction sanitizeIdentifier(str: string): string {\n\t// Replace all non-identifier chars (except dots, hyphens, underscores, spaces) with underscores\n\t// Valid identifier chars: letters, digits, underscore\n\t// Preserve: dots, hyphens, underscores, spaces as word separators\n\treturn str.replace(/[^a-zA-Z0-9._\\-\\s]+/g, \"_\");\n}\n\n/**\n * Convert schema name to camelCase with optional prefix/suffix\n * Handles dotted names like \"Company.Models.User\" -> \"companyModelsUser\"\n */\nexport function toCamelCase(str: string, options?: NamingOptions): string {\n\t// Sanitize invalid characters first\n\tconst sanitized = sanitizeIdentifier(str);\n\n\t// Split by dots, hyphens, underscores, and spaces to get words\n\tconst words = sanitized.split(/[.\\-_\\s]+/).filter(word => word.length > 0);\n\n\t// Convert to camelCase: first word lowercase, rest PascalCase\n\tlet name: string;\n\tif (words.length === 0) {\n\t\tname = str.charAt(0).toLowerCase() + str.slice(1);\n\t} else if (words.length === 1) {\n\t\tname = words[0].charAt(0).toLowerCase() + words[0].slice(1);\n\t} else {\n\t\tname =\n\t\t\twords[0].charAt(0).toLowerCase() +\n\t\t\twords[0].slice(1) +\n\t\t\twords\n\t\t\t\t.slice(1)\n\t\t\t\t.map(word => word.charAt(0).toUpperCase() + word.slice(1))\n\t\t\t\t.join(\"\");\n\t}\n\n\t// Add prefix (only lowercase first char for camelCase, preserve rest)\n\tif (options?.prefix) {\n\t\tconst prefix = options.prefix.charAt(0).toLowerCase() + options.prefix.slice(1);\n\t\tname = prefix + name.charAt(0).toUpperCase() + name.slice(1);\n\t}\n\n\t// Add suffix (capitalize first char for proper camelCase, preserve rest)\n\tif (options?.suffix) {\n\t\tconst suffix = options.suffix.charAt(0).toUpperCase() + options.suffix.slice(1);\n\t\tname = name + suffix;\n\t}\n\n\treturn name;\n}\n\n/**\n * @shared Convert enum value to PascalCase and sanitize for TypeScript enum keys\n * @since 1.0.0\n * Utility used by core and playwright packages\n * Handles dotted names like \"Company.Models.User\" -> \"CompanyModelsUser\"\n */\nexport function toPascalCase(str: string | number): string {\n\tconst stringValue = String(str);\n\n\t// Check if it's already a valid PascalCase or camelCase identifier\n\t// (only contains letters, digits, and no special characters)\n\tconst isAlreadyValidCase = /^[a-zA-Z][a-zA-Z0-9]*$/.test(stringValue);\n\n\tif (isAlreadyValidCase) {\n\t\t// Just ensure it starts with uppercase\n\t\treturn stringValue.charAt(0).toUpperCase() + stringValue.slice(1);\n\t}\n\n\t// Sanitize invalid characters first\n\tconst sanitized = sanitizeIdentifier(stringValue);\n\n\t// Split by dots, hyphens, underscores, and spaces to get words\n\tconst words = sanitized.split(/[.\\-_\\s]+/).filter(word => word.length > 0);\n\n\t// Convert all words to PascalCase\n\tlet result: string;\n\tif (words.length === 0) {\n\t\tresult = \"Value\";\n\t} else {\n\t\tresult = words.map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(\"\");\n\t}\n\n\t// Enum keys can't start with a number - prefix with 'N'\n\tif (/^\\d/.test(result)) {\n\t\tresult = `N${result}`;\n\t}\n\n\t// If result is empty or only underscores, use a default\n\tif (!result || /^_+$/.test(result)) {\n\t\treturn \"Value\";\n\t}\n\n\treturn result;\n}\n\n/**\n * Resolve $ref to schema name\n */\nexport function resolveRef(ref: string): string {\n\tconst parts = ref.split(\"/\");\n\treturn parts[parts.length - 1];\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { escapeJSDoc } from \"../utils/string-utils\";\n\nexport interface JSDocOptions {\n\tincludeDescriptions: boolean;\n}\n\n/**\n * Generate JSDoc comment for a schema or property\n * Type-safe with input validation to prevent JSDoc injection\n */\nexport function generateJSDoc(\n\tschema: OpenAPISchema,\n\tname?: string,\n\toptions: JSDocOptions = { includeDescriptions: true }\n): string {\n\t// Type safety: Validate schema input\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn \"\";\n\t}\n\n\tif (!options.includeDescriptions) {\n\t\t// Only add @deprecated if descriptions are disabled\n\t\tif (schema.deprecated) {\n\t\t\treturn \"/** @deprecated */\\n\";\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t// Check if we have anything to document\n\tif (!schema.description && !schema.title && !schema.deprecated && !schema.examples && schema.example === undefined) {\n\t\treturn \"\";\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Add title if different from name (sanitized)\n\tif (schema.title && typeof schema.title === \"string\" && (!name || schema.title !== name)) {\n\t\t// Sanitize title to prevent JSDoc injection\n\t\tconst sanitizedTitle = escapeJSDoc(schema.title).replace(/@/g, \"\\\\@\");\n\t\tparts.push(sanitizedTitle);\n\t}\n\n\t// Add description (sanitized to prevent injection)\n\tif (schema.description && typeof schema.description === \"string\") {\n\t\t// Escape @ symbols and other JSDoc tags to prevent injection\n\t\tconst sanitizedDesc = escapeJSDoc(schema.description).replace(/@/g, \"\\\\@\").replace(/\\*\\//g, \"*\\\\/\");\n\t\tparts.push(sanitizedDesc);\n\t}\n\n\t// Add examples (with type safety)\n\tif (schema.examples && Array.isArray(schema.examples) && schema.examples.length > 0) {\n\t\ttry {\n\t\t\tconst examplesStr = schema.examples.map(ex => JSON.stringify(ex)).join(\", \");\n\t\t\tparts.push(`@example ${examplesStr}`);\n\t\t} catch (error) {\n\t\t\t// Skip examples that can't be serialized\n\t\t\tconsole.warn(\"Warning: Could not serialize schema examples\", error);\n\t\t}\n\t} else if (schema.example !== undefined) {\n\t\ttry {\n\t\t\tparts.push(`@example ${JSON.stringify(schema.example)}`);\n\t\t} catch (error) {\n\t\t\t// Skip example that can't be serialized\n\t\t\tconsole.warn(\"Warning: Could not serialize schema example\", error);\n\t\t}\n\t}\n\n\t// Add deprecated\n\tif (schema.deprecated) {\n\t\tparts.push(\"@deprecated\");\n\t}\n\n\tif (parts.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst fullComment = parts.join(\" \");\n\treturn `/** ${fullComment} */\\n`;\n}\n","/**\n * String utility functions for escaping and formatting\n */\n\nimport type { OpenAPISchema } from \"../types\";\n\n/**\n * Escape string for description in .describe()\n */\nexport function escapeDescription(str: string): string {\n\treturn str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n\n/**\n * Escape regex pattern for use in code\n * Only escapes forward slashes which would terminate the regex literal\n */\nexport function escapePattern(str: string): string {\n\treturn str.replace(/\\//g, \"\\\\/\");\n}\n\n/**\n * @shared Escape JSDoc comment content to prevent injection\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport function escapeJSDoc(str: string): string {\n\treturn str.replace(/\\*\\//g, \"*\\\\/\");\n}\n\n/**\n * Wrap validation with .nullable() if needed\n */\nexport function wrapNullable(validation: string, isNullable: boolean): string {\n\treturn isNullable ? `${validation}.nullable()` : validation;\n}\n\n/**\n * Check if schema is nullable (supports both OpenAPI 3.0 and 3.1 syntax)\n * @param schema - The OpenAPI schema to check\n * @param defaultNullable - Default nullable behavior when not explicitly specified (default: false)\n */\nexport function isNullable(schema: OpenAPISchema, defaultNullable = false): boolean {\n\t// OpenAPI 3.0 style: nullable explicitly set\n\tif (schema.nullable === true) {\n\t\treturn true;\n\t}\n\tif (schema.nullable === false) {\n\t\treturn false;\n\t}\n\t// OpenAPI 3.1 style: type can be an array including \"null\"\n\tif (Array.isArray(schema.type)) {\n\t\treturn schema.type.includes(\"null\");\n\t}\n\t// No explicit nullable annotation - use default\n\treturn defaultNullable;\n}\n\n/**\n * Get the primary type from schema (handles OpenAPI 3.1 type arrays)\n */\nexport function getPrimaryType(schema: OpenAPISchema): string | undefined {\n\tif (Array.isArray(schema.type)) {\n\t\t// OpenAPI 3.1: type can be an array like [\"string\", \"null\"]\n\t\t// Return the first non-null type\n\t\tconst nonNullType = schema.type.find(t => t !== \"null\");\n\t\treturn nonNullType;\n\t}\n\treturn schema.type;\n}\n\n/**\n * Check if schema has multiple non-null types\n */\nexport function hasMultipleTypes(schema: OpenAPISchema): boolean {\n\tif (Array.isArray(schema.type)) {\n\t\tconst nonNullTypes = schema.type.filter(t => t !== \"null\");\n\t\treturn nonNullTypes.length > 1;\n\t}\n\treturn false;\n}\n\n/**\n * Add description to a schema validation string\n */\nexport function addDescription(validation: string, description: string | undefined, useDescribe: boolean): string {\n\tif (!description || !useDescribe) return validation;\n\n\tconst escapedDesc = escapeDescription(description);\n\treturn `${validation}.describe(\"${escapedDesc}\")`;\n}\n","import type { OpenAPISchema, OpenAPISpec } from \"../types\";\nimport { LRUCache } from \"../utils/lru-cache\";\nimport type { NamingOptions } from \"../utils/name-utils\";\nimport { resolveRef, toCamelCase } from \"../utils/name-utils\";\nimport { stripPrefix } from \"../utils/pattern-utils\";\nimport { addDescription, getPrimaryType, hasMultipleTypes, isNullable, wrapNullable } from \"../utils/string-utils\";\nimport { generateArrayValidation } from \"../validators/array-validator\";\nimport { generateAllOf, generateUnion } from \"../validators/composition-validator\";\nimport { generateNumberValidation } from \"../validators/number-validator\";\nimport type { ObjectMode } from \"../validators/object-validator\";\nimport { generateObjectSchema } from \"../validators/object-validator\";\nimport { generateStringValidation } from \"../validators/string-validator\";\n\nexport interface PropertyGeneratorContext {\n\tspec: OpenAPISpec;\n\tschemaDependencies: Map<string, Set<string>>;\n\tschemaType: \"all\" | \"request\" | \"response\";\n\tmode: ObjectMode;\n\tincludeDescriptions: boolean;\n\tuseDescribe: boolean;\n\tnamingOptions: NamingOptions;\n\tstripSchemaPrefix?: string;\n\t/**\n\t * Default nullable behavior when not explicitly specified\n\t * @default false\n\t */\n\tdefaultNullable: boolean;\n\t/**\n\t * Behavior for empty object schemas (objects with no properties defined)\n\t * @default 'loose'\n\t */\n\temptyObjectBehavior: \"strict\" | \"loose\" | \"record\";\n}\n\n/**\n * Property schema generator with memoization for performance\n */\nexport class PropertyGenerator {\n\tprivate context: PropertyGeneratorContext;\n\t// Performance optimization: Memoize filtered property results\n\tprivate filteredPropsCache = new Map<string, OpenAPISchema>();\n\t// Performance optimization: LRU cache for generated schemas\n\tprivate schemaCache = new LRUCache<string, string>(500);\n\n\t// Performance optimization: Lookup table for faster inclusion checks\n\tstatic readonly INCLUSION_RULES = {\n\t\trequest: (schema: OpenAPISchema) => !schema.readOnly,\n\t\tresponse: (schema: OpenAPISchema) => !schema.writeOnly,\n\t\tall: () => true,\n\t} as const;\n\n\tconstructor(context: PropertyGeneratorContext) {\n\t\tthis.context = context;\n\t}\n\n\t/**\n\t * Check if a property should be included based on schemaType and readOnly/writeOnly flags\n\t */\n\tshouldIncludeProperty(schema: OpenAPISchema): boolean {\n\t\tconst rule = PropertyGenerator.INCLUSION_RULES[this.context.schemaType];\n\t\treturn rule(schema);\n\t}\n\n\t/**\n\t * Recursively filter any schema type (helper for composition schemas)\n\t */\n\tprivate filterSchemaRecursive(schema: OpenAPISchema): OpenAPISchema {\n\t\tif (schema.$ref) {\n\t\t\t// Don't filter refs, they'll be filtered when resolved\n\t\t\treturn schema;\n\t\t}\n\n\t\tif (schema.properties) {\n\t\t\treturn this.filterNestedProperties(schema);\n\t\t}\n\n\t\tif (schema.type === \"array\" && schema.items && typeof schema.items === \"object\" && schema.items.properties) {\n\t\t\treturn {\n\t\t\t\t...schema,\n\t\t\t\titems: this.filterNestedProperties(schema.items),\n\t\t\t};\n\t\t}\n\n\t\treturn schema;\n\t}\n\n\t/**\n\t * Recursively filter properties in nested objects based on readOnly/writeOnly\n\t * Performance optimized with memoization\n\t */\n\tprivate filterNestedProperties(schema: OpenAPISchema): OpenAPISchema {\n\t\t// Performance optimization: More efficient cache key generation\n\t\tconst propKeys = schema.properties ? Object.keys(schema.properties).sort().join(\",\") : \"\";\n\t\tconst cacheKey = `${this.context.schemaType}:${schema.type || \"unknown\"}:${propKeys}:${schema.required?.join(\",\") || \"\"}`;\n\t\tconst cached = this.filteredPropsCache.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tif (!schema.properties) {\n\t\t\treturn schema;\n\t\t}\n\n\t\tconst filteredProperties: Record<string, OpenAPISchema> = {};\n\t\tconst filteredRequired: string[] = [];\n\n\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\tif (!this.shouldIncludeProperty(propSchema)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Recursively filter nested structures\n\t\t\tlet filteredPropSchema = propSchema;\n\n\t\t\tif (propSchema.type === \"object\" && propSchema.properties) {\n\t\t\t\t// Nested object\n\t\t\t\tfilteredPropSchema = this.filterNestedProperties(propSchema);\n\t\t\t} else if (\n\t\t\t\tpropSchema.type === \"array\" &&\n\t\t\t\tpropSchema.items &&\n\t\t\t\ttypeof propSchema.items === \"object\" &&\n\t\t\t\tpropSchema.items.properties\n\t\t\t) {\n\t\t\t\t// Array of objects\n\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t...propSchema,\n\t\t\t\t\titems: this.filterNestedProperties(propSchema.items),\n\t\t\t\t};\n\t\t\t} else if (propSchema.allOf || propSchema.oneOf || propSchema.anyOf) {\n\t\t\t\t// Composition schemas - filter each branch\n\t\t\t\tif (propSchema.allOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\tallOf: propSchema.allOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t} else if (propSchema.oneOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\toneOf: propSchema.oneOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t} else if (propSchema.anyOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\tanyOf: propSchema.anyOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfilteredProperties[propName] = filteredPropSchema;\n\n\t\t\t// Keep required status if property is included\n\t\t\tif (schema.required?.includes(propName)) {\n\t\t\t\tfilteredRequired.push(propName);\n\t\t\t}\n\t\t}\n\n\t\tconst result = {\n\t\t\t...schema,\n\t\t\tproperties: filteredProperties,\n\t\t\trequired: filteredRequired.length > 0 ? filteredRequired : undefined,\n\t\t};\n\n\t\t// Cache the result\n\t\tthis.filteredPropsCache.set(cacheKey, result);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Resolve discriminator mapping to actual schema references\n\t */\n\tprivate resolveDiscriminatorMapping(mapping: Record<string, string>, schemas: OpenAPISchema[]): OpenAPISchema[] {\n\t\t// If mapping is provided, use it to reorder/filter schemas\n\t\t// The mapping maps discriminator values to schema references\n\t\tconst mappedSchemas: OpenAPISchema[] = [];\n\n\t\tfor (const [_, schemaRef] of Object.entries(mapping)) {\n\t\t\t// Find the schema that matches this reference\n\t\t\tconst matchingSchema = schemas.find(s => {\n\t\t\t\tif (s.$ref) {\n\t\t\t\t\t// Check if the ref matches\n\t\t\t\t\treturn s.$ref === schemaRef || s.$ref.endsWith(schemaRef);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (matchingSchema) {\n\t\t\t\tmappedSchemas.push(matchingSchema);\n\t\t\t} else {\n\t\t\t\t// Schema not found in oneOf/anyOf, create a reference\n\t\t\t\tmappedSchemas.push({ $ref: schemaRef });\n\t\t\t}\n\t\t}\n\n\t\t// Include any schemas that weren't in the mapping\n\t\tfor (const schema of schemas) {\n\t\t\tif (!mappedSchemas.includes(schema)) {\n\t\t\t\tmappedSchemas.push(schema);\n\t\t\t}\n\t\t}\n\n\t\treturn mappedSchemas;\n\t}\n\n\t/**\n\t * Resolve a $ref string to the actual schema\n\t */\n\tprivate resolveSchemaRef(ref: string): OpenAPISchema | undefined {\n\t\tconst schemaName = ref.split(\"/\").pop();\n\t\tif (!schemaName) return undefined;\n\t\treturn this.context.spec.components?.schemas?.[schemaName];\n\t}\n\n\t/**\n\t * Resolve a schema name through any aliases to get the actual schema name\n\t * If the schema is an alias (allOf with single $ref), return the target name\n\t */\n\tprivate resolveSchemaAlias(schemaName: string): string {\n\t\tconst schema = this.context.spec.components?.schemas?.[schemaName];\n\t\tif (!schema) return schemaName;\n\n\t\t// Check if this is a simple alias (allOf with single $ref and nothing else)\n\t\tif (\n\t\t\tschema.allOf &&\n\t\t\tschema.allOf.length === 1 &&\n\t\t\tschema.allOf[0].$ref &&\n\t\t\t!schema.properties &&\n\t\t\t!schema.oneOf &&\n\t\t\t!schema.anyOf\n\t\t) {\n\t\t\tconst targetName = resolveRef(schema.allOf[0].$ref);\n\t\t\t// Recursively resolve in case of chained aliases\n\t\t\treturn this.resolveSchemaAlias(targetName);\n\t\t}\n\n\t\treturn schemaName;\n\t}\n\n\t/**\n\t * Check if this is a circular dependency through aliases\n\t */\n\tprivate isCircularThroughAlias(fromSchema: string, toSchema: string): boolean {\n\t\tconst toSchemaSpec = this.context.spec.components?.schemas?.[toSchema];\n\t\tif (!toSchemaSpec) return false;\n\n\t\t// Check if toSchema is a simple alias (allOf with single $ref)\n\t\tif (toSchemaSpec.allOf && toSchemaSpec.allOf.length === 1 && toSchemaSpec.allOf[0].$ref) {\n\t\t\tconst aliasTarget = resolveRef(toSchemaSpec.allOf[0].$ref);\n\t\t\t// If the alias points back to the original schema, it's circular\n\t\t\treturn aliasTarget === fromSchema;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Generate union for multiple types (OpenAPI 3.1)\n\t */\n\tprivate generateMultiTypeUnion(schema: OpenAPISchema, currentSchema?: string): string {\n\t\tif (!Array.isArray(schema.type)) {\n\t\t\treturn \"z.unknown()\";\n\t\t}\n\t\tconst nonNullTypes = schema.type.filter(t => t !== \"null\");\n\t\tconst schemas = nonNullTypes.map(type => {\n\t\t\tconst typeSchema = { ...schema, type };\n\t\t\treturn this.generatePropertySchema(typeSchema, currentSchema);\n\t\t});\n\t\treturn `z.union([${schemas.join(\", \")}])`;\n\t}\n\n\t/**\n\t * Apply unevaluatedProperties validation to a schema\n\t */\n\tprivate applyUnevaluatedProperties(baseSchema: string, schema: OpenAPISchema): string {\n\t\t// Collect all evaluated properties from the schema and its composition\n\t\tconst evaluatedProps = new Set<string>();\n\n\t\t// Add properties from this schema\n\t\tif (schema.properties) {\n\t\t\tfor (const propName of Object.keys(schema.properties)) {\n\t\t\t\tevaluatedProps.add(propName);\n\t\t\t}\n\t\t}\n\n\t\t// Add properties from allOf/oneOf/anyOf (shallow scan)\n\t\tconst collectPropsFromComposition = (schemas?: OpenAPISchema[]) => {\n\t\t\tif (!schemas) return;\n\t\t\tfor (const subSchema of schemas) {\n\t\t\t\tif (subSchema.properties) {\n\t\t\t\t\tfor (const propName of Object.keys(subSchema.properties)) {\n\t\t\t\t\t\tevaluatedProps.add(propName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Also check $ref schemas\n\t\t\t\tif (subSchema.$ref) {\n\t\t\t\t\tconst refSchema = this.context.spec.components?.schemas?.[subSchema.$ref.split(\"/\").pop() || \"\"];\n\t\t\t\t\tif (refSchema?.properties) {\n\t\t\t\t\t\tfor (const propName of Object.keys(refSchema.properties)) {\n\t\t\t\t\t\t\tevaluatedProps.add(propName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tcollectPropsFromComposition(schema.allOf);\n\t\tcollectPropsFromComposition(schema.oneOf);\n\t\tcollectPropsFromComposition(schema.anyOf);\n\n\t\tconst evaluatedPropsSet = `new Set(${JSON.stringify([...evaluatedProps])})`;\n\n\t\t// For unions (oneOf/anyOf), we need to add .catchall(z.unknown()) to EACH branch\n\t\t// For allOf with extend(), add catchall to the final result\n\t\tlet schemaWithCatchall = baseSchema;\n\t\tif (baseSchema.includes(\".union([\") || baseSchema.includes(\".discriminatedUnion(\")) {\n\t\t\t// For unions, we need to make each branch allow additional properties\n\t\t\t// This is complex, so we'll apply refinement and let the refinement check the raw input\n\t\t\t// The union will have already validated structure, refinement checks extra props\n\t\t\tschemaWithCatchall = baseSchema;\n\t\t} else if (baseSchema.includes(\".extend(\")) {\n\t\t\t// Wrap in catchall - apply to final result\n\t\t\tschemaWithCatchall = `${baseSchema}.catchall(z.unknown())`;\n\t\t}\n\n\t\tif (schema.unevaluatedProperties === false) {\n\t\t\t// No unevaluated properties allowed\n\t\t\treturn `${schemaWithCatchall}.refine((obj) => Object.keys(obj).every(key => ${evaluatedPropsSet}.has(key)), { message: \"No unevaluated properties allowed\" })`;\n\t\t} else if (typeof schema.unevaluatedProperties === \"object\") {\n\t\t\t// Unevaluated properties must match schema\n\t\t\tconst unevalSchema = this.generatePropertySchema(schema.unevaluatedProperties);\n\t\t\treturn `${schemaWithCatchall}.refine((obj) => Object.keys(obj).filter(key => !${evaluatedPropsSet}.has(key)).every(key => ${unevalSchema}.safeParse(obj[key]).success), { message: \"Unevaluated properties must match the schema\" })`;\n\t\t}\n\n\t\treturn baseSchema;\n\t}\n\n\t/**\n\t * Generate Zod schema for a property\n\t * @param schema - The OpenAPI schema to generate\n\t * @param currentSchema - The name of the current schema being processed (for circular ref detection)\n\t * @param isTopLevel - Whether this is a top-level schema definition\n\t * @param suppressDefaultNullable - When true, don't apply defaultNullable (used when outer schema has explicit nullable: false)\n\t */\n\tgeneratePropertySchema(\n\t\tschema: OpenAPISchema,\n\t\tcurrentSchema?: string,\n\t\tisTopLevel = false,\n\t\tsuppressDefaultNullable = false\n\t): string {\n\t\t// Performance optimization: Check cache for simple schemas\n\t\t// Only cache schemas without $ref or complex compositions to avoid stale circular refs\n\t\tconst isCacheable = !schema.$ref && !schema.allOf && !schema.oneOf && !schema.anyOf && !currentSchema;\n\t\tif (isCacheable) {\n\t\t\tconst cacheKey = JSON.stringify({\n\t\t\t\tschema,\n\t\t\t\ttype: this.context.schemaType,\n\t\t\t\tmode: this.context.mode,\n\t\t\t\tsuppressDefaultNullable,\n\t\t\t});\n\t\t\tconst cached = this.schemaCache.get(cacheKey);\n\t\t\tif (cached) {\n\t\t\t\treturn cached;\n\t\t\t}\n\t\t}\n\n\t\t// Apply nested property filtering if needed\n\t\tif ((this.context.schemaType === \"request\" || this.context.schemaType === \"response\") && schema.properties) {\n\t\t\tschema = this.filterNestedProperties(schema);\n\t\t}\n\n\t\t// Determine if defaultNullable should apply to this schema.\n\t\t// defaultNullable should apply to property values within objects, NOT to:\n\t\t// 1. Top-level schema definitions (isTopLevel = true)\n\t\t// 2. Enum values - enums define discrete values and shouldn't be nullable by default\n\t\t// 3. Const/literal values - these are exact values and shouldn't be nullable by default\n\t\t// 4. When suppressDefaultNullable is true (outer schema has explicit nullable: false)\n\t\t//\n\t\t// Note: $ref properties DO respect defaultNullable. If you want a non-nullable\n\t\t// reference when defaultNullable is true, you must explicitly add `nullable: false`\n\t\t// to the schema containing the $ref.\n\t\tconst isEnum = !!schema.enum;\n\t\tconst isConst = schema.const !== undefined;\n\t\tconst shouldApplyDefaultNullable = !isTopLevel && !isEnum && !isConst && !suppressDefaultNullable;\n\t\tconst effectiveDefaultNullable = shouldApplyDefaultNullable ? this.context.defaultNullable : false;\n\t\tconst nullable = isNullable(schema, effectiveDefaultNullable);\n\n\t\t// Handle multiple types (OpenAPI 3.1)\n\t\tif (hasMultipleTypes(schema)) {\n\t\t\tconst union = this.generateMultiTypeUnion(schema, currentSchema);\n\t\t\treturn wrapNullable(union, nullable);\n\t\t}\n\n\t\t// Handle $ref\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\t// Resolve through any aliases to get the actual schema\n\t\t\tconst resolvedRefName = this.resolveSchemaAlias(refName);\n\n\t\t\t// Track dependency (but not if it's just an alias at top level)\n\t\t\tif (currentSchema && refName !== currentSchema && !isTopLevel) {\n\t\t\t\tif (!this.context.schemaDependencies.has(currentSchema)) {\n\t\t\t\t\tthis.context.schemaDependencies.set(currentSchema, new Set());\n\t\t\t\t}\n\t\t\t\tthis.context.schemaDependencies.get(currentSchema)?.add(refName);\n\t\t\t}\n\t\t\t// Use the resolved name for the schema reference\n\t\t\t// Apply stripSchemaPrefix to get consistent schema names\n\t\t\tconst strippedRefName = stripPrefix(resolvedRefName, this.context.stripSchemaPrefix);\n\t\t\tconst schemaName = `${toCamelCase(strippedRefName, this.context.namingOptions)}Schema`; // Check for direct self-reference or circular dependency through alias\n\t\t\tif (currentSchema && (refName === currentSchema || this.isCircularThroughAlias(currentSchema, refName))) {\n\t\t\t\t// Use lazy evaluation for circular references with explicit type annotation\n\t\t\t\tconst lazySchema = `z.lazy((): z.ZodTypeAny => ${schemaName})`;\n\t\t\t\treturn wrapNullable(lazySchema, nullable);\n\t\t\t}\n\n\t\t\treturn wrapNullable(schemaName, nullable);\n\t\t}\n\n\t\t// Handle const (literal values)\n\t\tif (schema.const !== undefined) {\n\t\t\tconst literalValue = typeof schema.const === \"string\" ? `\"${schema.const}\"` : schema.const;\n\t\t\tconst zodLiteral = `z.literal(${literalValue})`;\n\t\t\treturn wrapNullable(zodLiteral, nullable);\n\t\t}\n\n\t\t// Handle enum\n\t\tif (schema.enum) {\n\t\t\t// Check if all values are booleans\n\t\t\tconst allBooleans = schema.enum.every(v => typeof v === \"boolean\");\n\t\t\tif (allBooleans) {\n\t\t\t\tconst zodBoolean = \"z.boolean()\";\n\t\t\t\treturn wrapNullable(zodBoolean, nullable);\n\t\t\t}\n\n\t\t\t// Check if all values are strings\n\t\t\tconst allStrings = schema.enum.every(v => typeof v === \"string\");\n\t\t\tif (allStrings) {\n\t\t\t\tconst enumValues = schema.enum.map(v => `\"${v}\"`).join(\", \");\n\t\t\t\tconst zodEnum = `z.enum([${enumValues}])`;\n\t\t\t\treturn wrapNullable(zodEnum, nullable);\n\t\t\t}\n\n\t\t\t// For numeric or mixed enums, use z.union with z.literal\n\t\t\tconst literalValues = schema.enum\n\t\t\t\t.map(v => {\n\t\t\t\t\tif (typeof v === \"string\") {\n\t\t\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `z.literal(${v})`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconst zodUnion = `z.union([${literalValues}])`;\n\t\t\treturn wrapNullable(zodUnion, nullable);\n\t\t}\n\n\t\t// Handle allOf\n\t\tif (schema.allOf) {\n\t\t\t// Check if outer schema has explicit nullable: false\n\t\t\t// This needs to be passed to generateAllOf so inner schemas don't get defaultNullable applied\n\t\t\tconst explicitNullableFalse = schema.nullable === false;\n\t\t\tlet composition = generateAllOf(\n\t\t\t\tschema.allOf,\n\t\t\t\tnullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tgenerateInlineObjectShape: this.generateInlineObjectShape.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\tcurrentSchema,\n\t\t\t\texplicitNullableFalse\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle oneOf with discriminator support\n\t\tif (schema.oneOf) {\n\t\t\tconst needsPassthrough = schema.unevaluatedProperties !== undefined;\n\t\t\tlet composition = generateUnion(\n\t\t\t\tschema.oneOf,\n\t\t\t\tschema.discriminator?.propertyName,\n\t\t\t\tnullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tresolveDiscriminatorMapping: this.resolveDiscriminatorMapping.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpassthrough: needsPassthrough,\n\t\t\t\t\tdiscriminatorMapping: schema.discriminator?.mapping,\n\t\t\t\t},\n\t\t\t\tcurrentSchema\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle anyOf with discriminator support\n\t\tif (schema.anyOf) {\n\t\t\tconst needsPassthrough = schema.unevaluatedProperties !== undefined;\n\t\t\tlet composition = generateUnion(\n\t\t\t\tschema.anyOf,\n\t\t\t\tschema.discriminator?.propertyName,\n\t\t\t\tnullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tresolveDiscriminatorMapping: this.resolveDiscriminatorMapping.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpassthrough: needsPassthrough,\n\t\t\t\t\tdiscriminatorMapping: schema.discriminator?.mapping,\n\t\t\t\t},\n\t\t\t\tcurrentSchema\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle not keyword (must be after compositions)\n\t\tif (schema.not) {\n\t\t\tconst notSchema = this.generatePropertySchema(schema.not, currentSchema);\n\t\t\tlet baseValidation: string;\n\n\t\t\t// If schema has a type, generate validation for that type first\n\t\t\tif (schema.type || schema.properties || schema.items) {\n\t\t\t\t// Create a copy without 'not' to generate base validation\n\t\t\t\tconst { not: _, ...baseSchema } = schema;\n\t\t\t\tbaseValidation = this.generatePropertySchema(baseSchema, currentSchema);\n\t\t\t} else {\n\t\t\t\t// No specific type, use unknown\n\t\t\t\tbaseValidation = \"z.unknown()\";\n\t\t\t}\n\n\t\t\tconst refined = `${baseValidation}.refine((val) => !${notSchema}.safeParse(val).success, { message: \"Value must not match the excluded schema\" })`;\n\t\t\treturn wrapNullable(refined, nullable);\n\t\t}\n\n\t\tlet validation = \"\";\n\t\tconst primaryType = getPrimaryType(schema);\n\n\t\tswitch (primaryType) {\n\t\t\tcase \"string\":\n\t\t\t\tvalidation = generateStringValidation(schema, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\tvalidation = generateNumberValidation(schema, false, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"integer\":\n\t\t\t\tvalidation = generateNumberValidation(schema, true, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tvalidation = \"z.boolean()\";\n\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"array\":\n\t\t\t\tvalidation = generateArrayValidation(schema, {\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tuseDescribe: this.context.useDescribe,\n\t\t\t\t\tcurrentSchema,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\tif (\n\t\t\t\t\tschema.properties ||\n\t\t\t\t\tschema.required ||\n\t\t\t\t\tschema.minProperties !== undefined ||\n\t\t\t\t\tschema.maxProperties !== undefined ||\n\t\t\t\t\tschema.patternProperties ||\n\t\t\t\t\tschema.propertyNames\n\t\t\t\t) {\n\t\t\t\t\tvalidation = generateObjectSchema(\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\t\t\tshouldIncludeProperty: this.shouldIncludeProperty.bind(this),\n\t\t\t\t\t\t\tmode: this.context.mode,\n\t\t\t\t\t\t\tincludeDescriptions: this.context.includeDescriptions,\n\t\t\t\t\t\t\tuseDescribe: this.context.useDescribe,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcurrentSchema\n\t\t\t\t\t);\n\t\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\t} else {\n\t\t\t\t\t// Empty object schema - behavior controlled by emptyObjectBehavior option\n\t\t\t\t\tswitch (this.context.emptyObjectBehavior) {\n\t\t\t\t\t\tcase \"strict\":\n\t\t\t\t\t\t\tvalidation = \"z.strictObject({})\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"loose\":\n\t\t\t\t\t\t\tvalidation = \"z.looseObject({})\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvalidation = \"z.record(z.string(), z.unknown())\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvalidation = \"z.unknown()\";\n\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t}\n\n\t\tconst result = wrapNullable(validation, nullable);\n\n\t\t// Store in cache if cacheable\n\t\tif (isCacheable) {\n\t\t\tconst cacheKey = JSON.stringify({ schema, type: this.context.schemaType, mode: this.context.mode });\n\t\t\tthis.schemaCache.set(cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Generate inline object shape for use with .extend()\n\t * Returns just the shape object literal: { prop1: z.string(), prop2: z.number() }\n\t *\n\t * This method is specifically for allOf compositions where we need to pass\n\t * the shape directly to .extend() instead of using z.object({...}).shape.\n\t * This avoids the .nullable().shape bug when inline objects have nullable: true.\n\t *\n\t * According to Zod docs (https://zod.dev/api?id=extend):\n\t * - .extend() accepts an object of shape definitions\n\t * - e.g., baseSchema.extend({ prop: z.string() })\n\t */\n\tgenerateInlineObjectShape(schema: OpenAPISchema, currentSchema?: string): string {\n\t\tconst required = new Set(schema.required || []);\n\t\tconst properties: string[] = [];\n\n\t\tif (schema.properties) {\n\t\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t\t// Skip properties based on readOnly/writeOnly\n\t\t\t\tif (!this.shouldIncludeProperty(propSchema)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst isRequired = required.has(propName);\n\t\t\t\tconst zodSchema = this.generatePropertySchema(propSchema, currentSchema);\n\n\t\t\t\t// Quote property name if it contains special characters\n\t\t\t\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\t\t\t\tconst quotedPropName = validIdentifier.test(propName) ? propName : `\"${propName}\"`;\n\n\t\t\t\tlet propertyDef = `${quotedPropName}: ${zodSchema}`;\n\t\t\t\tif (!isRequired) {\n\t\t\t\t\tpropertyDef += \".optional()\";\n\t\t\t\t}\n\n\t\t\t\tproperties.push(propertyDef);\n\t\t\t}\n\t\t}\n\n\t\t// Return the shape as an object literal\n\t\tif (properties.length === 0) {\n\t\t\treturn \"{}\";\n\t\t}\n\n\t\treturn `{\\n${properties.map(p => `\\t${p}`).join(\",\\n\")}\\n}`;\n\t}\n}\n","/**\n * @shared Simple LRU Cache implementation for performance optimization\n * @since 1.0.0\n * Utility used by core and playwright packages\n * Prevents memory leaks from unbounded cache growth\n */\nexport class LRUCache<K, V> {\n\tprivate cache = new Map<K, V>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize: number) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget capacity(): number {\n\t\treturn this.maxSize;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tif (!this.cache.has(key)) return undefined;\n\t\t// Move to end (most recently used)\n\t\tconst value = this.cache.get(key);\n\t\tif (value === undefined) return undefined;\n\t\tthis.cache.delete(key);\n\t\tthis.cache.set(key, value);\n\t\treturn value;\n\t}\n\n\tset(key: K, value: V): void {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.delete(key);\n\t\t} else if (this.cache.size >= this.maxSize) {\n\t\t\t// Remove least recently used (first item)\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\t\tthis.cache.set(key, value);\n\t}\n\n\thas(key: K): boolean {\n\t\treturn this.cache.has(key);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\tsize(): number {\n\t\treturn this.cache.size;\n\t}\n}\n","import { minimatch } from \"minimatch\";\n\n/**\n * Pattern matching utilities for prefix stripping\n *\n * Shared utility used by core and playwright packages\n *\n * Supports both literal string matching and glob patterns for stripping\n * prefixes from strings (paths, schema names, etc.)\n */\n\n/**\n * Validates if a glob pattern is syntactically valid\n * @param pattern - The glob pattern to validate\n * @returns true if valid, false otherwise\n */\nfunction isValidGlobPattern(pattern: string): boolean {\n\ttry {\n\t\t// Try to create a minimatch instance to validate the pattern\n\t\tnew minimatch.Minimatch(pattern);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Checks if a pattern contains glob special characters\n * @param pattern - The pattern to check\n * @returns true if pattern contains glob wildcards\n */\nfunction isGlobPattern(pattern: string): boolean {\n\treturn /[*?[\\]{}!]/.test(pattern);\n}\n\n/**\n * @shared Strips a prefix from a string using either literal string matching or glob patterns\n * @since 1.1.0\n * Shared utility used by core and playwright packages\n *\n * @param input - The full string to strip from\n * @param pattern - The glob pattern to strip\n * @param ensureLeadingChar - Optional character to ensure at start (e.g., \"/\" for paths)\n * @returns The string with prefix removed, or original string if no match\n *\n * @example\n * // Literal string matching\n * stripPrefix(\"/api/v1/users\", \"/api/v1\") // => \"/users\"\n * stripPrefix(\"Company.Models.User\", \"Company.Models.\") // => \"User\"\n *\n * @example\n * // Glob pattern matching\n * stripPrefix(\"/api/v1.0/users\", \"/api/v*\") // => matches and strips\n * stripPrefix(\"Company.Models.User\", \"*.Models.\") // => \"User\"\n * stripPrefix(\"api_v2_UserSchema\", \"api_v[0-9]_\") // => \"UserSchema\"\n */\nexport function stripPrefix(input: string, pattern: string | undefined, ensureLeadingChar?: string): string {\n\tif (!pattern) {\n\t\treturn input;\n\t}\n\n\t// Validate glob pattern if it contains special characters\n\tif (isGlobPattern(pattern) && !isValidGlobPattern(pattern)) {\n\t\tconsole.warn(`⚠️ Invalid glob pattern \"${pattern}\": Pattern is malformed`);\n\t\treturn input;\n\t}\n\n\t// Check if pattern contains glob wildcards\n\tif (isGlobPattern(pattern)) {\n\t\t// Use glob matching to find the prefix\n\t\t// We need to find what part of the input matches the pattern as a prefix\n\t\t// Try matching progressively longer prefixes to find the longest match\n\t\tlet longestMatch = -1;\n\n\t\tfor (let i = 1; i <= input.length; i++) {\n\t\t\tconst testPrefix = input.substring(0, i);\n\t\t\tif (minimatch(testPrefix, pattern)) {\n\t\t\t\t// Found a match - keep looking for a longer match\n\t\t\t\tlongestMatch = i;\n\t\t\t}\n\t\t}\n\n\t\tif (longestMatch > 0) {\n\t\t\t// Strip the longest matching prefix\n\t\t\tconst stripped = input.substring(longestMatch);\n\n\t\t\t// Ensure result starts with specified character if provided\n\t\t\tif (ensureLeadingChar) {\n\t\t\t\tif (stripped === \"\") {\n\t\t\t\t\treturn ensureLeadingChar;\n\t\t\t\t}\n\t\t\t\tif (!stripped.startsWith(ensureLeadingChar)) {\n\t\t\t\t\treturn `${ensureLeadingChar}${stripped}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn stripped === \"\" && !ensureLeadingChar ? input : stripped;\n\t\t}\n\n\t\t// No match found\n\t\treturn input;\n\t}\n\n\t// Literal string matching\n\tif (input.startsWith(pattern)) {\n\t\tconst stripped = input.substring(pattern.length);\n\n\t\t// Ensure result starts with specified character if provided\n\t\tif (ensureLeadingChar) {\n\t\t\tif (stripped === \"\") {\n\t\t\t\treturn ensureLeadingChar;\n\t\t\t}\n\t\t\tif (!stripped.startsWith(ensureLeadingChar)) {\n\t\t\t\treturn `${ensureLeadingChar}${stripped}`;\n\t\t\t}\n\t\t}\n\n\t\treturn stripped;\n\t}\n\n\t// No match - return original input\n\treturn input;\n}\n\n/**\n * @shared Strips a prefix from a path (ensures leading slash)\n * @since 1.1.0\n * Shared utility used by playwright package for path manipulation\n *\n * @param path - The full path to strip from\n * @param pattern - The glob pattern to strip\n * @returns The path with prefix removed, or original path if no match\n *\n * @example\n * stripPathPrefix(\"/api/v1/users\", \"/api/v1\") // => \"/users\"\n * stripPathPrefix(\"/api/v2/posts\", \"/api/v*\") // => \"/posts\"\n * stripPathPrefix(\"/api/v1.0/items\", \"/api/v[0-9].*\") // => \"/items\"\n */\nexport function stripPathPrefix(path: string, pattern: string | undefined): string {\n\tif (!pattern) {\n\t\treturn path;\n\t}\n\n\t// For literal string matching with paths, normalize the pattern\n\tif (!isGlobPattern(pattern)) {\n\t\tlet normalizedPattern = pattern.trim();\n\t\tif (!normalizedPattern.startsWith(\"/\")) {\n\t\t\tnormalizedPattern = `/${normalizedPattern}`;\n\t\t}\n\t\tif (normalizedPattern.endsWith(\"/\") && normalizedPattern !== \"/\") {\n\t\t\tnormalizedPattern = normalizedPattern.slice(0, -1);\n\t\t}\n\n\t\treturn stripPrefix(path, normalizedPattern, \"/\");\n\t}\n\n\t// For glob patterns, use as-is\n\treturn stripPrefix(path, pattern, \"/\");\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { addDescription } from \"../utils/string-utils\";\n\nexport interface ArrayValidatorContext {\n\tgeneratePropertySchema: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tuseDescribe: boolean;\n\tcurrentSchema?: string;\n}\n\n/**\n * Generate array or tuple validation\n */\nexport function generateArrayValidation(schema: OpenAPISchema, context: ArrayValidatorContext): string {\n\tlet validation: string;\n\n\t// Handle prefixItems (tuple validation - OpenAPI 3.1)\n\tif (schema.prefixItems && schema.prefixItems.length > 0) {\n\t\tconst tupleItems = schema.prefixItems.map(item => context.generatePropertySchema(item, context.currentSchema));\n\t\tvalidation = `z.tuple([${tupleItems.join(\", \")}])`;\n\n\t\t// Add rest items if specified (items after the fixed prefix)\n\t\t// items takes precedence over unevaluatedItems\n\t\tif (schema.items) {\n\t\t\tconst restSchema = context.generatePropertySchema(schema.items, context.currentSchema);\n\t\t\tvalidation += `.rest(${restSchema})`;\n\t\t} else if (schema.unevaluatedItems && typeof schema.unevaluatedItems === \"object\") {\n\t\t\t// Use unevaluatedItems as rest schema if items not specified\n\t\t\tconst restSchema = context.generatePropertySchema(schema.unevaluatedItems, context.currentSchema);\n\t\t\tvalidation += `.rest(${restSchema})`;\n\t\t}\n\t\t// If unevaluatedItems is false (or undefined), tuple has fixed length by default\n\t} else if (schema.items) {\n\t\tconst itemSchema = context.generatePropertySchema(schema.items, context.currentSchema);\n\t\tvalidation = `z.array(${itemSchema})`;\n\n\t\t// Add array constraints\n\t\tif (schema.minItems !== undefined) {\n\t\t\tvalidation += `.min(${schema.minItems})`;\n\t\t}\n\t\tif (schema.maxItems !== undefined) {\n\t\t\tvalidation += `.max(${schema.maxItems})`;\n\t\t}\n\n\t\t// Add uniqueItems constraint\n\t\tif (schema.uniqueItems === true) {\n\t\t\tvalidation += `.refine((items) => new Set(items).size === items.length, { message: \"Array items must be unique\" })`;\n\t\t}\n\t} else {\n\t\tvalidation = \"z.array(z.unknown())\";\n\t}\n\n\t// Handle contains with min/max constraints\n\tif (schema.contains) {\n\t\tconst containsSchema = context.generatePropertySchema(schema.contains, context.currentSchema);\n\t\tconst minCount = schema.minContains ?? 1;\n\t\tconst maxCount = schema.maxContains;\n\n\t\tif (maxCount !== undefined) {\n\t\t\t// Both min and max\n\t\t\tvalidation += `.refine((arr) => { const matches = arr.filter(item => ${containsSchema}.safeParse(item).success); return matches.length >= ${minCount} && matches.length <= ${maxCount}; }, { message: \"Array must contain between ${minCount} and ${maxCount} items matching the schema\" })`;\n\t\t} else {\n\t\t\t// Just min\n\t\t\tvalidation += `.refine((arr) => arr.filter(item => ${containsSchema}.safeParse(item).success).length >= ${minCount}, { message: \"Array must contain at least ${minCount} item(s) matching the schema\" })`;\n\t\t}\n\t}\n\n\t// Handle unevaluatedItems (OpenAPI 3.1) - only applies to prefixItems scenarios\n\t// Note: unevaluatedItems with prefixItems should use .rest() which was already handled above\n\t// This section handles the false case which needs to restrict the length\n\tif (schema.unevaluatedItems === false && schema.prefixItems && schema.prefixItems.length > 0 && !schema.items) {\n\t\t// No items beyond prefixItems allowed - add length restriction\n\t\tconst prefixCount = schema.prefixItems.length;\n\t\tvalidation += `.refine((arr) => arr.length <= ${prefixCount}, { message: \"No unevaluated items allowed beyond prefix items\" })`;\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, context.useDescribe);\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { wrapNullable } from \"../utils/string-utils\";\n\nexport interface CompositionValidatorContext {\n\tgeneratePropertySchema: (\n\t\tschema: OpenAPISchema,\n\t\tcurrentSchema?: string,\n\t\tisTopLevel?: boolean,\n\t\tsuppressDefaultNullable?: boolean\n\t) => string;\n\t/**\n\t * Generate inline object shape for use with .extend()\n\t * Returns just the shape object literal: { prop1: z.string(), prop2: z.number() }\n\t * This avoids the .nullable().shape bug when inline objects have nullable: true\n\t */\n\tgenerateInlineObjectShape?: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tresolveDiscriminatorMapping?: (mapping: Record<string, string>, schemas: OpenAPISchema[]) => OpenAPISchema[];\n\tresolveSchemaRef?: (ref: string) => OpenAPISchema | undefined;\n}\n\nexport interface UnionOptions {\n\tpassthrough?: boolean;\n\tdiscriminatorMapping?: Record<string, string>;\n}\n\n/**\n * Check if discriminator property is required in all schemas\n */\nfunction isDiscriminatorRequired(\n\tschemas: OpenAPISchema[],\n\tdiscriminator: string,\n\tcontext: CompositionValidatorContext\n): { valid: boolean; invalidSchemas: string[] } {\n\tconst invalidSchemas: string[] = [];\n\n\tfor (const schema of schemas) {\n\t\tconst resolved = resolveSchema(schema, context);\n\t\tconst required = resolved.required || [];\n\n\t\tif (!required.includes(discriminator)) {\n\t\t\tconst schemaName = schema.$ref ? schema.$ref.split(\"/\").pop() || \"inline\" : \"inline\";\n\t\t\tinvalidSchemas.push(schemaName);\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: invalidSchemas.length === 0,\n\t\tinvalidSchemas,\n\t};\n}\n\n/**\n * Generate union validation\n */\nexport function generateUnion(\n\tschemas: OpenAPISchema[],\n\tdiscriminator: string | undefined,\n\tisNullable: boolean,\n\tcontext: CompositionValidatorContext,\n\toptions?: UnionOptions,\n\tcurrentSchema?: string\n): string {\n\t// Handle empty oneOf/anyOf - malformed spec, warn and return z.never()\n\tif (schemas.length === 0) {\n\t\tconsole.warn(\n\t\t\t\"[openapi-to-zod] Warning: Empty oneOf/anyOf array encountered. This is likely a malformed OpenAPI spec. Generating z.never() as fallback.\"\n\t\t);\n\t\treturn wrapNullable(\n\t\t\t'z.never().describe(\"Empty oneOf/anyOf in OpenAPI spec - no valid schema defined\")',\n\t\t\tisNullable\n\t\t);\n\t}\n\n\t// Simplify single-item oneOf/anyOf - no union needed\n\tif (schemas.length === 1) {\n\t\tlet singleSchema = context.generatePropertySchema(schemas[0], currentSchema);\n\t\tif (options?.passthrough && !singleSchema.includes(\".catchall(\")) {\n\t\t\tsingleSchema = `${singleSchema}.catchall(z.unknown())`;\n\t\t}\n\t\treturn wrapNullable(singleSchema, isNullable);\n\t}\n\n\tif (discriminator) {\n\t\t// Apply discriminator mapping if provided\n\t\tlet resolvedSchemas = schemas;\n\t\tif (options?.discriminatorMapping && context.resolveDiscriminatorMapping) {\n\t\t\tresolvedSchemas = context.resolveDiscriminatorMapping(options.discriminatorMapping, schemas);\n\t\t}\n\n\t\t// Check if discriminator is required in all schemas\n\t\tconst discriminatorCheck = isDiscriminatorRequired(resolvedSchemas, discriminator, context);\n\n\t\tif (!discriminatorCheck.valid) {\n\t\t\t// Discriminator is not required in all schemas - fallback to z.union()\n\t\t\tconsole.warn(\n\t\t\t\t`[openapi-to-zod] Warning: Discriminator \"${discriminator}\" is not required in schemas: ${discriminatorCheck.invalidSchemas.join(\", \")}. ` +\n\t\t\t\t\t\"Falling back to z.union() instead of z.discriminatedUnion().\"\n\t\t\t);\n\n\t\t\tlet schemaStrings = resolvedSchemas.map(s => context.generatePropertySchema(s, currentSchema));\n\t\t\tif (options?.passthrough) {\n\t\t\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t\t\t}\n\n\t\t\tconst fallbackDescription = `Discriminator \"${discriminator}\" is optional in some schemas (${discriminatorCheck.invalidSchemas.join(\", \")}), using z.union() instead of z.discriminatedUnion()`;\n\t\t\tconst union = `z.union([${schemaStrings.join(\", \")}]).describe(\"${fallbackDescription}\")`;\n\t\t\treturn wrapNullable(union, isNullable);\n\t\t}\n\n\t\t// Use discriminated union for better type inference\n\t\tlet schemaStrings = resolvedSchemas.map(s => context.generatePropertySchema(s, currentSchema));\n\t\tif (options?.passthrough) {\n\t\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t\t}\n\t\tconst union = `z.discriminatedUnion(\"${discriminator}\", [${schemaStrings.join(\", \")}])`;\n\t\treturn wrapNullable(union, isNullable);\n\t}\n\n\tlet schemaStrings = schemas.map(s => context.generatePropertySchema(s, currentSchema));\n\tif (options?.passthrough) {\n\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t}\n\tconst union = `z.union([${schemaStrings.join(\", \")}])`;\n\treturn wrapNullable(union, isNullable);\n}\n\n/**\n * Helper to resolve schema (follows $ref if needed)\n */\nfunction resolveSchema(schema: OpenAPISchema, context: CompositionValidatorContext): OpenAPISchema {\n\tif (schema.$ref && context.resolveSchemaRef) {\n\t\tconst resolved = context.resolveSchemaRef(schema.$ref);\n\t\tif (resolved) {\n\t\t\treturn resolved;\n\t\t}\n\t}\n\treturn schema;\n}\n\n/**\n * Collect properties from a schema (including nested allOf)\n */\nfunction collectProperties(\n\tschema: OpenAPISchema,\n\tcontext: CompositionValidatorContext\n): Map<string, { schema: OpenAPISchema; source: string }> {\n\tconst resolved = resolveSchema(schema, context);\n\tconst props = new Map<string, { schema: OpenAPISchema; source: string }>();\n\n\t// Get source name for error messages\n\tconst sourceName = schema.$ref ? schema.$ref.split(\"/\").pop() || \"unknown\" : \"inline\";\n\n\t// Collect direct properties\n\tif (resolved.properties) {\n\t\tfor (const [key, value] of Object.entries(resolved.properties)) {\n\t\t\tprops.set(key, { schema: value, source: sourceName });\n\t\t}\n\t}\n\n\t// Recursively collect from nested allOf\n\tif (resolved.allOf) {\n\t\tfor (const subSchema of resolved.allOf) {\n\t\t\tconst subProps = collectProperties(subSchema, context);\n\t\t\tfor (const [key, value] of subProps) {\n\t\t\t\tif (!props.has(key)) {\n\t\t\t\t\tprops.set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\n/**\n * Check if two schemas are semantically equivalent\n */\nfunction schemasMatch(a: OpenAPISchema, b: OpenAPISchema): boolean {\n\t// Simple deep comparison for common cases\n\treturn JSON.stringify(a) === JSON.stringify(b);\n}\n\n/**\n * Detect conflicting properties across allOf schemas\n */\nfunction detectConflictingProperties(schemas: OpenAPISchema[], context: CompositionValidatorContext): string[] {\n\tconst conflicts: string[] = [];\n\tconst propertyMap = new Map<string, { schema: OpenAPISchema; source: string }>();\n\n\tfor (const schema of schemas) {\n\t\tconst schemaProps = collectProperties(schema, context);\n\n\t\tfor (const [propName, propInfo] of schemaProps) {\n\t\t\tconst existing = propertyMap.get(propName);\n\t\t\tif (existing) {\n\t\t\t\t// Check if the definitions match\n\t\t\t\tif (!schemasMatch(existing.schema, propInfo.schema)) {\n\t\t\t\t\tconflicts.push(\n\t\t\t\t\t\t`Property \"${propName}\" has conflicting definitions in ${existing.source} and ${propInfo.source}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpropertyMap.set(propName, propInfo);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn conflicts;\n}\n\n/**\n * Generate allOf validation\n *\n * Key fix: For inline objects in allOf, we generate the shape directly as an object literal\n * (e.g., { prop: z.string() }) instead of using z.object({...}).shape.\n * This avoids the invalid .nullable().shape pattern that occurs when inline objects\n * have nullable: true set.\n *\n * According to Zod docs (https://zod.dev/api?id=extend):\n * - .extend() accepts an object of shape definitions OR another schema's .shape\n * - For $refs: use baseSchema.extend(otherSchema.shape)\n * - For inline objects: use baseSchema.extend({ prop: z.string() })\n * - .nullable() must be applied AFTER all .extend() calls\n */\nexport function generateAllOf(\n\tschemas: OpenAPISchema[],\n\tisNullable: boolean,\n\tcontext: CompositionValidatorContext,\n\tcurrentSchema?: string,\n\texplicitNullableFalse = false\n): string {\n\tif (schemas.length === 1) {\n\t\t// When outer schema has explicit nullable: false, suppress defaultNullable on inner schema\n\t\t// This ensures that allOf: [{ $ref: '...' }] with nullable: false won't make the ref nullable\n\t\tconst singleSchema = context.generatePropertySchema(schemas[0], currentSchema, false, explicitNullableFalse);\n\t\treturn wrapNullable(singleSchema, isNullable);\n\t}\n\n\t// Detect conflicting properties and warn\n\tconst conflicts = detectConflictingProperties(schemas, context);\n\tlet conflictDescription = \"\";\n\tif (conflicts.length > 0) {\n\t\tfor (const conflict of conflicts) {\n\t\t\tconsole.warn(`[openapi-to-zod] Warning: allOf composition conflict - ${conflict}`);\n\t\t}\n\t\tconflictDescription = `allOf property conflicts detected: ${conflicts.join(\"; \")}`;\n\t}\n\n\t// Check if all schemas are objects (for .extend() support)\n\tconst allObjects = schemas.every(s => s.type === \"object\" || s.properties || s.$ref || s.allOf);\n\n\tlet result: string;\n\tif (allObjects) {\n\t\t// Use .extend() for object schemas (Zod v4 compliant - .merge() is deprecated)\n\t\t// First schema is the base - generate it normally\n\t\tlet merged = context.generatePropertySchema(schemas[0], currentSchema, false);\n\n\t\t// For subsequent schemas, determine how to extend\n\t\tfor (let i = 1; i < schemas.length; i++) {\n\t\t\tconst schema = schemas[i];\n\n\t\t\tif (schema.$ref) {\n\t\t\t\t// For $ref schemas, use .extend(refSchema.shape)\n\t\t\t\t// The ref generates a schema variable name like \"userSchema\"\n\t\t\t\tconst refSchema = context.generatePropertySchema(schema, currentSchema, false);\n\t\t\t\tmerged = `${merged}.extend(${refSchema}.shape)`;\n\t\t\t} else if (context.generateInlineObjectShape && (schema.properties || schema.type === \"object\")) {\n\t\t\t\t// For inline objects, generate shape directly as object literal\n\t\t\t\t// This avoids the .nullable().shape bug - we pass { prop: z.string() }\n\t\t\t\t// directly to .extend() instead of z.object({...}).nullable().shape\n\t\t\t\tconst inlineShape = context.generateInlineObjectShape(schema, currentSchema);\n\t\t\t\tmerged = `${merged}.extend(${inlineShape})`;\n\t\t\t} else {\n\t\t\t\t// Fallback for schemas without properties (e.g., just has allOf)\n\t\t\t\t// Generate full schema and use .shape\n\t\t\t\tconst schemaString = context.generatePropertySchema(schema, currentSchema, false);\n\t\t\t\tmerged = `${merged}.extend(${schemaString}.shape)`;\n\t\t\t}\n\t\t}\n\t\tresult = merged;\n\t} else {\n\t\t// Use .and() for non-object schemas (intersection)\n\t\tconst schemaStrings = schemas.map(s => context.generatePropertySchema(s, currentSchema, false));\n\t\tlet merged = schemaStrings[0];\n\t\tfor (let i = 1; i < schemaStrings.length; i++) {\n\t\t\tmerged = `${merged}.and(${schemaStrings[i]})`;\n\t\t}\n\t\tresult = merged;\n\t}\n\n\t// Add description about conflicts if any\n\tif (conflictDescription) {\n\t\tresult = `${result}.describe(\"${conflictDescription}\")`;\n\t}\n\n\t// Apply nullable at the END, after all .extend() calls\n\t// This is critical - .nullable() must come after .extend(), not before\n\treturn wrapNullable(result, isNullable);\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { addDescription } from \"../utils/string-utils\";\n\n/**\n * Generate Zod validation for number\n */\nexport function generateNumberValidation(schema: OpenAPISchema, isInt: boolean, useDescribe: boolean): string {\n\tlet validation = isInt ? \"z.number().int()\" : \"z.number()\";\n\n\t// Handle minimum with exclusive bounds\n\tif (schema.minimum !== undefined) {\n\t\tconst isExclusive = schema.exclusiveMinimum === true;\n\t\tvalidation += isExclusive ? `.gt(${schema.minimum})` : `.gte(${schema.minimum})`;\n\t} else if (typeof schema.exclusiveMinimum === \"number\") {\n\t\t// OpenAPI 3.1 style: exclusiveMinimum as number\n\t\tvalidation += `.gt(${schema.exclusiveMinimum})`;\n\t}\n\n\t// Handle maximum with exclusive bounds\n\tif (schema.maximum !== undefined) {\n\t\tconst isExclusive = schema.exclusiveMaximum === true;\n\t\tvalidation += isExclusive ? `.lt(${schema.maximum})` : `.lte(${schema.maximum})`;\n\t} else if (typeof schema.exclusiveMaximum === \"number\") {\n\t\t// OpenAPI 3.1 style: exclusiveMaximum as number\n\t\tvalidation += `.lt(${schema.exclusiveMaximum})`;\n\t}\n\n\tif (schema.multipleOf !== undefined) {\n\t\tvalidation += `.multipleOf(${schema.multipleOf})`;\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, useDescribe);\n}\n","import { generateJSDoc } from \"../generators/jsdoc-generator\";\nimport type { OpenAPISchema } from \"../types\";\nimport { generateDependencies, generateDependentRequired, generateIfThenElse } from \"./conditional-validator\";\n\n/**\n * Check if a property name needs to be quoted in TypeScript object literal\n */\nfunction needsQuoting(propName: string): boolean {\n\t// Valid identifier: starts with letter/underscore/$, followed by letters/digits/underscores/$\n\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\treturn !validIdentifier.test(propName);\n}\n\n/**\n * Generate property access expression (use dot notation for valid identifiers, bracket notation otherwise)\n */\nfunction generatePropertyAccess(propName: string): string {\n\treturn needsQuoting(propName) ? `obj[\"${propName}\"]` : `obj.${propName}`;\n}\n\nexport type ObjectMode = \"strict\" | \"normal\" | \"loose\";\n\nexport interface ObjectValidatorContext {\n\tgeneratePropertySchema: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tshouldIncludeProperty: (schema: OpenAPISchema) => boolean;\n\tmode: ObjectMode;\n\tincludeDescriptions: boolean;\n\tuseDescribe: boolean;\n}\n\n/**\n * Generate object schema\n */\nexport function generateObjectSchema(\n\tschema: OpenAPISchema,\n\tcontext: ObjectValidatorContext,\n\tcurrentSchema?: string\n): string {\n\tconst required = new Set(schema.required || []);\n\tconst properties: string[] = [];\n\n\t// Process properties if they exist\n\tif (schema.properties) {\n\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t// Skip properties based on readOnly/writeOnly and schemaType\n\t\t\tif (!context.shouldIncludeProperty(propSchema)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isRequired = required.has(propName);\n\t\t\tconst zodSchema = context.generatePropertySchema(propSchema, currentSchema);\n\n\t\t\t// Quote property name if it contains special characters\n\t\t\tconst quotedPropName = needsQuoting(propName) ? `\"${propName}\"` : propName;\n\t\t\tlet propertyDef = ` ${quotedPropName}: ${zodSchema}`;\n\t\t\tif (!isRequired) {\n\t\t\t\tpropertyDef += \".optional()\";\n\t\t\t}\n\n\t\t\t// Add JSDoc for property if enabled\n\t\t\tconst jsdoc = generateJSDoc(propSchema, propName, { includeDescriptions: context.includeDescriptions });\n\t\t\tif (jsdoc) {\n\t\t\t\tproperties.push(`${jsdoc.trimEnd()}\\n${propertyDef}`);\n\t\t\t} else {\n\t\t\t\tproperties.push(propertyDef);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Determine object method based on mode and additionalProperties\n\tlet objectMethod: string;\n\n\t// additionalProperties: false always uses strictObject\n\tif (schema.additionalProperties === false) {\n\t\tobjectMethod = \"z.strictObject\";\n\t} else {\n\t\t// Otherwise respect the mode setting\n\t\tswitch (context.mode) {\n\t\t\tcase \"strict\":\n\t\t\t\tobjectMethod = \"z.strictObject\";\n\t\t\t\tbreak;\n\t\t\tcase \"loose\":\n\t\t\t\tobjectMethod = \"z.looseObject\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tobjectMethod = \"z.object\";\n\t\t}\n\t}\n\n\tlet objectDef = `${objectMethod}({\\n${properties.join(\",\\n\")}\\n})`;\n\n\t// Handle additionalProperties for typed catchall\n\tif (schema.additionalProperties !== undefined) {\n\t\tif (typeof schema.additionalProperties === \"object\") {\n\t\t\t// Additional properties with specific schema\n\t\t\tconst additionalSchema = context.generatePropertySchema(schema.additionalProperties, currentSchema);\n\t\t\tobjectDef += `.catchall(${additionalSchema})`;\n\t\t} else if (schema.additionalProperties === true) {\n\t\t\t// Any additional properties allowed\n\t\t\tobjectDef += \".catchall(z.unknown())\";\n\t\t}\n\t\t// Note: additionalProperties: false is handled by using z.strictObject\n\t} else if (schema.patternProperties) {\n\t\t// If pattern properties are defined but additionalProperties is not, allow properties through\n\t\t// so they can be validated by pattern property refinements\n\t\tobjectDef += \".catchall(z.unknown())\";\n\t}\n\n\t// Handle minProperties and maxProperties\n\tif (schema.minProperties !== undefined || schema.maxProperties !== undefined) {\n\t\tconst conditions: string[] = [];\n\t\tif (schema.minProperties !== undefined) {\n\t\t\tconditions.push(`Object.keys(obj).length >= ${schema.minProperties}`);\n\t\t}\n\t\tif (schema.maxProperties !== undefined) {\n\t\t\tconditions.push(`Object.keys(obj).length <= ${schema.maxProperties}`);\n\t\t}\n\t\tconst condition = conditions.join(\" && \");\n\t\tlet message = \"Object \";\n\t\tif (schema.minProperties !== undefined && schema.maxProperties !== undefined) {\n\t\t\tmessage += `must have between ${schema.minProperties} and ${schema.maxProperties} properties`;\n\t\t} else if (schema.minProperties !== undefined) {\n\t\t\tmessage += `must have at least ${schema.minProperties} ${schema.minProperties === 1 ? \"property\" : \"properties\"}`;\n\t\t} else {\n\t\t\tmessage += `must have at most ${schema.maxProperties} ${schema.maxProperties === 1 ? \"property\" : \"properties\"}`;\n\t\t}\n\t\tobjectDef += `.refine((obj) => ${condition}, { message: \"${message}\" })`;\n\t}\n\n\t// Handle required fields that aren't in properties (common in schema dependencies)\n\tconst definedProps = new Set(Object.keys(schema.properties || {}));\n\tconst undefinedRequired = (schema.required || []).filter(prop => !definedProps.has(prop));\n\tif (undefinedRequired.length > 0) {\n\t\t// Need catchall to allow required fields that aren't in properties\n\t\tif (!objectDef.includes(\".catchall(\")) {\n\t\t\tobjectDef += \".catchall(z.unknown())\";\n\t\t}\n\t\tconst requiredChecks = undefinedRequired.map(prop => `${generatePropertyAccess(prop)} !== undefined`).join(\" && \");\n\t\tconst propList = undefinedRequired.join(\", \");\n\t\tobjectDef += `.refine((obj) => ${requiredChecks}, { message: \"Missing required fields: ${propList}\" })`;\n\t}\n\n\t// Handle pattern properties with first-match-wins priority\n\tif (schema.patternProperties) {\n\t\tconst definedProps = Object.keys(schema.properties || {});\n\t\tconst definedPropsSet = `new Set(${JSON.stringify(definedProps)})`;\n\t\tconst patterns = Object.entries(schema.patternProperties);\n\n\t\t// Generate schemas for all patterns\n\t\tconst patternSchemas = patterns.map(([pattern, patternSchema]) => ({\n\t\t\tpattern,\n\t\t\tescapedPattern: pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\"),\n\t\t\tzodSchema: context.generatePropertySchema(patternSchema, currentSchema),\n\t\t}));\n\n\t\t// Single superRefine for all patterns (more efficient)\n\t\tobjectDef += `.superRefine((obj, ctx) => {\n\t\t\tconst definedPropsSet = ${definedPropsSet};\n\t\t\tconst patterns = ${JSON.stringify(patternSchemas.map(p => ({ pattern: p.escapedPattern })))};\n\t\t\tconst schemas = [${patternSchemas.map(p => p.zodSchema).join(\", \")}];\n\t\t\tconst regexps = patterns.map(p => new RegExp(p.pattern));\n\n\t\t\t// Check all object keys\n\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\t// Skip properties that are explicitly defined\n\t\t\t\tif (definedPropsSet.has(key)) continue;\n\n\t\t\t\t// Find first matching pattern (first-match-wins priority)\n\t\t\t\tfor (let i = 0; i < regexps.length; i++) {\n\t\t\t\t\tif (regexps[i].test(key)) {\n\t\t\t\t\t\tconst validation = schemas[i].safeParse(obj[key]);\n\t\t\t\t\t\tif (!validation.success) {\n\t\t\t\t\t\t\t// Add detailed error messages with property name and pattern\n\t\t\t\t\t\t\tfor (const issue of validation.error.issues) {\n\t\t\t\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\t\t\t\t...issue,\n\t\t\t\t\t\t\t\t\tpath: [key, ...issue.path],\n\t\t\t\t\t\t\t\t\tmessage: \\`Property '\\${key}' (pattern '\\${patterns[i].pattern}'): \\${issue.message}\\`\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak; // First match wins, stop checking other patterns\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\t// Handle property names validation (consolidated for efficiency)\n\tif (schema.propertyNames) {\n\t\tconst hasPattern = schema.propertyNames.pattern !== undefined;\n\t\tconst hasMinLength = schema.propertyNames.minLength !== undefined;\n\t\tconst hasMaxLength = schema.propertyNames.maxLength !== undefined;\n\n\t\tif (hasPattern || hasMinLength || hasMaxLength) {\n\t\t\tconst escapedPattern =\n\t\t\t\thasPattern && schema.propertyNames.pattern\n\t\t\t\t\t? schema.propertyNames.pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")\n\t\t\t\t\t: null;\n\t\t\tconst minLen = schema.propertyNames.minLength;\n\t\t\tconst maxLen = schema.propertyNames.maxLength;\n\n\t\t\tobjectDef += `.superRefine((obj, ctx) => {\n\t\t\t\t${escapedPattern ? `const pattern = /${escapedPattern}/;` : \"\"}\n\n\t\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\t\tconst failures: string[] = [];\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasPattern\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (!pattern.test(key)) {\n\t\t\t\t\t\tfailures.push(\"must match pattern '${schema.propertyNames.pattern}'\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasMinLength\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (key.length < ${minLen}) {\n\t\t\t\t\t\tfailures.push(\"must be at least ${minLen} characters\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasMaxLength\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (key.length > ${maxLen}) {\n\t\t\t\t\t\tfailures.push(\"must be at most ${maxLen} characters\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\tif (failures.length > 0) {\n\t\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\t\tmessage: \\`Property name '\\${key}' \\${failures.join(\", \")}\\`,\n\t\t\t\t\t\t\tpath: [key]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})`;\n\t\t}\n\t}\n\n\t// Handle dependencies (OpenAPI 3.0)\n\tobjectDef += generateDependencies(schema, context.generatePropertySchema, currentSchema);\n\n\t// Handle dependentRequired\n\tobjectDef += generateDependentRequired(schema);\n\n\t// Handle if/then/else conditionals\n\tobjectDef += generateIfThenElse(schema);\n\n\treturn objectDef;\n}\n","import type { OpenAPISchema } from \"../types\";\n\n/**\n * Generate property access expression (use dot notation for valid identifiers, bracket notation otherwise)\n */\nfunction generatePropertyAccess(propName: string): string {\n\t// Valid identifier: starts with letter/underscore/$, followed by letters/digits/underscores/$\n\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\treturn validIdentifier.test(propName) ? `obj.${propName}` : `obj[\"${propName}\"]`;\n}\n\n/**\n * Generate validation for dependencies (OpenAPI 3.0)\n * Generates detailed error messages showing which specific fields are missing\n */\nexport function generateDependencies(\n\tschema: OpenAPISchema,\n\tgeneratePropertySchema?: (schema: OpenAPISchema, currentSchema?: string) => string,\n\tcurrentSchema?: string\n): string {\n\tif (!schema.dependencies) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, dependency] of Object.entries(schema.dependencies)) {\n\t\tif (Array.isArray(dependency)) {\n\t\t\t// Skip empty dependency arrays (no dependencies to enforce)\n\t\t\tif (dependency.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Property dependency - show specific missing properties in error message\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tconst checkLogic = dependency\n\t\t\t\t.map(p => {\n\t\t\t\t\tconst pAccess = generatePropertyAccess(p);\n\t\t\t\t\treturn `if (${pAccess} === undefined) missing.push('${p}');`;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\\t\\t\");\n\n\t\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\t\tif (${propAccess} === undefined) return;\n\t\t\t\tconst missing: string[] = [];\n\t\t\t\t${checkLogic}\n\t\t\t\tif (missing.length > 0) {\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: \\`When '${prop}' is present, the following properties are required: \\${missing.join(', ')}\\`,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})`;\n\t\t} else if (generatePropertySchema) {\n\t\t\t// Schema dependency - show detailed validation errors\n\t\t\tconst depSchema: OpenAPISchema = { ...dependency, type: dependency.type || \"object\" };\n\t\t\tconst depSchemaValidation = generatePropertySchema(depSchema, currentSchema);\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\n\t\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\t\tif (${propAccess} === undefined) return;\n\t\t\t\tconst validation = ${depSchemaValidation}.safeParse(obj);\n\t\t\t\tif (!validation.success) {\n\t\t\t\t\tconst errors = validation.error.issues.map(i => \\` - \\${i.path.join('.')}: \\${i.message}\\`).join('\\\\n');\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: \\`When '${prop}' is present, object must satisfy additional constraints:\\\\n\\${errors}\\`,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})`;\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Generate condition check for if/then/else\n */\nexport function generateConditionalCheck(schema: OpenAPISchema): string {\n\tconst conditions: string[] = [];\n\n\t// Check properties\n\tif (schema.properties) {\n\t\tfor (const [prop, propSchema] of Object.entries(schema.properties)) {\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tif (propSchema.type) {\n\t\t\t\tconditions.push(`typeof ${propAccess} === \"${propSchema.type}\"`);\n\t\t\t}\n\t\t\tif (propSchema.const !== undefined) {\n\t\t\t\tconst value = typeof propSchema.const === \"string\" ? `\"${propSchema.const}\"` : propSchema.const;\n\t\t\t\tconditions.push(`${propAccess} === ${value}`);\n\t\t\t}\n\t\t\tif (propSchema.minimum !== undefined) {\n\t\t\t\tconditions.push(`${propAccess} >= ${propSchema.minimum}`);\n\t\t\t}\n\t\t\tif (propSchema.maximum !== undefined) {\n\t\t\t\tconditions.push(`${propAccess} <= ${propSchema.maximum}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check required properties\n\tif (schema.required) {\n\t\tfor (const prop of schema.required) {\n\t\t\tconditions.push(`${generatePropertyAccess(prop)} !== undefined`);\n\t\t}\n\t}\n\n\treturn conditions.length > 0 ? conditions.join(\" && \") : \"true\";\n}\n\n/**\n * Generate validation for then/else clauses\n */\nexport function generateConditionalValidation(schema: OpenAPISchema): string {\n\tconst checks: string[] = [];\n\n\t// Check required properties\n\tif (schema.required) {\n\t\tfor (const prop of schema.required) {\n\t\t\tchecks.push(`${generatePropertyAccess(prop)} !== undefined`);\n\t\t}\n\t}\n\n\t// Check properties constraints\n\tif (schema.properties) {\n\t\tfor (const [prop, propSchema] of Object.entries(schema.properties)) {\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tif (propSchema.minimum !== undefined) {\n\t\t\t\tchecks.push(`${propAccess} === undefined || ${propAccess} >= ${propSchema.minimum}`);\n\t\t\t}\n\t\t\tif (propSchema.maximum !== undefined) {\n\t\t\t\tchecks.push(`${propAccess} === undefined || ${propAccess} <= ${propSchema.maximum}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn checks.length > 0 ? checks.join(\" && \") : \"true\";\n}\n\n/**\n * Generate if/then/else conditional validation with better error messages\n * Uses superRefine with detailed error messages for complex cases\n */\nexport function generateIfThenElse(schema: OpenAPISchema): string {\n\tif (!schema.if || (!schema.then && !schema.else)) {\n\t\treturn \"\";\n\t}\n\n\tconst ifCondition = generateConditionalCheck(schema.if);\n\n\tif (schema.then && schema.else) {\n\t\t// Both then and else - provide detailed error messages\n\t\tconst thenValidation = generateConditionalValidation(schema.then);\n\t\tconst elseValidation = generateConditionalValidation(schema.else);\n\n\t\t// Try to detect which specific validations failed\n\t\tconst thenRequiredProps = schema.then.required || [];\n\t\tconst elseRequiredProps = schema.else.required || [];\n\n\t\treturn `.superRefine((obj, ctx) => {\n\t\t\tconst ifConditionMet = ${ifCondition};\n\t\t\tif (ifConditionMet) {\n\t\t\t\t// Then branch\n\t\t\t\tconst thenValid = ${thenValidation};\n\t\t\t\tif (!thenValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\tthenRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingThenProps = ${JSON.stringify(thenRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingThenProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is met, required properties are missing: \\${missingThenProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Else branch\n\t\t\t\tconst elseValid = ${elseValidation};\n\t\t\t\tif (!elseValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\telseRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingElseProps = ${JSON.stringify(elseRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingElseProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is not met, required properties are missing: \\${missingElseProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is not met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is not met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\tif (schema.then) {\n\t\t// Only then - provide detailed error message\n\t\tconst thenValidation = generateConditionalValidation(schema.then);\n\t\tconst thenRequiredProps = schema.then.required || [];\n\n\t\treturn `.superRefine((obj, ctx) => {\n\t\t\tconst ifConditionMet = ${ifCondition};\n\t\t\tif (ifConditionMet) {\n\t\t\t\tconst thenValid = ${thenValidation};\n\t\t\t\tif (!thenValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\tthenRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingProps = ${JSON.stringify(thenRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is met, required properties are missing: \\${missingProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\t// Only else - provide detailed error message\n\tif (!schema.else) return \"\";\n\tconst elseValidation = generateConditionalValidation(schema.else);\n\tconst elseRequiredProps = schema.else.required || [];\n\n\treturn `.superRefine((obj, ctx) => {\n\t\tconst ifConditionMet = ${ifCondition};\n\t\tif (!ifConditionMet) {\n\t\t\tconst elseValid = ${elseValidation};\n\t\t\tif (!elseValid) {\n\t\t\t\t${\n\t\t\t\t\telseRequiredProps.length > 0\n\t\t\t\t\t\t? `\n\t\t\t\tconst missingProps = ${JSON.stringify(elseRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\tconst message = missingProps.length > 0 \n\t\t\t\t\t? \\`When condition is not met, required properties are missing: \\${missingProps.join(', ')}\\`\n\t\t\t\t\t: \"When condition is not met, validation constraints failed\";\n\t\t\t\t`\n\t\t\t\t\t\t: `\n\t\t\t\tconst message = \"When condition is not met, validation constraints failed\";\n\t\t\t\t`\n\t\t\t\t}\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: message,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t})`;\n}\n\n/**\n * Generate dependent required validation (OpenAPI 3.1)\n * Generates detailed error messages showing which specific fields are missing\n */\nexport function generateDependentRequired(schema: OpenAPISchema): string {\n\tif (!schema.dependentRequired) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, requiredProps] of Object.entries(schema.dependentRequired)) {\n\t\t// Skip empty required arrays (no dependencies to enforce)\n\t\tif (requiredProps.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst propAccess = generatePropertyAccess(prop);\n\t\tconst checkLogic = requiredProps\n\t\t\t.map(rp => {\n\t\t\t\tconst rpAccess = generatePropertyAccess(rp);\n\t\t\t\treturn `if (${rpAccess} === undefined) missing.push('${rp}');`;\n\t\t\t})\n\t\t\t.join(\"\\n\\t\\t\");\n\n\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\tif (${propAccess} === undefined) return;\n\t\t\tconst missing: string[] = [];\n\t\t\t${checkLogic}\n\t\t\tif (missing.length > 0) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: \\`When '${prop}' is present, the following properties are required: \\${missing.join(', ')}\\`,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t})`;\n\t}\n\n\treturn result;\n}\n\n/**\n * Generate dependent schemas validation (JSON Schema 2019-09 / OpenAPI 3.1)\n * This is the modern replacement for schema-based dependencies\n * Generates detailed error messages showing validation failures\n */\nexport function generateDependentSchemas(\n\tschema: OpenAPISchema & { dependentSchemas?: Record<string, OpenAPISchema> },\n\tgeneratePropertySchema?: (schema: OpenAPISchema, currentSchema?: string) => string,\n\tcurrentSchema?: string\n): string {\n\tif (!schema.dependentSchemas || !generatePropertySchema) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {\n\t\tconst depSchemaValidation = generatePropertySchema(depSchema, currentSchema);\n\t\tconst propAccess = generatePropertyAccess(prop);\n\n\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\tif (${propAccess} === undefined) return;\n\t\t\tconst validation = ${depSchemaValidation}.safeParse(obj);\n\t\t\tif (!validation.success) {\n\t\t\t\tconst errors = validation.error.issues.map(i => \\` - \\${i.path.join('.')}: \\${i.message}\\`).join('\\\\n');\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: \\`When '${prop}' is present, dependent schema validation failed:\\\\n\\${errors}\\`,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t})`;\n\t}\n\treturn result;\n}\n\n/**\n * Validate dependency graph for circular dependencies\n * Returns validation result with any detected circular dependency errors\n */\nexport function validateDependencyGraph(\n\tschema: OpenAPISchema,\n\tschemaName: string\n): { valid: boolean; errors: string[] } {\n\tconst errors: string[] = [];\n\n\tif (!schema.dependencies && !schema.dependentRequired) {\n\t\treturn { valid: true, errors: [] };\n\t}\n\n\t// Build dependency graph\n\tconst graph = new Map<string, Set<string>>();\n\n\t// Add dependentRequired edges\n\tif (schema.dependentRequired) {\n\t\tfor (const [prop, deps] of Object.entries(schema.dependentRequired)) {\n\t\t\tif (!graph.has(prop)) {\n\t\t\t\tgraph.set(prop, new Set());\n\t\t\t}\n\t\t\tconst propDeps = graph.get(prop);\n\t\t\tif (propDeps) {\n\t\t\t\tfor (const dep of deps) {\n\t\t\t\t\tpropDeps.add(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add dependencies (array type) edges\n\tif (schema.dependencies) {\n\t\tfor (const [prop, dep] of Object.entries(schema.dependencies)) {\n\t\t\tif (Array.isArray(dep)) {\n\t\t\t\tif (!graph.has(prop)) {\n\t\t\t\t\tgraph.set(prop, new Set());\n\t\t\t\t}\n\t\t\t\tconst propDeps = graph.get(prop);\n\t\t\t\tif (propDeps) {\n\t\t\t\t\tfor (const d of dep) {\n\t\t\t\t\t\tpropDeps.add(d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Detect cycles using DFS\n\tconst visited = new Set<string>();\n\tconst recStack = new Set<string>();\n\tconst path: string[] = [];\n\n\tfunction detectCycle(prop: string): boolean {\n\t\tvisited.add(prop);\n\t\trecStack.add(prop);\n\t\tpath.push(prop);\n\n\t\tconst deps = graph.get(prop) || new Set();\n\t\tfor (const dep of deps) {\n\t\t\tif (!visited.has(dep)) {\n\t\t\t\tif (detectCycle(dep)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (recStack.has(dep)) {\n\t\t\t\t// Cycle detected\n\t\t\t\tconst cycleStart = path.indexOf(dep);\n\t\t\t\tconst cycle = [...path.slice(cycleStart), dep];\n\t\t\t\terrors.push(`Circular dependency detected in schema '${schemaName}': ${cycle.join(\" -> \")}`);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\trecStack.delete(prop);\n\t\tpath.pop();\n\t\treturn false;\n\t}\n\n\t// Check all roots\n\tfor (const prop of graph.keys()) {\n\t\tif (!visited.has(prop)) {\n\t\t\tdetectCycle(prop);\n\t\t}\n\t}\n\n\treturn { valid: errors.length === 0, errors };\n}\n\n/**\n * Extract schema dependencies as reusable schemas\n * Useful for code generation and schema reuse\n */\nexport function extractSchemaDependencies(schema: OpenAPISchema, schemaName: string): Map<string, OpenAPISchema> {\n\tconst extracted = new Map<string, OpenAPISchema>();\n\n\tif (!schema.dependencies) {\n\t\treturn extracted;\n\t}\n\n\tfor (const [prop, dependency] of Object.entries(schema.dependencies)) {\n\t\tif (!Array.isArray(dependency)) {\n\t\t\t// This is a schema dependency\n\t\t\tconst depSchemaName = `${schemaName}_${prop}_Dependency`;\n\t\t\tconst depSchema: OpenAPISchema = {\n\t\t\t\t...dependency,\n\t\t\t\ttype: dependency.type || \"object\",\n\t\t\t};\n\t\t\textracted.set(depSchemaName, depSchema);\n\t\t}\n\t}\n\n\treturn extracted;\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { LRUCache } from \"../utils/lru-cache\";\nimport { addDescription, escapePattern } from \"../utils/string-utils\";\n\n// Performance optimization: Cache compiled regex patterns with configurable size limit\n// Cache is shared across all generators for performance, but size can be configured per generator\nlet PATTERN_CACHE = new LRUCache<string, string>(1000);\n\n/**\n * Configure the pattern cache size\n * Should be called before generating schemas for large specifications\n */\nexport function configurePatternCache(size: number): void {\n\tif (size > 0 && size !== PATTERN_CACHE.capacity) {\n\t\tPATTERN_CACHE = new LRUCache<string, string>(size);\n\t}\n}\n\n// Default format map (without date-time, which can be customized)\nconst DEFAULT_FORMAT_MAP: Record<string, string> = {\n\tuuid: \"z.uuid()\",\n\temail: \"z.email()\",\n\turi: \"z.url()\",\n\turl: \"z.url()\",\n\t\"uri-reference\": 'z.string().refine((val) => !/\\\\s/.test(val), { message: \"Must be a valid URI reference\" })',\n\thostname:\n\t\t'z.string().refine((val) => /^(?=.{1,253}$)(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)\\\\.)*(?!-)[A-Za-z0-9-]{1,63}(?<!-)$/.test(val), { message: \"Must be a valid hostname\" })',\n\tbyte: \"z.base64()\",\n\tbinary: \"z.string()\",\n\tdate: \"z.iso.date()\",\n\ttime: \"z.iso.time()\",\n\tduration:\n\t\t'z.string().refine((val) => /^P(?:(?:\\\\d+Y)?(?:\\\\d+M)?(?:\\\\d+D)?(?:T(?:\\\\d+H)?(?:\\\\d+M)?(?:\\\\d+(?:\\\\.\\\\d+)?S)?)?|\\\\d+W)$/.test(val) && !/^PT?$/.test(val), { message: \"Must be a valid ISO 8601 duration\" })',\n\tipv4: \"z.ipv4()\",\n\tipv6: \"z.ipv6()\",\n\temoji: \"z.emoji()\",\n\tbase64: \"z.base64()\",\n\tbase64url: \"z.base64url()\",\n\tnanoid: \"z.nanoid()\",\n\tcuid: \"z.cuid()\",\n\tcuid2: \"z.cuid2()\",\n\tulid: \"z.ulid()\",\n\tcidr: \"z.cidrv4()\", // Default to v4\n\tcidrv4: \"z.cidrv4()\",\n\tcidrv6: \"z.cidrv6()\",\n\t\"json-pointer\":\n\t\t'z.string().refine((val) => val === \"\" || /^(\\\\/([^~/]|~0|~1)+)+$/.test(val), { message: \"Must be a valid JSON Pointer (RFC 6901)\" })',\n\t\"relative-json-pointer\":\n\t\t'z.string().refine((val) => /^(0|[1-9]\\\\d*)(#|(\\\\/([^~/]|~0|~1)+)*)$/.test(val), { message: \"Must be a valid relative JSON Pointer\" })',\n};\n\n// Mutable format map that includes date-time and can be configured\nlet FORMAT_MAP: Record<string, string> = {\n\t...DEFAULT_FORMAT_MAP,\n\t\"date-time\": \"z.iso.datetime()\",\n};\n\n/**\n * Configure custom date-time format validation\n * Overrides the default z.iso.datetime() with a custom regex pattern\n *\n * @param pattern - Regex pattern (string or RegExp) for date-time validation\n * @throws {Error} If the provided pattern is not a valid regular expression\n * @example\n * // String pattern (required for JSON/YAML configs)\n * configureDateTimeFormat('^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}$')\n *\n * @example\n * // RegExp literal (TypeScript configs only)\n * configureDateTimeFormat(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$/)\n */\nexport function configureDateTimeFormat(pattern?: string | RegExp): void {\n\tif (!pattern) {\n\t\t// Reset to default\n\t\tFORMAT_MAP[\"date-time\"] = \"z.iso.datetime()\";\n\t\treturn;\n\t}\n\n\t// Convert RegExp to string if needed\n\tconst patternStr = pattern instanceof RegExp ? pattern.source : pattern;\n\n\t// Empty string resets to default\n\tif (patternStr === \"\") {\n\t\tFORMAT_MAP[\"date-time\"] = \"z.iso.datetime()\";\n\t\treturn;\n\t}\n\n\t// Validate the regex pattern\n\ttry {\n\t\tnew RegExp(patternStr);\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid regular expression pattern for customDateTimeFormatRegex: ${patternStr}. ${\n\t\t\t\terror instanceof Error ? error.message : \"Pattern is malformed\"\n\t\t\t}`\n\t\t);\n\t}\n\n\t// Escape the pattern for use in generated code\n\tconst escapedPattern = escapePattern(patternStr);\n\n\t// Update the format map with the custom regex\n\tFORMAT_MAP[\"date-time\"] = `z.string().regex(/${escapedPattern}/)`;\n}\n\n/**\n * Reset format map to defaults (useful for testing)\n */\nexport function resetFormatMap(): void {\n\tFORMAT_MAP = {\n\t\t...DEFAULT_FORMAT_MAP,\n\t\t\"date-time\": \"z.iso.datetime()\",\n\t};\n}\n\n/**\n * Generate Zod validation for string with format (Zod v4 compatible)\n */\nexport function generateStringValidation(schema: OpenAPISchema, useDescribe: boolean): string {\n\t// Handle format with Zod v4 top-level functions (performance optimized with map)\n\tlet validation = FORMAT_MAP[schema.format || \"\"] || \"z.string()\";\n\n\t// Add length constraints\n\tif (schema.minLength !== undefined) {\n\t\tvalidation += `.min(${schema.minLength})`;\n\t}\n\tif (schema.maxLength !== undefined) {\n\t\tvalidation += `.max(${schema.maxLength})`;\n\t}\n\n\t// Add pattern (with cached escaping for performance)\n\tif (schema.pattern) {\n\t\tlet escapedPattern = PATTERN_CACHE.get(schema.pattern);\n\t\tif (escapedPattern === undefined) {\n\t\t\tescapedPattern = escapePattern(schema.pattern);\n\t\t\tPATTERN_CACHE.set(schema.pattern, escapedPattern);\n\t\t}\n\t\tvalidation += `.regex(/${escapedPattern}/)`;\n\t}\n\n\t// Handle content encoding (OpenAPI 3.1)\n\tif (schema.contentEncoding && !schema.format) {\n\t\tswitch (schema.contentEncoding) {\n\t\t\tcase \"base64\":\n\t\t\t\tvalidation = \"z.base64()\";\n\t\t\t\tbreak;\n\t\t\tcase \"base64url\":\n\t\t\t\tvalidation = \"z.base64url()\";\n\t\t\t\tbreak;\n\t\t\tcase \"quoted-printable\":\n\t\t\t\t// Quoted-printable validation\n\t\t\t\tvalidation =\n\t\t\t\t\t'z.string().refine((val) => /^[\\\\x20-\\\\x7E\\\\r\\\\n=]*$/.test(val), { message: \"Must be valid quoted-printable encoding\" })';\n\t\t\t\tbreak;\n\t\t\tcase \"7bit\":\n\t\t\tcase \"8bit\":\n\t\t\tcase \"binary\":\n\t\t\t\t// Basic string validation for these encodings\n\t\t\t\tvalidation = \"z.string()\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Unknown encoding, use string with refinement note\n\t\t\t\tvalidation = `z.string().describe(\"Content encoding: ${schema.contentEncoding}\")`;\n\t\t}\n\n\t\t// Re-apply constraints after encoding\n\t\tif (schema.minLength !== undefined) {\n\t\t\tvalidation += `.min(${schema.minLength})`;\n\t\t}\n\t\tif (schema.maxLength !== undefined) {\n\t\t\tvalidation += `.max(${schema.maxLength})`;\n\t\t}\n\t\tif (schema.pattern) {\n\t\t\tlet escapedPattern = PATTERN_CACHE.get(schema.pattern);\n\t\t\tif (escapedPattern === undefined) {\n\t\t\t\tescapedPattern = escapePattern(schema.pattern);\n\t\t\t\tPATTERN_CACHE.set(schema.pattern, escapedPattern);\n\t\t\t}\n\t\t\tvalidation += `.regex(/${escapedPattern}/)`;\n\t\t}\n\t} else if (schema.contentMediaType) {\n\t\t// Add refinement for media type validation\n\t\tconst mediaType = schema.contentMediaType;\n\t\tif (mediaType === \"application/json\") {\n\t\t\tvalidation += `.refine((val) => { try { JSON.parse(val); return true; } catch { return false; } }, { message: \"Must be valid JSON\" })`;\n\t\t} else if (mediaType === \"application/xml\" || mediaType === \"text/xml\") {\n\t\t\t// Basic XML validation - check for well-formed XML structure\n\t\t\tvalidation += `.refine((val) => { try { if (typeof DOMParser !== \"undefined\") { const parser = new DOMParser(); const doc = parser.parseFromString(val, \"text/xml\"); return !doc.querySelector(\"parsererror\"); } return /^\\\\s*<[^>]+>/.test(val); } catch { return false; } }, { message: \"Must be valid XML\" })`;\n\t\t} else if (mediaType === \"application/yaml\" || mediaType === \"application/x-yaml\" || mediaType === \"text/yaml\") {\n\t\t\t// Basic YAML validation - check for basic YAML structure\n\t\t\tvalidation += `.refine((val) => { try { return val.trim().length > 0 && !/^[[{]/.test(val.trim()); } catch { return false; } }, { message: \"Must be valid YAML\" })`;\n\t\t} else if (mediaType === \"text/html\") {\n\t\t\t// Basic HTML validation - check for HTML tags\n\t\t\tvalidation += `.refine((val) => /<[^>]+>/.test(val), { message: \"Must contain HTML tags\" })`;\n\t\t} else if (mediaType === \"text/plain\") {\n\t\t\t// Plain text - no special validation needed, but mark it\n\t\t\tvalidation += `.refine(() => true, { message: \"Plain text content\" })`;\n\t\t}\n\t\t// Other media types default to no validation beyond string\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, useDescribe);\n}\n","import { minimatch } from \"minimatch\";\nimport type { OperationFilters } from \"../types\";\n\n/**\n * Filter statistics to track which operations were included/excluded\n */\nexport interface FilterStatistics {\n\ttotalOperations: number;\n\tincludedOperations: number;\n\tfilteredByTags: number;\n\tfilteredByPaths: number;\n\tfilteredByMethods: number;\n\tfilteredByOperationIds: number;\n\tfilteredByDeprecated: number;\n}\n\n/**\n * Create a new filter statistics object with all counters initialized to zero\n */\nexport function createFilterStatistics(): FilterStatistics {\n\treturn {\n\t\ttotalOperations: 0,\n\t\tincludedOperations: 0,\n\t\tfilteredByTags: 0,\n\t\tfilteredByPaths: 0,\n\t\tfilteredByMethods: 0,\n\t\tfilteredByOperationIds: 0,\n\t\tfilteredByDeprecated: 0,\n\t};\n}\n\n/**\n * Check if a value matches any of the patterns (supports glob patterns)\n * Empty patterns array = no constraint (returns true)\n */\nfunction matchesAnyPattern(value: string | undefined, patterns: string[] | undefined): boolean {\n\tif (!patterns || patterns.length === 0) {\n\t\treturn false; // No constraint means \"don't use this filter\"\n\t}\n\tif (!value) {\n\t\treturn false;\n\t}\n\treturn patterns.some(pattern => minimatch(value, pattern));\n}\n\n/**\n * Check if an array contains any of the specified values\n * Empty values array = no constraint (returns false)\n */\nfunction containsAny(arr: string[] | undefined, values: string[] | undefined): boolean {\n\tif (!values || values.length === 0) {\n\t\treturn false; // No constraint means \"don't use this filter\"\n\t}\n\tif (!arr || arr.length === 0) {\n\t\treturn false;\n\t}\n\treturn values.some(value => arr.includes(value));\n}\n\n/**\n * Determine if an operation should be included based on filter criteria\n *\n * Filter logic:\n * 1. If no filters specified, include all operations\n * 2. Empty arrays are treated as \"no constraint\" (not as \"exclude all\")\n * 3. Include filters are applied first (allowlist)\n * 4. Exclude filters are applied second (blocklist)\n * 5. Exclude rules always win over include rules\n *\n * @param operation - The OpenAPI operation object\n * @param path - The operation path (e.g., \"/users/{id}\")\n * @param method - The HTTP method (e.g., \"get\", \"post\")\n * @param filters - Optional filter configuration\n * @param stats - Optional statistics object to track filtering reasons\n * @returns true if the operation should be included, false otherwise\n */\nexport function shouldIncludeOperation(\n\toperation: any,\n\tpath: string,\n\tmethod: string,\n\tfilters?: OperationFilters,\n\tstats?: FilterStatistics\n): boolean {\n\t// If no filters specified, include all operations\n\tif (!filters) {\n\t\treturn true;\n\t}\n\n\tconst methodLower = method.toLowerCase();\n\tconst operationId = operation?.operationId;\n\tconst tags = operation?.tags || [];\n\tconst deprecated = operation?.deprecated === true;\n\n\t// Apply include filters first (allowlist)\n\t// If any include filter is specified and the operation doesn't match, exclude it\n\n\t// Check includeTags\n\tif (filters.includeTags && filters.includeTags.length > 0) {\n\t\tif (!containsAny(tags, filters.includeTags)) {\n\t\t\tif (stats) stats.filteredByTags++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includePaths\n\tif (filters.includePaths && filters.includePaths.length > 0) {\n\t\tif (!matchesAnyPattern(path, filters.includePaths)) {\n\t\t\tif (stats) stats.filteredByPaths++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includeMethods\n\tif (filters.includeMethods && filters.includeMethods.length > 0) {\n\t\tconst methodsLower = filters.includeMethods.map(m => m.toLowerCase());\n\t\tif (!methodsLower.includes(methodLower)) {\n\t\t\tif (stats) stats.filteredByMethods++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includeOperationIds\n\tif (filters.includeOperationIds && filters.includeOperationIds.length > 0) {\n\t\tif (!matchesAnyPattern(operationId, filters.includeOperationIds)) {\n\t\t\tif (stats) stats.filteredByOperationIds++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Apply exclude filters second (blocklist)\n\t// If the operation matches any exclude filter, exclude it\n\n\t// Check excludeDeprecated\n\tif (filters.excludeDeprecated === true && deprecated) {\n\t\tif (stats) stats.filteredByDeprecated++;\n\t\treturn false;\n\t}\n\n\t// Check excludeTags\n\tif (filters.excludeTags && filters.excludeTags.length > 0) {\n\t\tif (containsAny(tags, filters.excludeTags)) {\n\t\t\tif (stats) stats.filteredByTags++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludePaths\n\tif (filters.excludePaths && filters.excludePaths.length > 0) {\n\t\tif (matchesAnyPattern(path, filters.excludePaths)) {\n\t\t\tif (stats) stats.filteredByPaths++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludeMethods\n\tif (filters.excludeMethods && filters.excludeMethods.length > 0) {\n\t\tconst methodsLower = filters.excludeMethods.map(m => m.toLowerCase());\n\t\tif (methodsLower.includes(methodLower)) {\n\t\t\tif (stats) stats.filteredByMethods++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludeOperationIds\n\tif (filters.excludeOperationIds && filters.excludeOperationIds.length > 0) {\n\t\tif (matchesAnyPattern(operationId, filters.excludeOperationIds)) {\n\t\t\tif (stats) stats.filteredByOperationIds++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Operation passed all filters\n\treturn true;\n}\n\n/**\n * Validate filter statistics and emit warnings for filters that matched nothing\n * Helps users debug filter configurations that might be too restrictive or contain typos\n *\n * @param stats - Filter statistics object\n * @param filters - The filter configuration to validate\n */\nexport function validateFilters(stats: FilterStatistics, filters?: OperationFilters): void {\n\tif (!filters || stats.totalOperations === 0) {\n\t\treturn;\n\t}\n\n\t// If all operations were filtered out, emit a warning\n\tif (stats.includedOperations === 0) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Warning: All ${stats.totalOperations} operations were filtered out. Check your operationFilters configuration.`\n\t\t);\n\n\t\t// Provide specific guidance about which filters might be the issue\n\t\tconst filterBreakdown: string[] = [];\n\t\tif (stats.filteredByTags > 0) filterBreakdown.push(`${stats.filteredByTags} by tags`);\n\t\tif (stats.filteredByPaths > 0) filterBreakdown.push(`${stats.filteredByPaths} by paths`);\n\t\tif (stats.filteredByMethods > 0) filterBreakdown.push(`${stats.filteredByMethods} by methods`);\n\t\tif (stats.filteredByOperationIds > 0) filterBreakdown.push(`${stats.filteredByOperationIds} by operationIds`);\n\t\tif (stats.filteredByDeprecated > 0) filterBreakdown.push(`${stats.filteredByDeprecated} by deprecated flag`);\n\n\t\tif (filterBreakdown.length > 0) {\n\t\t\tconsole.warn(` Filtered: ${filterBreakdown.join(\", \")}`);\n\t\t}\n\t}\n}\n\n/**\n * Format filter statistics for display in generated output\n * Returns a formatted string suitable for inclusion in comments\n *\n * @param stats - Filter statistics object\n * @returns Formatted statistics string\n */\nexport function formatFilterStatistics(stats: FilterStatistics): string {\n\tif (stats.totalOperations === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"Operation Filtering:\");\n\tlines.push(` Total operations: ${stats.totalOperations}`);\n\tlines.push(` Included operations: ${stats.includedOperations}`);\n\n\tconst filteredCount =\n\t\tstats.filteredByTags +\n\t\tstats.filteredByPaths +\n\t\tstats.filteredByMethods +\n\t\tstats.filteredByOperationIds +\n\t\tstats.filteredByDeprecated;\n\n\tif (filteredCount > 0) {\n\t\tlines.push(` Filtered operations: ${filteredCount}`);\n\t\tif (stats.filteredByTags > 0) lines.push(` - By tags: ${stats.filteredByTags}`);\n\t\tif (stats.filteredByPaths > 0) lines.push(` - By paths: ${stats.filteredByPaths}`);\n\t\tif (stats.filteredByMethods > 0) lines.push(` - By methods: ${stats.filteredByMethods}`);\n\t\tif (stats.filteredByOperationIds > 0) lines.push(` - By operationIds: ${stats.filteredByOperationIds}`);\n\t\tif (stats.filteredByDeprecated > 0) lines.push(` - By deprecated: ${stats.filteredByDeprecated}`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n","/**\n * OpenAPI $ref resolution utilities\n *\n * Provides functions to resolve $ref references to component definitions\n * Supports: parameters, requestBodies, responses, schemas\n *\n * @internal Used by core and playwright packages\n */\n\nimport type { OpenAPIParameter, OpenAPIRequestBody, OpenAPIResponse, OpenAPISchema, OpenAPISpec } from \"../types\";\n\n/**\n * Type for any resolvable component\n */\ntype ResolvableComponent = OpenAPIParameter | OpenAPIRequestBody | OpenAPIResponse | OpenAPISchema | any;\n\n/**\n * Resolve a $ref to a component definition\n * Handles nested $refs by recursively resolving until no more refs found\n *\n * @param obj - Object that may contain a $ref\n * @param spec - The OpenAPI specification\n * @param maxDepth - Maximum recursion depth to prevent infinite loops (default: 10)\n * @returns The resolved component, or the original object if not a reference\n */\nexport function resolveRef<T extends ResolvableComponent>(obj: T | any, spec: OpenAPISpec, maxDepth = 10): T {\n\tif (!obj || typeof obj !== \"object\" || maxDepth <= 0) return obj;\n\tif (!obj.$ref) return obj;\n\n\tconst ref = obj.$ref as string;\n\tlet resolved: any = null;\n\n\t// Match different component types\n\tconst paramMatch = ref.match(/^#\\/components\\/parameters\\/(.+)$/);\n\tconst requestBodyMatch = ref.match(/^#\\/components\\/requestBodies\\/(.+)$/);\n\tconst responseMatch = ref.match(/^#\\/components\\/responses\\/(.+)$/);\n\tconst schemaMatch = ref.match(/^#\\/components\\/schemas\\/(.+)$/);\n\n\tif (paramMatch && spec.components?.parameters) {\n\t\tconst name = paramMatch[1];\n\t\tresolved = spec.components.parameters[name];\n\t} else if (requestBodyMatch && spec.components?.requestBodies) {\n\t\tconst name = requestBodyMatch[1];\n\t\tresolved = spec.components.requestBodies[name];\n\t} else if (responseMatch && spec.components?.responses) {\n\t\tconst name = responseMatch[1];\n\t\tresolved = spec.components.responses[name];\n\t} else if (schemaMatch && spec.components?.schemas) {\n\t\tconst name = schemaMatch[1];\n\t\tresolved = spec.components.schemas[name];\n\t}\n\n\tif (resolved) {\n\t\t// Recursively resolve nested $refs\n\t\tif (resolved.$ref) {\n\t\t\treturn resolveRef(resolved, spec, maxDepth - 1);\n\t\t}\n\t\treturn resolved;\n\t}\n\n\t// Return original if can't resolve\n\treturn obj;\n}\n\n/**\n * Resolve a parameter reference\n * Convenience wrapper for resolveRef with parameter type\n */\nexport function resolveParameterRef(param: any, spec: OpenAPISpec): OpenAPIParameter | any {\n\treturn resolveRef<OpenAPIParameter>(param, spec);\n}\n\n/**\n * Resolve a request body reference\n * Convenience wrapper for resolveRef with request body type\n */\nexport function resolveRequestBodyRef(requestBody: any, spec: OpenAPISpec): OpenAPIRequestBody | any {\n\treturn resolveRef<OpenAPIRequestBody>(requestBody, spec);\n}\n\n/**\n * Resolve a response reference\n * Convenience wrapper for resolveRef with response type\n */\nexport function resolveResponseRef(response: any, spec: OpenAPISpec): OpenAPIResponse | any {\n\treturn resolveRef<OpenAPIResponse>(response, spec);\n}\n\n/**\n * Merge path-level parameters with operation-level parameters\n * Operation parameters override path-level parameters with the same name and location\n *\n * @param pathParams - Parameters defined at the path level\n * @param operationParams - Parameters defined at the operation level\n * @param spec - The OpenAPI specification for resolving $refs\n * @returns Merged array of resolved parameters\n */\nexport function mergeParameters(\n\tpathParams: any[] | undefined,\n\toperationParams: any[] | undefined,\n\tspec: OpenAPISpec\n): any[] {\n\tconst resolvedPathParams = (pathParams || []).map(p => resolveParameterRef(p, spec));\n\tconst resolvedOperationParams = (operationParams || []).map(p => resolveParameterRef(p, spec));\n\n\t// Start with path-level params\n\tconst merged = [...resolvedPathParams];\n\n\t// Operation params override path params by name + in\n\tfor (const opParam of resolvedOperationParams) {\n\t\tif (!opParam || typeof opParam !== \"object\") continue;\n\n\t\tconst existingIndex = merged.findIndex(\n\t\t\tp => p && typeof p === \"object\" && p.name === opParam.name && p.in === opParam.in\n\t\t);\n\n\t\tif (existingIndex >= 0) {\n\t\t\t// Override existing param\n\t\t\tmerged[existingIndex] = opParam;\n\t\t} else {\n\t\t\t// Add new param\n\t\t\tmerged.push(opParam);\n\t\t}\n\t}\n\n\treturn merged;\n}\n","import { cosmiconfig } from \"cosmiconfig\";\nimport { z } from \"zod\";\nimport type { ConfigFile, OpenApiGeneratorOptions } from \"../types\";\nimport { OperationFiltersSchema, RequestResponseOptionsSchema } from \"./config-schemas\";\nimport { formatConfigValidationError } from \"./config-validation\";\nimport { createTypeScriptLoader } from \"./typescript-loader\";\n\nconst OpenApiGeneratorOptionsSchema = z.strictObject({\n\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\tinput: z.string(),\n\toutput: z.string(),\n\tincludeDescriptions: z.boolean().optional(),\n\tuseDescribe: z.boolean().optional(),\n\tdefaultNullable: z.boolean().optional(),\n\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n\tschemaType: z.enum([\"all\", \"request\", \"response\"]).optional(),\n\tprefix: z.string().optional(),\n\tsuffix: z.string().optional(),\n\tstripSchemaPrefix: z.string().optional(),\n\tshowStats: z.boolean().optional(),\n\trequest: RequestResponseOptionsSchema.optional(),\n\tresponse: RequestResponseOptionsSchema.optional(),\n\tname: z.string().optional(),\n\toperationFilters: OperationFiltersSchema.optional(),\n\tcacheSize: z.number().positive().optional(),\n\tbatchSize: z.number().positive().optional(),\n\tcustomDateTimeFormatRegex: z\n\t\t.union([\n\t\t\tz.string().refine(\n\t\t\t\tpattern => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnew RegExp(pattern);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ message: \"Must be a valid regular expression pattern\" }\n\t\t\t),\n\t\t\tz.instanceof(RegExp),\n\t\t])\n\t\t.optional(),\n});\n\nconst ConfigFileSchema = z.strictObject({\n\tdefaults: z\n\t\t.strictObject({\n\t\t\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\t\t\tincludeDescriptions: z.boolean().optional(),\n\t\t\tuseDescribe: z.boolean().optional(),\n\t\t\tdefaultNullable: z.boolean().optional(),\n\t\t\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n\t\t\tschemaType: z.enum([\"all\", \"request\", \"response\"]).optional(),\n\t\t\tprefix: z.string().optional(),\n\t\t\tsuffix: z.string().optional(),\n\t\t\tstripSchemaPrefix: z.string().optional(),\n\t\t\tshowStats: z.boolean().optional(),\n\t\t\trequest: RequestResponseOptionsSchema.optional(),\n\t\t\tresponse: RequestResponseOptionsSchema.optional(),\n\t\t\toperationFilters: OperationFiltersSchema.optional(),\n\t\t\tcacheSize: z.number().positive().optional(),\n\t\t\tbatchSize: z.number().positive().optional(),\n\t\t\tcustomDateTimeFormatRegex: z\n\t\t\t\t.union([\n\t\t\t\t\tz.string().refine(\n\t\t\t\t\t\tpattern => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tnew RegExp(pattern);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ message: \"Must be a valid regular expression pattern\" }\n\t\t\t\t\t),\n\t\t\t\t\tz.instanceof(RegExp),\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t})\n\t\t.optional(),\n\tspecs: z\n\t\t.array(OpenApiGeneratorOptionsSchema)\n\t\t.min(1, {\n\t\t\tmessage:\n\t\t\t\t\"Configuration must include at least one specification. Each specification should have 'input' and 'output' paths.\",\n\t\t})\n\t\t.refine(specs => specs.every(spec => spec.input && spec.output), {\n\t\t\tmessage: \"Each specification must have both 'input' and 'output' paths defined\",\n\t\t}),\n\texecutionMode: z.enum([\"parallel\", \"sequential\"]).optional(),\n});\n\n/**\n * Load and validate configuration file\n * Supports: openapi-to-zod.config.{ts,json}, package.json under \"openapi-to-zod\" key\n *\n * @param configPath - Optional explicit path to config file. If not provided, searches automatically\n * @returns Validated ConfigFile object\n * @throws Error if config file not found, invalid, or contains unknown properties\n */\nexport async function loadConfig(configPath?: string): Promise<ConfigFile> {\n\tconst explorer = cosmiconfig(\"openapi-to-zod\", {\n\t\tsearchPlaces: [\"openapi-to-zod.config.ts\", \"openapi-to-zod.config.json\", \"package.json\"],\n\t\tloaders: {\n\t\t\t\".ts\": createTypeScriptLoader(),\n\t\t},\n\t});\n\n\tlet result: Awaited<ReturnType<typeof explorer.load>> | Awaited<ReturnType<typeof explorer.search>>;\n\n\tif (configPath) {\n\t\t// Load from explicit path (overrides auto-discovery)\n\t\tresult = await explorer.load(configPath);\n\t} else {\n\t\t// Auto-discover config file starting from cwd\n\t\tresult = await explorer.search();\n\t}\n\n\tif (!result || !result.config) {\n\t\tthrow new Error(\n\t\t\tconfigPath\n\t\t\t\t? `Config file not found at: ${configPath}`\n\t\t\t\t: \"No config file found. Searched for: openapi-to-zod.config.ts, openapi-to-zod.config.json, package.json (openapi-to-zod key)\\nRun 'openapi-to-zod init' to create a new config file.\"\n\t\t);\n\t}\n\n\t// Strict validation using Zod schema\n\ttry {\n\t\tconst validatedConfig = ConfigFileSchema.parse(result.config);\n\t\treturn validatedConfig;\n\t} catch (error) {\n\t\tif (error instanceof z.ZodError) {\n\t\t\tconst errorMessage = formatConfigValidationError(error, result.filepath, configPath);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n/**\n * Merge global defaults with per-spec configuration\n * CLI arguments have highest precedence and are merged separately in CLI layer\n *\n * @param config - Validated configuration file\n * @returns Array of fully resolved OpenApiGeneratorOptions objects\n */\nexport function mergeConfigWithDefaults(config: ConfigFile): OpenApiGeneratorOptions[] {\n\tif (!config?.specs || !Array.isArray(config.specs)) {\n\t\tthrow new Error(\"Invalid config: specs array is required\");\n\t}\n\n\tconst defaults = config.defaults || {};\n\n\treturn config.specs.map(spec => {\n\t\t// Deep merge: spec options override defaults\n\t\tconst merged: OpenApiGeneratorOptions = {\n\t\t\t// Apply defaults first\n\t\t\tmode: defaults.mode,\n\t\t\tincludeDescriptions: defaults.includeDescriptions,\n\t\t\tuseDescribe: defaults.useDescribe,\n\t\t\tdefaultNullable: defaults.defaultNullable,\n\t\t\temptyObjectBehavior: defaults.emptyObjectBehavior,\n\t\t\tschemaType: defaults.schemaType,\n\t\t\tprefix: defaults.prefix,\n\t\t\tsuffix: defaults.suffix,\n\t\t\tshowStats: defaults.showStats,\n\t\t\tcustomDateTimeFormatRegex: defaults.customDateTimeFormatRegex,\n\n\t\t\t// Override with spec-specific values (including required input/output)\n\t\t\t...spec,\n\t\t};\n\t\treturn merged;\n\t});\n}\n\n/**\n * Merge CLI options with config options\n * CLI options have highest precedence and override both spec and default config\n *\n * @param specConfig - Configuration from config file (with defaults already applied)\n * @param cliOptions - Options provided via CLI arguments\n * @returns Merged OpenApiGeneratorOptions with CLI taking precedence\n */\nexport function mergeCliWithConfig(\n\tspecConfig: OpenApiGeneratorOptions,\n\tcliOptions: Partial<OpenApiGeneratorOptions>\n): OpenApiGeneratorOptions {\n\t// CLI options override everything\n\treturn {\n\t\t...specConfig,\n\t\t...Object.fromEntries(Object.entries(cliOptions).filter(([_, v]) => v !== undefined)),\n\t} as OpenApiGeneratorOptions;\n}\n","import { z } from \"zod\";\n\n/**\n * @shared Zod schema for request/response options validation\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport const RequestResponseOptionsSchema = z.strictObject({\n\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\tuseDescribe: z.boolean().optional(),\n\tincludeDescriptions: z.boolean().optional(),\n\tdefaultNullable: z.boolean().optional(),\n\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n});\n\n/**\n * @shared Base Zod schema for operation filters (without status codes)\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport const OperationFiltersSchema = z.strictObject({\n\tincludeTags: z.array(z.string()).optional(),\n\texcludeTags: z.array(z.string()).optional(),\n\tincludePaths: z.array(z.string()).optional(),\n\texcludePaths: z.array(z.string()).optional(),\n\tincludeMethods: z.array(z.string()).optional(),\n\texcludeMethods: z.array(z.string()).optional(),\n\tincludeOperationIds: z.array(z.string()).optional(),\n\texcludeOperationIds: z.array(z.string()).optional(),\n\texcludeDeprecated: z.boolean().optional(),\n});\n\n/**\n * Inferred TypeScript type for request/response options\n */\nexport type RequestResponseOptions = z.infer<typeof RequestResponseOptionsSchema>;\n\n/**\n * Inferred TypeScript type for base operation filters\n */\nexport type BaseOperationFilters = z.infer<typeof OperationFiltersSchema>;\n","import { z } from \"zod\";\n\n/**\n * @shared Format Zod validation errors into user-friendly error messages\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * @param error - The Zod validation error\n * @param filepath - Path to the config file that was being validated\n * @param configPath - Optional explicit config path provided by user\n * @param additionalNotes - Optional array of additional notes to append to the error message\n * @returns Formatted error message string\n */\nexport function formatConfigValidationError(\n\terror: z.ZodError,\n\tfilepath: string | undefined,\n\tconfigPath: string | undefined,\n\tadditionalNotes?: string[]\n): string {\n\tconst formattedErrors =\n\t\terror.issues\n\t\t\t?.map(err => {\n\t\t\t\tconst path = err.path.length > 0 ? err.path.join(\".\") : \"root\";\n\t\t\t\treturn ` - ${path}: ${err.message}`;\n\t\t\t})\n\t\t\t.join(\"\\n\") || \"Unknown validation error\";\n\n\tconst configSource = filepath || configPath || \"config file\";\n\tconst lines = [\n\t\t`Invalid configuration file at: ${configSource}`,\n\t\t\"\",\n\t\t\"Validation errors:\",\n\t\tformattedErrors,\n\t\t\"\",\n\t\t\"Please check your configuration file and ensure:\",\n\t\t\" - All required fields are present (specs array with input/output)\",\n\t\t\" - Field names are spelled correctly (no typos)\",\n\t\t\" - Values match the expected types (e.g., mode: 'strict' | 'normal' | 'loose')\",\n\t\t\" - No unknown/extra properties are included\",\n\t];\n\n\tif (additionalNotes && additionalNotes.length > 0) {\n\t\tlines.push(...additionalNotes.map(note => ` - ${note}`));\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n","import type { Loader } from \"cosmiconfig\";\n\n/**\n * @shared Create a TypeScript loader for cosmiconfig using esbuild\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * Creates a loader that transpiles TypeScript config files to JavaScript\n * using esbuild, then executes them to load the configuration.\n *\n * @returns A cosmiconfig Loader function\n */\nexport function createTypeScriptLoader(): Loader {\n\treturn async (filepath: string) => {\n\t\ttry {\n\t\t\t// Use esbuild to transpile TypeScript to JavaScript\n\t\t\tconst esbuild = await import(\"esbuild\");\n\t\t\tconst fs = await import(\"node:fs\");\n\t\t\tconst path = await import(\"node:path\");\n\n\t\t\tconst tsCode = fs.readFileSync(filepath, \"utf-8\");\n\t\t\tconst result = await esbuild.build({\n\t\t\t\tstdin: {\n\t\t\t\t\tcontents: tsCode,\n\t\t\t\t\tloader: \"ts\",\n\t\t\t\t\tresolveDir: path.dirname(filepath),\n\t\t\t\t\tsourcefile: filepath,\n\t\t\t\t},\n\t\t\t\tformat: \"cjs\",\n\t\t\t\tplatform: \"node\",\n\t\t\t\ttarget: \"node18\",\n\t\t\t\tbundle: false,\n\t\t\t\twrite: false,\n\t\t\t});\n\n\t\t\tconst jsCode = result.outputFiles[0].text;\n\n\t\t\t// Create a module and execute it\n\t\t\tconst module = { exports: {} } as any;\n\t\t\tconst func = new Function(\"exports\", \"module\", \"require\", \"__filename\", \"__dirname\", jsCode);\n\t\t\tfunc(module.exports, module, require, filepath, path.dirname(filepath));\n\n\t\t\treturn module.exports.default || module.exports;\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load TypeScript config from ${filepath}: ${error instanceof Error ? error.message : String(error)}`\n\t\t\t);\n\t\t}\n\t};\n}\n"],"mappings":"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","names":["exports","module","exports","module","exports","module","exports","module","exports","module","F","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","cursor","exports","module","exports","module","cursor","exports","module","exports","module","exports","exports","module","F","prompts","override","question","answer","getFormattedAnswer","require_action","exports","module","require_strip","exports","module","require_clear","exports","module","require_figures","exports","module","require_style","exports","module","require_lines","exports","module","require_wrap","exports","module","require_entriesToDisplay","exports","module","require_util","exports","module","require_prompt","exports","module","require_text","exports","module","require_select","exports","module","require_toggle","exports","module","require_datepart","exports","module","require_meridiem","exports","module","require_day","exports","module","require_hours","exports","module","require_milliseconds","exports","module","require_minutes","exports","module","require_month","exports","module","require_seconds","exports","module","require_year","exports","module","require_dateparts","exports","module","require_date","exports","module","require_number","exports","module","require_multiselect","exports","module","cursor","require_autocomplete","exports","module","require_autocompleteMultiselect","exports","module","cursor","require_confirm","exports","module","require_elements","exports","module","require_prompts","exports","exports","module","prompts","override","question","answer","require_prompts","exports","module","import_node_fs","import_node_path","import_minimatch","schemaCode","typeCode","isNullable","isNullable","schemaStrings","union","elseValidation","elseRequiredProps","generatePropertyAccess","definedProps","import_minimatch","resolveRef","_a","jsdoc","strippedName","zodType","import_zod","module","prompts"]}
1
+ {"version":3,"sources":["../../../node_modules/tsup/assets/cjs_shims.js","../../../node_modules/kleur/index.js","../../../node_modules/prompts/dist/util/action.js","../../../node_modules/prompts/dist/util/strip.js","../../../node_modules/sisteransi/src/index.js","../../../node_modules/prompts/dist/util/clear.js","../../../node_modules/prompts/dist/util/figures.js","../../../node_modules/prompts/dist/util/style.js","../../../node_modules/prompts/dist/util/lines.js","../../../node_modules/prompts/dist/util/wrap.js","../../../node_modules/prompts/dist/util/entriesToDisplay.js","../../../node_modules/prompts/dist/util/index.js","../../../node_modules/prompts/dist/elements/prompt.js","../../../node_modules/prompts/dist/elements/text.js","../../../node_modules/prompts/dist/elements/select.js","../../../node_modules/prompts/dist/elements/toggle.js","../../../node_modules/prompts/dist/dateparts/datepart.js","../../../node_modules/prompts/dist/dateparts/meridiem.js","../../../node_modules/prompts/dist/dateparts/day.js","../../../node_modules/prompts/dist/dateparts/hours.js","../../../node_modules/prompts/dist/dateparts/milliseconds.js","../../../node_modules/prompts/dist/dateparts/minutes.js","../../../node_modules/prompts/dist/dateparts/month.js","../../../node_modules/prompts/dist/dateparts/seconds.js","../../../node_modules/prompts/dist/dateparts/year.js","../../../node_modules/prompts/dist/dateparts/index.js","../../../node_modules/prompts/dist/elements/date.js","../../../node_modules/prompts/dist/elements/number.js","../../../node_modules/prompts/dist/elements/multiselect.js","../../../node_modules/prompts/dist/elements/autocomplete.js","../../../node_modules/prompts/dist/elements/autocompleteMultiselect.js","../../../node_modules/prompts/dist/elements/confirm.js","../../../node_modules/prompts/dist/elements/index.js","../../../node_modules/prompts/dist/prompts.js","../../../node_modules/prompts/dist/index.js","../../../node_modules/prompts/lib/util/action.js","../../../node_modules/prompts/lib/util/strip.js","../../../node_modules/prompts/lib/util/clear.js","../../../node_modules/prompts/lib/util/figures.js","../../../node_modules/prompts/lib/util/style.js","../../../node_modules/prompts/lib/util/lines.js","../../../node_modules/prompts/lib/util/wrap.js","../../../node_modules/prompts/lib/util/entriesToDisplay.js","../../../node_modules/prompts/lib/util/index.js","../../../node_modules/prompts/lib/elements/prompt.js","../../../node_modules/prompts/lib/elements/text.js","../../../node_modules/prompts/lib/elements/select.js","../../../node_modules/prompts/lib/elements/toggle.js","../../../node_modules/prompts/lib/dateparts/datepart.js","../../../node_modules/prompts/lib/dateparts/meridiem.js","../../../node_modules/prompts/lib/dateparts/day.js","../../../node_modules/prompts/lib/dateparts/hours.js","../../../node_modules/prompts/lib/dateparts/milliseconds.js","../../../node_modules/prompts/lib/dateparts/minutes.js","../../../node_modules/prompts/lib/dateparts/month.js","../../../node_modules/prompts/lib/dateparts/seconds.js","../../../node_modules/prompts/lib/dateparts/year.js","../../../node_modules/prompts/lib/dateparts/index.js","../../../node_modules/prompts/lib/elements/date.js","../../../node_modules/prompts/lib/elements/number.js","../../../node_modules/prompts/lib/elements/multiselect.js","../../../node_modules/prompts/lib/elements/autocomplete.js","../../../node_modules/prompts/lib/elements/autocompleteMultiselect.js","../../../node_modules/prompts/lib/elements/confirm.js","../../../node_modules/prompts/lib/elements/index.js","../../../node_modules/prompts/lib/prompts.js","../../../node_modules/prompts/lib/index.js","../../../node_modules/prompts/index.js","../src/cli.ts","../src/batch-executor.ts","../src/errors.ts","../src/openapi-generator.ts","../src/generators/enum-generator.ts","../src/utils/name-utils.ts","../src/generators/jsdoc-generator.ts","../src/utils/string-utils.ts","../src/generators/property-generator.ts","../src/utils/lru-cache.ts","../src/utils/pattern-utils.ts","../src/validators/array-validator.ts","../src/validators/composition-validator.ts","../src/validators/number-validator.ts","../src/validators/object-validator.ts","../src/validators/conditional-validator.ts","../src/validators/string-validator.ts","../src/utils/operation-filters.ts","../src/utils/ref-resolver.ts","../src/utils/config-loader.ts","../src/utils/config-schemas.ts","../src/utils/config-validation.ts","../src/utils/typescript-loader.ts"],"sourcesContent":["// Shim globals in cjs bundle\n// There's a weird bug that esbuild will always inject importMetaUrl\n// if we export it as `const importMetaUrl = ... __filename ...`\n// But using a function will not cause this issue\n\nconst getImportMetaUrl = () => \n typeof document === \"undefined\" \n ? new URL(`file:${__filename}`).href \n : (document.currentScript && document.currentScript.tagName.toUpperCase() === 'SCRIPT') \n ? document.currentScript.src \n : new URL(\"main.js\", document.baseURI).href;\n\nexport const importMetaUrl = /* @__PURE__ */ getImportMetaUrl()\n","'use strict';\n\nconst { FORCE_COLOR, NODE_DISABLE_COLORS, TERM } = process.env;\n\nconst $ = {\n\tenabled: !NODE_DISABLE_COLORS && TERM !== 'dumb' && FORCE_COLOR !== '0',\n\n\t// modifiers\n\treset: init(0, 0),\n\tbold: init(1, 22),\n\tdim: init(2, 22),\n\titalic: init(3, 23),\n\tunderline: init(4, 24),\n\tinverse: init(7, 27),\n\thidden: init(8, 28),\n\tstrikethrough: init(9, 29),\n\n\t// colors\n\tblack: init(30, 39),\n\tred: init(31, 39),\n\tgreen: init(32, 39),\n\tyellow: init(33, 39),\n\tblue: init(34, 39),\n\tmagenta: init(35, 39),\n\tcyan: init(36, 39),\n\twhite: init(37, 39),\n\tgray: init(90, 39),\n\tgrey: init(90, 39),\n\n\t// background colors\n\tbgBlack: init(40, 49),\n\tbgRed: init(41, 49),\n\tbgGreen: init(42, 49),\n\tbgYellow: init(43, 49),\n\tbgBlue: init(44, 49),\n\tbgMagenta: init(45, 49),\n\tbgCyan: init(46, 49),\n\tbgWhite: init(47, 49)\n};\n\nfunction run(arr, str) {\n\tlet i=0, tmp, beg='', end='';\n\tfor (; i < arr.length; i++) {\n\t\ttmp = arr[i];\n\t\tbeg += tmp.open;\n\t\tend += tmp.close;\n\t\tif (str.includes(tmp.close)) {\n\t\t\tstr = str.replace(tmp.rgx, tmp.close + tmp.open);\n\t\t}\n\t}\n\treturn beg + str + end;\n}\n\nfunction chain(has, keys) {\n\tlet ctx = { has, keys };\n\n\tctx.reset = $.reset.bind(ctx);\n\tctx.bold = $.bold.bind(ctx);\n\tctx.dim = $.dim.bind(ctx);\n\tctx.italic = $.italic.bind(ctx);\n\tctx.underline = $.underline.bind(ctx);\n\tctx.inverse = $.inverse.bind(ctx);\n\tctx.hidden = $.hidden.bind(ctx);\n\tctx.strikethrough = $.strikethrough.bind(ctx);\n\n\tctx.black = $.black.bind(ctx);\n\tctx.red = $.red.bind(ctx);\n\tctx.green = $.green.bind(ctx);\n\tctx.yellow = $.yellow.bind(ctx);\n\tctx.blue = $.blue.bind(ctx);\n\tctx.magenta = $.magenta.bind(ctx);\n\tctx.cyan = $.cyan.bind(ctx);\n\tctx.white = $.white.bind(ctx);\n\tctx.gray = $.gray.bind(ctx);\n\tctx.grey = $.grey.bind(ctx);\n\n\tctx.bgBlack = $.bgBlack.bind(ctx);\n\tctx.bgRed = $.bgRed.bind(ctx);\n\tctx.bgGreen = $.bgGreen.bind(ctx);\n\tctx.bgYellow = $.bgYellow.bind(ctx);\n\tctx.bgBlue = $.bgBlue.bind(ctx);\n\tctx.bgMagenta = $.bgMagenta.bind(ctx);\n\tctx.bgCyan = $.bgCyan.bind(ctx);\n\tctx.bgWhite = $.bgWhite.bind(ctx);\n\n\treturn ctx;\n}\n\nfunction init(open, close) {\n\tlet blk = {\n\t\topen: `\\x1b[${open}m`,\n\t\tclose: `\\x1b[${close}m`,\n\t\trgx: new RegExp(`\\\\x1b\\\\[${close}m`, 'g')\n\t};\n\treturn function (txt) {\n\t\tif (this !== void 0 && this.has !== void 0) {\n\t\t\tthis.has.includes(open) || (this.has.push(open),this.keys.push(blk));\n\t\t\treturn txt === void 0 ? this : $.enabled ? run(this.keys, txt+'') : txt+'';\n\t\t}\n\t\treturn txt === void 0 ? chain([open], [blk]) : $.enabled ? run([blk], txt+'') : txt+'';\n\t};\n}\n\nmodule.exports = $;\n","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n\n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n\n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage'; // TODO create home() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'home') return 'home'; // TODO create end() in prompt types (e.g. TextPrompt)\n\n if (key.name === 'end') return 'end';\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n return false;\n};","'use strict';\n\nmodule.exports = str => {\n const pattern = ['[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)', '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'].join('|');\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};","'use strict';\n\nconst ESC = '\\x1B';\nconst CSI = `${ESC}[`;\nconst beep = '\\u0007';\n\nconst cursor = {\n to(x, y) {\n if (!y) return `${CSI}${x + 1}G`;\n return `${CSI}${y + 1};${x + 1}H`;\n },\n move(x, y) {\n let ret = '';\n\n if (x < 0) ret += `${CSI}${-x}D`;\n else if (x > 0) ret += `${CSI}${x}C`;\n\n if (y < 0) ret += `${CSI}${-y}A`;\n else if (y > 0) ret += `${CSI}${y}B`;\n\n return ret;\n },\n up: (count = 1) => `${CSI}${count}A`,\n down: (count = 1) => `${CSI}${count}B`,\n forward: (count = 1) => `${CSI}${count}C`,\n backward: (count = 1) => `${CSI}${count}D`,\n nextLine: (count = 1) => `${CSI}E`.repeat(count),\n prevLine: (count = 1) => `${CSI}F`.repeat(count),\n left: `${CSI}G`,\n hide: `${CSI}?25l`,\n show: `${CSI}?25h`,\n save: `${ESC}7`,\n restore: `${ESC}8`\n}\n\nconst scroll = {\n up: (count = 1) => `${CSI}S`.repeat(count),\n down: (count = 1) => `${CSI}T`.repeat(count)\n}\n\nconst erase = {\n screen: `${CSI}2J`,\n up: (count = 1) => `${CSI}1J`.repeat(count),\n down: (count = 1) => `${CSI}J`.repeat(count),\n line: `${CSI}2K`,\n lineEnd: `${CSI}K`,\n lineStart: `${CSI}1K`,\n lines(count) {\n let clear = '';\n for (let i = 0; i < count; i++)\n clear += this.line + (i < count - 1 ? cursor.up() : '');\n if (count)\n clear += cursor.left;\n return clear;\n }\n}\n\nmodule.exports = { cursor, scroll, erase, beep };\n","'use strict';\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nconst strip = require('./strip');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst width = str => [...strip(str)].length;\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\n\n\nmodule.exports = function (prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n\n var _iterator = _createForOfIteratorHelper(lines),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n let line = _step.value;\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return erase.lines(rows);\n};","'use strict';\n\nconst main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\n cross: '✖',\n ellipsis: '…',\n pointerSmall: '›',\n line: '─',\n pointer: '❯'\n};\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\n tick: '√',\n cross: '×',\n ellipsis: '...',\n pointerSmall: '»',\n line: '─',\n pointer: '>'\n};\nconst figures = process.platform === 'win32' ? win : main;\nmodule.exports = figures;","'use strict';\n\nconst c = require('kleur');\n\nconst figures = require('./figures'); // rendering user input.\n\n\nconst styles = Object.freeze({\n password: {\n scale: 1,\n render: input => '*'.repeat(input.length)\n },\n emoji: {\n scale: 2,\n render: input => '😃'.repeat(input.length)\n },\n invisible: {\n scale: 0,\n render: input => ''\n },\n default: {\n scale: 1,\n render: input => `${input}`\n }\n});\n\nconst render = type => styles[type] || styles.default; // icon to signalize a prompt.\n\n\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) => aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default; // between the question and the user's input.\n\n\nconst delimiter = completing => c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) => c.gray(expandable ? expanded ? figures.pointerSmall : '+' : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};","'use strict';\n\nconst strip = require('./strip');\n/**\n * @param {string} msg\n * @param {number} perLine\n */\n\n\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine)).reduce((a, b) => a + b);\n};","'use strict';\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\n\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin)) ? new Array(parseInt(opts.margin)).fill(' ').join('') : opts.margin || '';\n const width = opts.width;\n return (msg || '').split(/\\r?\\n/g).map(line => line.split(/\\s+/g).reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width) arr[arr.length - 1] += ` ${w}`;else arr.push(`${tab}${w}`);\n return arr;\n }, [tab]).join('\\n')).join('\\n');\n};","'use strict';\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\n\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n let startIndex = Math.min(total - maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n let endIndex = Math.min(startIndex + maxVisible, total);\n return {\n startIndex,\n endIndex\n };\n};","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};","'use strict';\n\nconst readline = require('readline');\n\nconst _require = require('../util'),\n action = _require.action;\n\nconst EventEmitter = require('events');\n\nconst _require2 = require('sisteransi'),\n beep = _require2.beep,\n cursor = _require2.cursor;\n\nconst color = require('kleur');\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass Prompt extends EventEmitter {\n constructor(opts = {}) {\n super();\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n\n const rl = readline.createInterface({\n input: this.in,\n escapeCodeTimeout: 50\n });\n readline.emitKeypressEvents(this.in, rl);\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = ['SelectPrompt', 'MultiselectPrompt'].indexOf(this.constructor.name) > -1;\n\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n\n}\n\nmodule.exports = Prompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n lines = _require2.lines,\n figures = _require2.figures;\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass TextPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n\n this.validator = opts.validate || (() => true);\n\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n _this2.value = _this2.value || _this2.initial;\n _this2.cursorOffset = 0;\n _this2.cursor = _this2.rendered.length;\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.red = true;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor + n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length + 1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor - 1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor + 1);\n this.value = `${s1}${s2}`;\n this.red = false;\n\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || this.placeholder && this.cursor === 1;\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || this.placeholder && this.cursor === this.rendered.length + 1;\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = '';\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.red ? color.red(this.rendered) : this.rendered].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures,\n wrap = _require.wrap,\n entriesToDisplay = _require.entriesToDisplay;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor;\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\n\n\nclass SelectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex; // Print prompt\n\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.done ? this.selection.title : this.selection.disabled ? color.yellow(this.warn) : color.gray(this.hint)].join(' '); // Print choices\n\n if (!this.done) {\n this.outputText += '\\n';\n\n for (let i = startIndex; i < endIndex; i++) {\n let title,\n prefix,\n desc = '',\n v = this.choices[i]; // Determine whether to display \"more choices\" indicators\n\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n\n}\n\nmodule.exports = SelectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n cursor = _require2.cursor,\n erase = _require2.erase;\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass TogglePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n\n left() {\n this.deactivate();\n }\n\n right() {\n this.activate();\n }\n\n down() {\n this.deactivate();\n }\n\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.value ? this.inactive : color.cyan().underline(this.inactive), color.gray('/'), this.value ? color.cyan().underline(this.active) : this.active].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = TogglePrompt;","'use strict';\n\nclass DatePart {\n constructor({\n token,\n date,\n parts,\n locales\n }) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n\n}\n\nmodule.exports = DatePart;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n\n}\n\nmodule.exports = Meridiem;","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st' : n === 2 ? 'nd' : n === 3 ? 'rd' : 'th';\n};\n\nclass Day extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0') : this.token === 'Do' ? date + pos(date) : this.token === 'd' ? day + 1 : this.token === 'ddd' ? this.locales.weekdaysShort[day] : this.token === 'dddd' ? this.locales.weekdays[day] : date;\n }\n\n}\n\nmodule.exports = Day;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token)) hours = hours % 12 || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n\n}\n\nmodule.exports = Hours;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-this.token.length)));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0').substr(0, this.token.length);\n }\n\n}\n\nmodule.exports = Milliseconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n\n}\n\nmodule.exports = Minutes;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0') : tl === 3 ? this.locales.monthsShort[month] : tl === 4 ? this.locales.months[month] : String(month + 1);\n }\n\n}\n\nmodule.exports = Month;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n\n}\n\nmodule.exports = Seconds;","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts = {}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n\n}\n\nmodule.exports = Year;","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year')\n};","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear,\n figures = _require.figures;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n\nconst _require3 = require('../dateparts'),\n DatePart = _require3.DatePart,\n Meridiem = _require3.Meridiem,\n Day = _require3.Day,\n Hours = _require3.Hours,\n Milliseconds = _require3.Milliseconds,\n Minutes = _require3.Minutes,\n Month = _require3.Month,\n Seconds = _require3.Seconds,\n Year = _require3.Year;\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({\n token\n }) => token.replace(/\\\\(.)/g, '$1'),\n 2: opts => new Day(opts),\n // Day // TODO\n 3: opts => new Month(opts),\n // Month\n 4: opts => new Year(opts),\n // Year\n 5: opts => new Meridiem(opts),\n // AM/PM // TODO (special)\n 6: opts => new Hours(opts),\n // Hours\n 7: opts => new Minutes(opts),\n // Minutes\n 8: opts => new Seconds(opts),\n // Seconds\n 9: opts => new Milliseconds(opts) // Fractional seconds\n\n};\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n};\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\nclass DatePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n\n this.validator = opts.validate || (() => true);\n\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date;\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n\n while (result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups ? regexGroups[idx]({\n token: result[idx] || match,\n date: this.date,\n parts: this.parts,\n locales: this.locales\n }) : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string') arr[arr.length - 1] += i;else arr.push(i);\n return arr;\n }, []);\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === 'string') {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = 'red';\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n _this2.done = true;\n _this2.aborted = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write('\\n');\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next ? this.parts.indexOf(next) : this.parts.findIndex(part => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render(); // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), []).join('')].join(' '); // Print error\n\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = DatePrompt;","\"use strict\";\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor,\n erase = _require.erase;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n figures = _require2.figures,\n clear = _require2.clear,\n lines = _require2.lines;\n\nconst isNumber = /[0-9]/;\n\nconst isDef = any => any !== undefined;\n\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n};\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\n\n\nclass NumberPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n\n this.validator = opts.validate || (() => true);\n\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c);\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n validate() {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n let valid = yield _this.validator(_this.value);\n\n if (typeof valid === `string`) {\n _this.errorMsg = valid;\n valid = false;\n }\n\n _this.error = !valid;\n })();\n }\n\n submit() {\n var _this2 = this;\n\n return _asyncToGenerator(function* () {\n yield _this2.validate();\n\n if (_this2.error) {\n _this2.color = `red`;\n\n _this2.fire();\n\n _this2.render();\n\n return;\n }\n\n let x = _this2.value;\n _this2.value = x !== `` ? x : _this2.initial;\n _this2.done = true;\n _this2.aborted = false;\n _this2.error = false;\n\n _this2.fire();\n\n _this2.render();\n\n _this2.out.write(`\\n`);\n\n _this2.close();\n })();\n }\n\n up() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min - this.inc;\n }\n\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n\n if (this.value === '') {\n this.value = this.min + this.inc;\n }\n\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse(val = val.slice(0, -1)) || ``;\n\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n if (c === `.`) return this.fire();\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n\n if (!this.firstRender) {\n if (this.outputError) this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n\n super.render();\n this.outputError = ''; // Print prompt\n\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), !this.done || !this.done && !this.placeholder ? color[this.color]().underline(this.rendered) : this.rendered].join(` `); // Print error\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`).reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n\n}\n\nmodule.exports = NumberPrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst Prompt = require('./prompt');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n figures = _require2.figures,\n style = _require2.style,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass MultiselectPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string') ch = {\n title: ch,\n value: idx\n };\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value.filter(e => e.selected);\n\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return '\\nInstructions:\\n' + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n` + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n` + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '') + ` enter/return: Complete answer`;\n }\n\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: prefix.length,\n width: this.out.columns\n });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n } // shared with autocompleteMultiselect\n\n\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let _entriesToDisplay = entriesToDisplay(this.cursor, options.length, this.optionsPerPage),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n let prefix,\n styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n } // shared with autocomleteMultiselect\n\n\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.value);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = MultiselectPrompt;","'use strict';\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('sisteransi'),\n erase = _require.erase,\n cursor = _require.cursor;\n\nconst _require2 = require('../util'),\n style = _require2.style,\n clear = _require2.clear,\n figures = _require2.figures,\n wrap = _require2.wrap,\n entriesToDisplay = _require2.entriesToDisplay;\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\n\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\n\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\n\n\nclass AutocompletePrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number' ? opts.initial : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = {\n noMatches: opts.noMatches || 'no matches found'\n };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number') choice = this.choices[this._fb];else if (typeof this._fb === 'string') choice = {\n title: this._fb\n };\n return choice || this._fb || {\n title: this.i18n.noMatches\n };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0) this.value = getVal(this.suggestions, i);else this.value = this.fallback.value;\n this.fire();\n }\n\n complete(cb) {\n var _this = this;\n\n return _asyncToGenerator(function* () {\n const p = _this.completing = _this.suggest(_this.input, _this.choices);\n\n const suggestions = yield p;\n if (_this.completing !== p) return;\n _this.suggestions = suggestions.map((s, i, arr) => ({\n title: getTitle(arr, i),\n value: getVal(arr, i),\n description: s.description\n }));\n _this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n\n _this.moveSelect(Math.min(l, _this.select));\n\n cb && cb();\n })();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length + 1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor - 1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n deleteForward() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor + 1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor - 1;\n this.render();\n }\n\n right() {\n if (this.cursor * this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor + 1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n\n if (v.description) {\n desc = ` - ${v.description}`;\n\n if (prefix.length + title.length + desc.length >= this.out.columns || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, {\n margin: 3,\n width: this.out.columns\n });\n }\n }\n\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let _entriesToDisplay = entriesToDisplay(this.select, this.choices.length, this.limit),\n startIndex = _entriesToDisplay.startIndex,\n endIndex = _entriesToDisplay.endIndex;\n\n this.outputText = [style.symbol(this.done, this.aborted, this.exited), color.bold(this.msg), style.delimiter(this.completing), this.done && this.suggestions[this.select] ? this.suggestions[this.select].title : this.rendered = this.transform.render(this.input)].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions.slice(startIndex, endIndex).map((item, i) => this.renderOption(item, this.select === i + startIndex, i === 0 && startIndex > 0, i + startIndex === endIndex - 1 && endIndex < this.choices.length)).join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = AutocompletePrompt;","'use strict';\n\nconst color = require('kleur');\n\nconst _require = require('sisteransi'),\n cursor = _require.cursor;\n\nconst MultiselectPrompt = require('./multiselect');\n\nconst _require2 = require('../util'),\n clear = _require2.clear,\n style = _require2.style,\n figures = _require2.figures;\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\n\n\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts = {}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value.filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n\n return false;\n }\n\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight);\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title;\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value.filter(e => e.selected).map(v => v.title).join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render(); // print prompt\n\n let prompt = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(false), this.renderDoneOrInstructions()].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n\n prompt += this.renderOptions(this.filteredOptions);\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;","\"use strict\";\n\nconst color = require('kleur');\n\nconst Prompt = require('./prompt');\n\nconst _require = require('../util'),\n style = _require.style,\n clear = _require.clear;\n\nconst _require2 = require('sisteransi'),\n erase = _require2.erase,\n cursor = _require2.cursor;\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\n\n\nclass ConfirmPrompt extends Prompt {\n constructor(opts = {}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n this.outputText = [style.symbol(this.done, this.aborted), color.bold(this.msg), style.delimiter(this.done), this.done ? this.value ? this.yesMsg : this.noMsg : color.gray(this.initialValue ? this.yesOption : this.noOption)].join(' ');\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n\n}\n\nmodule.exports = ConfirmPrompt;","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};","'use strict';\n\nconst $ = exports;\n\nconst el = require('./elements');\n\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts = {}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.text = args => toPrompt('TextPrompt', args);\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.number = args => toPrompt('NumberPrompt', args);\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.date = args => toPrompt('DatePrompt', args);\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n\n\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.toggle = args => toPrompt('TogglePrompt', args);\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.select = args => toPrompt('SelectPrompt', args);\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase()));\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n\n\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};","'use strict';\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) { symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); } keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(Object(source), true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _createForOfIteratorHelper(o, allowArrayLike) { var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"]; if (!it) { if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") { if (it) o = it; var i = 0; var F = function F() {}; return { s: F, n: function n() { if (i >= o.length) return { done: true }; return { done: false, value: o[i++] }; }, e: function e(_e) { throw _e; }, f: F }; } throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\"); } var normalCompletion = true, didErr = false, err; return { s: function s() { it = it.call(o); }, n: function n() { var step = it.next(); normalCompletion = step.done; return step; }, e: function e(_e2) { didErr = true; err = _e2; }, f: function f() { try { if (!normalCompletion && it.return != null) it.return(); } finally { if (didErr) throw err; } } }; }\n\nfunction _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === \"string\") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === \"Object\" && o.constructor) n = o.constructor.name; if (n === \"Map\" || n === \"Set\") return Array.from(o); if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); }\n\nfunction _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; }\n\nfunction asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) { try { var info = gen[key](arg); var value = info.value; } catch (error) { reject(error); return; } if (info.done) { resolve(value); } else { Promise.resolve(value).then(_next, _throw); } }\n\nfunction _asyncToGenerator(fn) { return function () { var self = this, args = arguments; return new Promise(function (resolve, reject) { var gen = fn.apply(self, args); function _next(value) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value); } function _throw(err) { asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err); } _next(undefined); }); }; }\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\n\nconst noop = () => {};\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\n\n\nfunction prompt() {\n return _prompt.apply(this, arguments);\n}\n\nfunction _prompt() {\n _prompt = _asyncToGenerator(function* (questions = [], {\n onSubmit = noop,\n onCancel = noop\n } = {}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = /*#__PURE__*/function () {\n var _ref = _asyncToGenerator(function* (question, answer, skipValidation = false) {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n\n return question.format ? yield question.format(answer, answers) : answer;\n });\n\n return function getFormattedAnswer(_x, _x2) {\n return _ref.apply(this, arguments);\n };\n }();\n\n var _iterator = _createForOfIteratorHelper(questions),\n _step;\n\n try {\n for (_iterator.s(); !(_step = _iterator.n()).done;) {\n question = _step.value;\n var _question = question;\n name = _question.name;\n type = _question.type;\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = yield type(answer, _objectSpread({}, answers), question);\n question['type'] = type;\n }\n\n if (!type) continue; // if property is a function, invoke it unless it's a special function\n\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? yield value(answer, _objectSpread({}, answers), lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n } // update vars in case they changed\n\n\n var _question2 = question;\n name = _question2.name;\n type = _question2.type;\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = yield getFormattedAnswer(question, override[question.name]);\n\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : yield prompts[type](question);\n answers[name] = answer = yield getFormattedAnswer(question, answer, true);\n quit = yield onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(yield onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n } catch (err) {\n _iterator.e(err);\n } finally {\n _iterator.f();\n }\n\n return answers;\n });\n return _prompt.apply(this, arguments);\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n\n if (answer instanceof Error) {\n throw answer;\n }\n\n return answer === undefined ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, {\n prompt,\n prompts,\n inject,\n override\n});","'use strict';\n\nmodule.exports = (key, isSelect) => {\n if (key.meta && key.name !== 'escape') return;\n \n if (key.ctrl) {\n if (key.name === 'a') return 'first';\n if (key.name === 'c') return 'abort';\n if (key.name === 'd') return 'abort';\n if (key.name === 'e') return 'last';\n if (key.name === 'g') return 'reset';\n }\n \n if (isSelect) {\n if (key.name === 'j') return 'down';\n if (key.name === 'k') return 'up';\n }\n\n if (key.name === 'return') return 'submit';\n if (key.name === 'enter') return 'submit'; // ctrl + J\n if (key.name === 'backspace') return 'delete';\n if (key.name === 'delete') return 'deleteForward';\n if (key.name === 'abort') return 'abort';\n if (key.name === 'escape') return 'exit';\n if (key.name === 'tab') return 'next';\n if (key.name === 'pagedown') return 'nextPage';\n if (key.name === 'pageup') return 'prevPage';\n // TODO create home() in prompt types (e.g. TextPrompt)\n if (key.name === 'home') return 'home';\n // TODO create end() in prompt types (e.g. TextPrompt)\n if (key.name === 'end') return 'end';\n\n if (key.name === 'up') return 'up';\n if (key.name === 'down') return 'down';\n if (key.name === 'right') return 'right';\n if (key.name === 'left') return 'left';\n\n return false;\n};\n","'use strict';\n\nmodule.exports = str => {\n const pattern = [\n '[\\\\u001B\\\\u009B][[\\\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]+)*|[a-zA-Z\\\\d]+(?:;[-a-zA-Z\\\\d\\\\/#&.:=?%@~_]*)*)?\\\\u0007)',\n '(?:(?:\\\\d{1,4}(?:;\\\\d{0,4})*)?[\\\\dA-PRZcf-ntqry=><~]))'\n ].join('|');\n\n const RGX = new RegExp(pattern, 'g');\n return typeof str === 'string' ? str.replace(RGX, '') : str;\n};\n","'use strict';\n\nconst strip = require('./strip');\nconst { erase, cursor } = require('sisteransi');\n\nconst width = str => [...strip(str)].length;\n\n/**\n * @param {string} prompt\n * @param {number} perLine\n */\nmodule.exports = function(prompt, perLine) {\n if (!perLine) return erase.line + cursor.to(0);\n\n let rows = 0;\n const lines = prompt.split(/\\r?\\n/);\n for (let line of lines) {\n rows += 1 + Math.floor(Math.max(width(line) - 1, 0) / perLine);\n }\n\n return erase.lines(rows);\n};\n","'use strict';\t\n\n const main = {\n arrowUp: '↑',\n arrowDown: '↓',\n arrowLeft: '←',\n arrowRight: '→',\n radioOn: '◉',\n radioOff: '◯',\n tick: '✔',\t\n cross: '✖',\t\n ellipsis: '…',\t\n pointerSmall: '›',\t\n line: '─',\t\n pointer: '❯'\t\n};\t\nconst win = {\n arrowUp: main.arrowUp,\n arrowDown: main.arrowDown,\n arrowLeft: main.arrowLeft,\n arrowRight: main.arrowRight,\n radioOn: '(*)',\n radioOff: '( )',\t\n tick: '√',\t\n cross: '×',\t\n ellipsis: '...',\t\n pointerSmall: '»',\t\n line: '─',\t\n pointer: '>'\t\n};\t\nconst figures = process.platform === 'win32' ? win : main;\t\n\n module.exports = figures;\n","'use strict';\n\nconst c = require('kleur');\nconst figures = require('./figures');\n\n// rendering user input.\nconst styles = Object.freeze({\n password: { scale: 1, render: input => '*'.repeat(input.length) },\n emoji: { scale: 2, render: input => '😃'.repeat(input.length) },\n invisible: { scale: 0, render: input => '' },\n default: { scale: 1, render: input => `${input}` }\n});\nconst render = type => styles[type] || styles.default;\n\n// icon to signalize a prompt.\nconst symbols = Object.freeze({\n aborted: c.red(figures.cross),\n done: c.green(figures.tick),\n exited: c.yellow(figures.cross),\n default: c.cyan('?')\n});\n\nconst symbol = (done, aborted, exited) =>\n aborted ? symbols.aborted : exited ? symbols.exited : done ? symbols.done : symbols.default;\n\n// between the question and the user's input.\nconst delimiter = completing =>\n c.gray(completing ? figures.ellipsis : figures.pointerSmall);\n\nconst item = (expandable, expanded) =>\n c.gray(expandable ? (expanded ? figures.pointerSmall : '+') : figures.line);\n\nmodule.exports = {\n styles,\n render,\n symbols,\n symbol,\n delimiter,\n item\n};\n","'use strict';\n\nconst strip = require('./strip');\n\n/**\n * @param {string} msg\n * @param {number} perLine\n */\nmodule.exports = function (msg, perLine) {\n let lines = String(strip(msg) || '').split(/\\r?\\n/);\n\n if (!perLine) return lines.length;\n return lines.map(l => Math.ceil(l.length / perLine))\n .reduce((a, b) => a + b);\n};\n","'use strict';\n\n/**\n * @param {string} msg The message to wrap\n * @param {object} opts\n * @param {number|string} [opts.margin] Left margin\n * @param {number} opts.width Maximum characters per line including the margin\n */\nmodule.exports = (msg, opts = {}) => {\n const tab = Number.isSafeInteger(parseInt(opts.margin))\n ? new Array(parseInt(opts.margin)).fill(' ').join('')\n : (opts.margin || '');\n\n const width = opts.width;\n\n return (msg || '').split(/\\r?\\n/g)\n .map(line => line\n .split(/\\s+/g)\n .reduce((arr, w) => {\n if (w.length + tab.length >= width || arr[arr.length - 1].length + w.length + 1 < width)\n arr[arr.length - 1] += ` ${w}`;\n else arr.push(`${tab}${w}`);\n return arr;\n }, [ tab ])\n .join('\\n'))\n .join('\\n');\n};\n","'use strict';\n\n/**\n * Determine what entries should be displayed on the screen, based on the\n * currently selected index and the maximum visible. Used in list-based\n * prompts like `select` and `multiselect`.\n *\n * @param {number} cursor the currently selected entry\n * @param {number} total the total entries available to display\n * @param {number} [maxVisible] the number of entries that can be displayed\n */\nmodule.exports = (cursor, total, maxVisible) => {\n maxVisible = maxVisible || total;\n\n let startIndex = Math.min(total- maxVisible, cursor - Math.floor(maxVisible / 2));\n if (startIndex < 0) startIndex = 0;\n\n let endIndex = Math.min(startIndex + maxVisible, total);\n\n return { startIndex, endIndex };\n};\n","'use strict';\n\nmodule.exports = {\n action: require('./action'),\n clear: require('./clear'),\n style: require('./style'),\n strip: require('./strip'),\n figures: require('./figures'),\n lines: require('./lines'),\n wrap: require('./wrap'),\n entriesToDisplay: require('./entriesToDisplay')\n};\n","'use strict';\n\nconst readline = require('readline');\nconst { action } = require('../util');\nconst EventEmitter = require('events');\nconst { beep, cursor } = require('sisteransi');\nconst color = require('kleur');\n\n/**\n * Base prompt skeleton\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass Prompt extends EventEmitter {\n constructor(opts={}) {\n super();\n\n this.firstRender = true;\n this.in = opts.stdin || process.stdin;\n this.out = opts.stdout || process.stdout;\n this.onRender = (opts.onRender || (() => void 0)).bind(this);\n const rl = readline.createInterface({ input:this.in, escapeCodeTimeout:50 });\n readline.emitKeypressEvents(this.in, rl);\n\n if (this.in.isTTY) this.in.setRawMode(true);\n const isSelect = [ 'SelectPrompt', 'MultiselectPrompt' ].indexOf(this.constructor.name) > -1;\n const keypress = (str, key) => {\n let a = action(key, isSelect);\n if (a === false) {\n this._ && this._(str, key);\n } else if (typeof this[a] === 'function') {\n this[a](key);\n } else {\n this.bell();\n }\n };\n\n this.close = () => {\n this.out.write(cursor.show);\n this.in.removeListener('keypress', keypress);\n if (this.in.isTTY) this.in.setRawMode(false);\n rl.close();\n this.emit(this.aborted ? 'abort' : this.exited ? 'exit' : 'submit', this.value);\n this.closed = true;\n };\n\n this.in.on('keypress', keypress);\n }\n\n fire() {\n this.emit('state', {\n value: this.value,\n aborted: !!this.aborted,\n exited: !!this.exited\n });\n }\n\n bell() {\n this.out.write(beep);\n }\n\n render() {\n this.onRender(color);\n if (this.firstRender) this.firstRender = false;\n }\n}\n\nmodule.exports = Prompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, lines, figures } = require('../util');\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.initial] Default value\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass TextPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.msg = opts.message;\n this.initial = opts.initial || ``;\n this.validator = opts.validate || (() => true);\n this.value = ``;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.clear = clear(``, this.out.columns);\n this.render();\n }\n\n set value(v) {\n if (!v && this.initial) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(this.initial));\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(v);\n }\n this._value = v;\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n reset() {\n this.value = ``;\n this.cursor = Number(!!this.initial);\n this.cursorOffset = 0;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.value = this.value || this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.red = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n this.value = this.value || this.initial;\n this.cursorOffset = 0;\n this.cursor = this.rendered.length;\n await this.validate();\n if (this.error) {\n this.red = true;\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n next() {\n if (!this.placeholder) return this.bell();\n this.value = this.initial;\n this.cursor = this.rendered.length;\n this.fire();\n this.render();\n }\n\n moveCursor(n) {\n if (this.placeholder) return;\n this.cursor = this.cursor+n;\n this.cursorOffset += n;\n }\n\n _(c, key) {\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${c}${s2}`;\n this.red = false;\n this.cursor = this.placeholder ? 0 : s1.length+1;\n this.render();\n }\n\n delete() {\n if (this.isCursorAtStart()) return this.bell();\n let s1 = this.value.slice(0, this.cursor-1);\n let s2 = this.value.slice(this.cursor);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtStart()) {\n this.cursorOffset = 0\n } else {\n this.cursorOffset++;\n this.moveCursor(-1);\n }\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n let s1 = this.value.slice(0, this.cursor);\n let s2 = this.value.slice(this.cursor+1);\n this.value = `${s1}${s2}`;\n this.red = false;\n if (this.isCursorAtEnd()) {\n this.cursorOffset = 0;\n } else {\n this.cursorOffset++;\n }\n this.render();\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length;\n this.render();\n }\n\n left() {\n if (this.cursor <= 0 || this.placeholder) return this.bell();\n this.moveCursor(-1);\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length || this.placeholder) return this.bell();\n this.moveCursor(1);\n this.render();\n }\n\n isCursorAtStart() {\n return this.cursor === 0 || (this.placeholder && this.cursor === 1);\n }\n\n isCursorAtEnd() {\n return this.cursor === this.rendered.length || (this.placeholder && this.cursor === this.rendered.length + 1)\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.red ? color.red(this.rendered) : this.rendered\n ].join(` `);\n\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ' ' : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore + cursor.move(this.cursorOffset, 0));\n }\n}\n\nmodule.exports = TextPrompt;","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\nconst { cursor } = require('sisteransi');\n\n/**\n * SelectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {Number} [opts.initial] Index of default value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n */\nclass SelectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.hint = opts.hint || '- Use arrow-keys. Return to submit.';\n this.warn = opts.warn || '- This option is disabled';\n this.cursor = opts.initial || 0;\n this.choices = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n value: ch && (ch.value === undefined ? idx : ch.value),\n description: ch && ch.description,\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = (this.choices[this.cursor] || {}).value;\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n moveCursor(n) {\n this.cursor = n;\n this.value = this.choices[n].value;\n this.fire();\n }\n\n reset() {\n this.moveCursor(0);\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n if (!this.selection.disabled) {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n } else\n this.bell();\n }\n\n first() {\n this.moveCursor(0);\n this.render();\n }\n\n last() {\n this.moveCursor(this.choices.length - 1);\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.moveCursor(this.choices.length - 1);\n } else {\n this.moveCursor(this.cursor - 1);\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.choices.length - 1) {\n this.moveCursor(0);\n } else {\n this.moveCursor(this.cursor + 1);\n }\n this.render();\n }\n\n next() {\n this.moveCursor((this.cursor + 1) % this.choices.length);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') return this.submit();\n }\n\n get selection() {\n return this.choices[this.cursor];\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, this.choices.length, this.optionsPerPage);\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.done ? this.selection.title : this.selection.disabled\n ? color.yellow(this.warn) : color.gray(this.hint)\n ].join(' ');\n\n // Print choices\n if (!this.done) {\n this.outputText += '\\n';\n for (let i = startIndex; i < endIndex; i++) {\n let title, prefix, desc = '', v = this.choices[i];\n\n // Determine whether to display \"more choices\" indicators\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < this.choices.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n\n if (v.disabled) {\n title = this.cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n prefix = (this.cursor === i ? color.bold().gray(figures.pointer) + ' ' : ' ') + prefix;\n } else {\n title = this.cursor === i ? color.cyan().underline(v.title) : v.title;\n prefix = (this.cursor === i ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description && this.cursor === i) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns });\n }\n }\n }\n\n this.outputText += `${prefix} ${title}${color.gray(desc)}\\n`;\n }\n }\n\n this.out.write(this.outputText);\n }\n}\n\nmodule.exports = SelectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { cursor, erase } = require('sisteransi');\n\n/**\n * TogglePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial=false] Default value\n * @param {String} [opts.active='no'] Active label\n * @param {String} [opts.inactive='off'] Inactive label\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass TogglePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = !!opts.initial;\n this.active = opts.active || 'on';\n this.inactive = opts.inactive || 'off';\n this.initialValue = this.value;\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n deactivate() {\n if (this.value === false) return this.bell();\n this.value = false;\n this.render();\n }\n\n activate() {\n if (this.value === true) return this.bell();\n this.value = true;\n this.render();\n }\n\n delete() {\n this.deactivate();\n }\n left() {\n this.deactivate();\n }\n right() {\n this.activate();\n }\n down() {\n this.deactivate();\n }\n up() {\n this.activate();\n }\n\n next() {\n this.value = !this.value;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.value = !this.value;\n } else if (c === '1') {\n this.value = true;\n } else if (c === '0') {\n this.value = false;\n } else return this.bell();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.value ? this.inactive : color.cyan().underline(this.inactive),\n color.gray('/'),\n this.value ? color.cyan().underline(this.active) : this.active\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = TogglePrompt;\n","'use strict';\n\nclass DatePart {\n constructor({token, date, parts, locales}) {\n this.token = token;\n this.date = date || new Date();\n this.parts = parts || [this];\n this.locales = locales || {};\n }\n\n up() {}\n\n down() {}\n\n next() {\n const currentIdx = this.parts.indexOf(this);\n return this.parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n setTo(val) {}\n\n prev() {\n let parts = [].concat(this.parts).reverse();\n const currentIdx = parts.indexOf(this);\n return parts.find((part, idx) => idx > currentIdx && part instanceof DatePart);\n }\n\n toString() {\n return String(this.date);\n }\n}\n\nmodule.exports = DatePart;\n\n\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Meridiem extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours((this.date.getHours() + 12) % 24);\n }\n\n down() {\n this.up();\n }\n\n toString() {\n let meridiem = this.date.getHours() > 12 ? 'pm' : 'am';\n return /\\A/.test(this.token) ? meridiem.toUpperCase() : meridiem;\n }\n}\n\nmodule.exports = Meridiem;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nconst pos = n => {\n n = n % 10;\n return n === 1 ? 'st'\n : n === 2 ? 'nd'\n : n === 3 ? 'rd'\n : 'th';\n}\n\nclass Day extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setDate(this.date.getDate() + 1);\n }\n\n down() {\n this.date.setDate(this.date.getDate() - 1);\n }\n\n setTo(val) {\n this.date.setDate(parseInt(val.substr(-2)));\n }\n\n toString() {\n let date = this.date.getDate();\n let day = this.date.getDay();\n return this.token === 'DD' ? String(date).padStart(2, '0')\n : this.token === 'Do' ? date + pos(date)\n : this.token === 'd' ? day + 1\n : this.token === 'ddd' ? this.locales.weekdaysShort[day]\n : this.token === 'dddd' ? this.locales.weekdays[day]\n : date;\n }\n}\n\nmodule.exports = Day;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Hours extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setHours(this.date.getHours() + 1);\n }\n\n down() {\n this.date.setHours(this.date.getHours() - 1);\n }\n\n setTo(val) {\n this.date.setHours(parseInt(val.substr(-2)));\n }\n\n toString() {\n let hours = this.date.getHours();\n if (/h/.test(this.token))\n hours = (hours % 12) || 12;\n return this.token.length > 1 ? String(hours).padStart(2, '0') : hours;\n }\n}\n\nmodule.exports = Hours;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Milliseconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMilliseconds(this.date.getMilliseconds() + 1);\n }\n\n down() {\n this.date.setMilliseconds(this.date.getMilliseconds() - 1);\n }\n\n setTo(val) {\n this.date.setMilliseconds(parseInt(val.substr(-(this.token.length))));\n }\n\n toString() {\n return String(this.date.getMilliseconds()).padStart(4, '0')\n .substr(0, this.token.length);\n }\n}\n\nmodule.exports = Milliseconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Minutes extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMinutes(this.date.getMinutes() + 1);\n }\n\n down() {\n this.date.setMinutes(this.date.getMinutes() - 1);\n }\n\n setTo(val) {\n this.date.setMinutes(parseInt(val.substr(-2)));\n }\n\n toString() {\n let m = this.date.getMinutes();\n return this.token.length > 1 ? String(m).padStart(2, '0') : m;\n }\n}\n\nmodule.exports = Minutes;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Month extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setMonth(this.date.getMonth() + 1);\n }\n\n down() {\n this.date.setMonth(this.date.getMonth() - 1);\n }\n\n setTo(val) {\n val = parseInt(val.substr(-2)) - 1;\n this.date.setMonth(val < 0 ? 0 : val);\n }\n\n toString() {\n let month = this.date.getMonth();\n let tl = this.token.length;\n return tl === 2 ? String(month + 1).padStart(2, '0')\n : tl === 3 ? this.locales.monthsShort[month]\n : tl === 4 ? this.locales.months[month]\n : String(month + 1);\n }\n}\n\nmodule.exports = Month;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Seconds extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setSeconds(this.date.getSeconds() + 1);\n }\n\n down() {\n this.date.setSeconds(this.date.getSeconds() - 1);\n }\n\n setTo(val) {\n this.date.setSeconds(parseInt(val.substr(-2)));\n }\n\n toString() {\n let s = this.date.getSeconds();\n return this.token.length > 1 ? String(s).padStart(2, '0') : s;\n }\n}\n\nmodule.exports = Seconds;\n","'use strict';\n\nconst DatePart = require('./datepart');\n\nclass Year extends DatePart {\n constructor(opts={}) {\n super(opts);\n }\n\n up() {\n this.date.setFullYear(this.date.getFullYear() + 1);\n }\n\n down() {\n this.date.setFullYear(this.date.getFullYear() - 1);\n }\n\n setTo(val) {\n this.date.setFullYear(val.substr(-4));\n }\n\n toString() {\n let year = String(this.date.getFullYear()).padStart(4, '0');\n return this.token.length === 2 ? year.substr(-2) : year;\n }\n}\n\nmodule.exports = Year;\n","'use strict';\n\nmodule.exports = {\n DatePart: require('./datepart'),\n Meridiem: require('./meridiem'),\n Day: require('./day'),\n Hours: require('./hours'),\n Milliseconds: require('./milliseconds'),\n Minutes: require('./minutes'),\n Month: require('./month'),\n Seconds: require('./seconds'),\n Year: require('./year'),\n}\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear, figures } = require('../util');\nconst { erase, cursor } = require('sisteransi');\nconst { DatePart, Meridiem, Day, Hours, Milliseconds, Minutes, Month, Seconds, Year } = require('../dateparts');\n\nconst regex = /\\\\(.)|\"((?:\\\\[\"\\\\]|[^\"])+)\"|(D[Do]?|d{3,4}|d)|(M{1,4})|(YY(?:YY)?)|([aA])|([Hh]{1,2})|(m{1,2})|(s{1,2})|(S{1,4})|./g;\nconst regexGroups = {\n 1: ({token}) => token.replace(/\\\\(.)/g, '$1'),\n 2: (opts) => new Day(opts), // Day // TODO\n 3: (opts) => new Month(opts), // Month\n 4: (opts) => new Year(opts), // Year\n 5: (opts) => new Meridiem(opts), // AM/PM // TODO (special)\n 6: (opts) => new Hours(opts), // Hours\n 7: (opts) => new Minutes(opts), // Minutes\n 8: (opts) => new Seconds(opts), // Seconds\n 9: (opts) => new Milliseconds(opts), // Fractional seconds\n}\n\nconst dfltLocales = {\n months: 'January,February,March,April,May,June,July,August,September,October,November,December'.split(','),\n monthsShort: 'Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec'.split(','),\n weekdays: 'Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday'.split(','),\n weekdaysShort: 'Sun,Mon,Tue,Wed,Thu,Fri,Sat'.split(',')\n}\n\n\n/**\n * DatePrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Number} [opts.initial] Index of default value\n * @param {String} [opts.mask] The format mask\n * @param {object} [opts.locales] The date locales\n * @param {String} [opts.error] The error message shown on invalid value\n * @param {Function} [opts.validate] Function to validate the submitted value\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass DatePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = 0;\n this.typed = '';\n this.locales = Object.assign(dfltLocales, opts.locales);\n this._date = opts.initial || new Date();\n this.errorMsg = opts.error || 'Please Enter A Valid Value';\n this.validator = opts.validate || (() => true);\n this.mask = opts.mask || 'YYYY-MM-DD HH:mm:ss';\n this.clear = clear('', this.out.columns);\n this.render();\n }\n\n get value() {\n return this.date\n }\n\n get date() {\n return this._date;\n }\n\n set date(date) {\n if (date) this._date.setTime(date.getTime());\n }\n\n set mask(mask) {\n let result;\n this.parts = [];\n while(result = regex.exec(mask)) {\n let match = result.shift();\n let idx = result.findIndex(gr => gr != null);\n this.parts.push(idx in regexGroups\n ? regexGroups[idx]({ token: result[idx] || match, date: this.date, parts: this.parts, locales: this.locales })\n : result[idx] || match);\n }\n\n let parts = this.parts.reduce((arr, i) => {\n if (typeof i === 'string' && typeof arr[arr.length - 1] === 'string')\n arr[arr.length - 1] += i;\n else arr.push(i);\n return arr;\n }, []);\n\n this.parts.splice(0);\n this.parts.push(...parts);\n this.reset();\n }\n\n moveCursor(n) {\n this.typed = '';\n this.cursor = n;\n this.fire();\n }\n\n reset() {\n this.moveCursor(this.parts.findIndex(p => p instanceof DatePart));\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === 'string') {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = 'red';\n this.fire();\n this.render();\n return;\n }\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n up() {\n this.typed = '';\n this.parts[this.cursor].up();\n this.render();\n }\n\n down() {\n this.typed = '';\n this.parts[this.cursor].down();\n this.render();\n }\n\n left() {\n let prev = this.parts[this.cursor].prev();\n if (prev == null) return this.bell();\n this.moveCursor(this.parts.indexOf(prev));\n this.render();\n }\n\n right() {\n let next = this.parts[this.cursor].next();\n if (next == null) return this.bell();\n this.moveCursor(this.parts.indexOf(next));\n this.render();\n }\n\n next() {\n let next = this.parts[this.cursor].next();\n this.moveCursor(next\n ? this.parts.indexOf(next)\n : this.parts.findIndex((part) => part instanceof DatePart));\n this.render();\n }\n\n _(c) {\n if (/\\d/.test(c)) {\n this.typed += c;\n this.parts[this.cursor].setTo(this.typed);\n this.render();\n }\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.parts.reduce((arr, p, idx) => arr.concat(idx === this.cursor && !this.done ? color.cyan().underline(p.toString()) : p), [])\n .join('')\n ].join(' ');\n\n // Print error\n if (this.error) {\n this.outputText += this.errorMsg.split('\\n').reduce(\n (a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = DatePrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { cursor, erase } = require('sisteransi');\nconst { style, figures, clear, lines } = require('../util');\n\nconst isNumber = /[0-9]/;\nconst isDef = any => any !== undefined;\nconst round = (number, precision) => {\n let factor = Math.pow(10, precision);\n return Math.round(number * factor) / factor;\n}\n\n/**\n * NumberPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {String} [opts.style='default'] Render style\n * @param {Number} [opts.initial] Default value\n * @param {Number} [opts.max=+Infinity] Max value\n * @param {Number} [opts.min=-Infinity] Min value\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {Function} [opts.validate] Validate function\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.error] The invalid error label\n */\nclass NumberPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.transform = style.render(opts.style);\n this.msg = opts.message;\n this.initial = isDef(opts.initial) ? opts.initial : '';\n this.float = !!opts.float;\n this.round = opts.round || 2;\n this.inc = opts.increment || 1;\n this.min = isDef(opts.min) ? opts.min : -Infinity;\n this.max = isDef(opts.max) ? opts.max : Infinity;\n this.errorMsg = opts.error || `Please Enter A Valid Value`;\n this.validator = opts.validate || (() => true);\n this.color = `cyan`;\n this.value = ``;\n this.typed = ``;\n this.lastHit = 0;\n this.render();\n }\n\n set value(v) {\n if (!v && v !== 0) {\n this.placeholder = true;\n this.rendered = color.gray(this.transform.render(`${this.initial}`));\n this._value = ``;\n } else {\n this.placeholder = false;\n this.rendered = this.transform.render(`${round(v, this.round)}`);\n this._value = round(v, this.round);\n }\n this.fire();\n }\n\n get value() {\n return this._value;\n }\n\n parse(x) {\n return this.float ? parseFloat(x) : parseInt(x);\n }\n\n valid(c) {\n return c === `-` || c === `.` && this.float || isNumber.test(c)\n }\n\n reset() {\n this.typed = ``;\n this.value = ``;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = this.aborted = true;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n async validate() {\n let valid = await this.validator(this.value);\n if (typeof valid === `string`) {\n this.errorMsg = valid;\n valid = false;\n }\n this.error = !valid;\n }\n\n async submit() {\n await this.validate();\n if (this.error) {\n this.color = `red`;\n this.fire();\n this.render();\n return;\n }\n let x = this.value;\n this.value = x !== `` ? x : this.initial;\n this.done = true;\n this.aborted = false;\n this.error = false;\n this.fire();\n this.render();\n this.out.write(`\\n`);\n this.close();\n }\n\n up() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min - this.inc;\n }\n if (this.value >= this.max) return this.bell();\n this.value += this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n down() {\n this.typed = ``;\n if(this.value === '') {\n this.value = this.min + this.inc;\n }\n if (this.value <= this.min) return this.bell();\n this.value -= this.inc;\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n delete() {\n let val = this.value.toString();\n if (val.length === 0) return this.bell();\n this.value = this.parse((val = val.slice(0, -1))) || ``;\n if (this.value !== '' && this.value < this.min) {\n this.value = this.min;\n }\n this.color = `cyan`;\n this.fire();\n this.render();\n }\n\n next() {\n this.value = this.initial;\n this.fire();\n this.render();\n }\n\n _(c, key) {\n if (!this.valid(c)) return this.bell();\n\n const now = Date.now();\n if (now - this.lastHit > 1000) this.typed = ``; // 1s elapsed\n this.typed += c;\n this.lastHit = now;\n this.color = `cyan`;\n\n if (c === `.`) return this.fire();\n\n this.value = Math.min(this.parse(this.typed), this.max);\n if (this.value > this.max) this.value = this.max;\n if (this.value < this.min) this.value = this.min;\n this.fire();\n this.render();\n }\n\n render() {\n if (this.closed) return;\n if (!this.firstRender) {\n if (this.outputError)\n this.out.write(cursor.down(lines(this.outputError, this.out.columns) - 1) + clear(this.outputError, this.out.columns));\n this.out.write(clear(this.outputText, this.out.columns));\n }\n super.render();\n this.outputError = '';\n\n // Print prompt\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n !this.done || (!this.done && !this.placeholder)\n ? color[this.color]().underline(this.rendered) : this.rendered\n ].join(` `);\n\n // Print error\n if (this.error) {\n this.outputError += this.errorMsg.split(`\\n`)\n .reduce((a, l, i) => a + `\\n${i ? ` ` : figures.pointerSmall} ${color.red().italic(l)}`, ``);\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText + cursor.save + this.outputError + cursor.restore);\n }\n}\n\nmodule.exports = NumberPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst Prompt = require('./prompt');\nconst { clear, figures, style, wrap, entriesToDisplay } = require('../util');\n\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Number} [opts.optionsPerPage=10] Max options to display at once\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass MultiselectPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.cursor = opts.cursor || 0;\n this.scrollIndex = opts.cursor || 0;\n this.hint = opts.hint || '';\n this.warn = opts.warn || '- This option is disabled -';\n this.minSelected = opts.min;\n this.showMinError = false;\n this.maxChoices = opts.max;\n this.instructions = opts.instructions;\n this.optionsPerPage = opts.optionsPerPage || 10;\n this.value = opts.choices.map((ch, idx) => {\n if (typeof ch === 'string')\n ch = {title: ch, value: idx};\n return {\n title: ch && (ch.title || ch.value || ch),\n description: ch && ch.description,\n value: ch && (ch.value === undefined ? idx : ch.value),\n selected: ch && ch.selected,\n disabled: ch && ch.disabled\n };\n });\n this.clear = clear('', this.out.columns);\n if (!opts.overrideRender) {\n this.render();\n }\n }\n\n reset() {\n this.value.map(v => !v.selected);\n this.cursor = 0;\n this.fire();\n this.render();\n }\n\n selected() {\n return this.value.filter(v => v.selected);\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n const selected = this.value\n .filter(e => e.selected);\n if (this.minSelected && selected.length < this.minSelected) {\n this.showMinError = true;\n this.render();\n } else {\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n first() {\n this.cursor = 0;\n this.render();\n }\n\n last() {\n this.cursor = this.value.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.value.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.value.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.value.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.value[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.value[this.cursor].selected = true;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.value[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n toggleAll() {\n if (this.maxChoices !== undefined || this.value[this.cursor].disabled) {\n return this.bell();\n }\n\n const newSelected = !this.value[this.cursor].selected;\n this.value.filter(v => !v.disabled).forEach(v => v.selected = newSelected);\n this.render();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else if (c === 'a') {\n this.toggleAll();\n } else {\n return this.bell();\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return '\\nInstructions:\\n'\n + ` ${figures.arrowUp}/${figures.arrowDown}: Highlight option\\n`\n + ` ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\\n`\n + (this.maxChoices === undefined ? ` a: Toggle all\\n` : '')\n + ` enter/return: Complete answer`;\n }\n return '';\n }\n\n renderOption(cursor, v, i, arrowIndicator) {\n const prefix = (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + arrowIndicator + ' ';\n let title, desc;\n\n if (v.disabled) {\n title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n } else {\n title = cursor === i ? color.cyan().underline(v.title) : v.title;\n if (cursor === i && v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: prefix.length, width: this.out.columns });\n }\n }\n }\n\n return prefix + title + color.gray(desc || '');\n }\n\n // shared with autocompleteMultiselect\n paginateOptions(options) {\n if (options.length === 0) {\n return color.red('No matches for this query.');\n }\n\n let { startIndex, endIndex } = entriesToDisplay(this.cursor, options.length, this.optionsPerPage);\n let prefix, styledOptions = [];\n\n for (let i = startIndex; i < endIndex; i++) {\n if (i === startIndex && startIndex > 0) {\n prefix = figures.arrowUp;\n } else if (i === endIndex - 1 && endIndex < options.length) {\n prefix = figures.arrowDown;\n } else {\n prefix = ' ';\n }\n styledOptions.push(this.renderOption(this.cursor, options[i], i, prefix));\n }\n\n return '\\n' + styledOptions.join('\\n');\n }\n\n // shared with autocomleteMultiselect\n renderOptions(options) {\n if (!this.done) {\n return this.paginateOptions(options);\n }\n return '';\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions()];\n\n if (this.value[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.value);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = MultiselectPrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst Prompt = require('./prompt');\nconst { erase, cursor } = require('sisteransi');\nconst { style, clear, figures, wrap, entriesToDisplay } = require('../util');\n\nconst getVal = (arr, i) => arr[i] && (arr[i].value || arr[i].title || arr[i]);\nconst getTitle = (arr, i) => arr[i] && (arr[i].title || arr[i].value || arr[i]);\nconst getIndex = (arr, valOrTitle) => {\n const index = arr.findIndex(el => el.value === valOrTitle || el.title === valOrTitle);\n return index > -1 ? index : undefined;\n};\n\n/**\n * TextPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of auto-complete choices objects\n * @param {Function} [opts.suggest] Filter function. Defaults to sort by title\n * @param {Number} [opts.limit=10] Max number of results to show\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {String} [opts.style='default'] Render style\n * @param {String} [opts.fallback] Fallback message - initial to default value\n * @param {String} [opts.initial] Index of the default value\n * @param {Boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.noMatches] The no matches found label\n */\nclass AutocompletePrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.suggest = opts.suggest;\n this.choices = opts.choices;\n this.initial = typeof opts.initial === 'number'\n ? opts.initial\n : getIndex(opts.choices, opts.initial);\n this.select = this.initial || opts.cursor || 0;\n this.i18n = { noMatches: opts.noMatches || 'no matches found' };\n this.fallback = opts.fallback || this.initial;\n this.clearFirst = opts.clearFirst || false;\n this.suggestions = [];\n this.input = '';\n this.limit = opts.limit || 10;\n this.cursor = 0;\n this.transform = style.render(opts.style);\n this.scale = this.transform.scale;\n this.render = this.render.bind(this);\n this.complete = this.complete.bind(this);\n this.clear = clear('', this.out.columns);\n this.complete(this.render);\n this.render();\n }\n\n set fallback(fb) {\n this._fb = Number.isSafeInteger(parseInt(fb)) ? parseInt(fb) : fb;\n }\n\n get fallback() {\n let choice;\n if (typeof this._fb === 'number')\n choice = this.choices[this._fb];\n else if (typeof this._fb === 'string')\n choice = { title: this._fb };\n return choice || this._fb || { title: this.i18n.noMatches };\n }\n\n moveSelect(i) {\n this.select = i;\n if (this.suggestions.length > 0)\n this.value = getVal(this.suggestions, i);\n else this.value = this.fallback.value;\n this.fire();\n }\n\n async complete(cb) {\n const p = (this.completing = this.suggest(this.input, this.choices));\n const suggestions = await p;\n\n if (this.completing !== p) return;\n this.suggestions = suggestions\n .map((s, i, arr) => ({ title: getTitle(arr, i), value: getVal(arr, i), description: s.description }));\n this.completing = false;\n const l = Math.max(suggestions.length - 1, 0);\n this.moveSelect(Math.min(l, this.select));\n\n cb && cb();\n }\n\n reset() {\n this.input = '';\n this.complete(() => {\n this.moveSelect(this.initial !== void 0 ? this.initial : 0);\n this.render();\n });\n this.render();\n }\n\n exit() {\n if (this.clearFirst && this.input.length > 0) {\n this.reset();\n } else {\n this.done = this.exited = true; \n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n }\n\n abort() {\n this.done = this.aborted = true;\n this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.done = true;\n this.aborted = this.exited = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${c}${s2}`;\n this.cursor = s1.length+1;\n this.complete(this.render);\n this.render();\n }\n\n delete() {\n if (this.cursor === 0) return this.bell();\n let s1 = this.input.slice(0, this.cursor-1);\n let s2 = this.input.slice(this.cursor);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.cursor = this.cursor-1;\n this.render();\n }\n\n deleteForward() {\n if(this.cursor*this.scale >= this.rendered.length) return this.bell();\n let s1 = this.input.slice(0, this.cursor);\n let s2 = this.input.slice(this.cursor+1);\n this.input = `${s1}${s2}`;\n this.complete(this.render);\n this.render();\n }\n\n first() {\n this.moveSelect(0);\n this.render();\n }\n\n last() {\n this.moveSelect(this.suggestions.length - 1);\n this.render();\n }\n\n up() {\n if (this.select === 0) {\n this.moveSelect(this.suggestions.length - 1);\n } else {\n this.moveSelect(this.select - 1);\n }\n this.render();\n }\n\n down() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else {\n this.moveSelect(this.select + 1);\n }\n this.render();\n }\n\n next() {\n if (this.select === this.suggestions.length - 1) {\n this.moveSelect(0);\n } else this.moveSelect(this.select + 1);\n this.render();\n }\n\n nextPage() {\n this.moveSelect(Math.min(this.select + this.limit, this.suggestions.length - 1));\n this.render();\n }\n\n prevPage() {\n this.moveSelect(Math.max(this.select - this.limit, 0));\n this.render();\n }\n\n left() {\n if (this.cursor <= 0) return this.bell();\n this.cursor = this.cursor-1;\n this.render();\n }\n\n right() {\n if (this.cursor*this.scale >= this.rendered.length) return this.bell();\n this.cursor = this.cursor+1;\n this.render();\n }\n\n renderOption(v, hovered, isStart, isEnd) {\n let desc;\n let prefix = isStart ? figures.arrowUp : isEnd ? figures.arrowDown : ' ';\n let title = hovered ? color.cyan().underline(v.title) : v.title;\n prefix = (hovered ? color.cyan(figures.pointer) + ' ' : ' ') + prefix;\n if (v.description) {\n desc = ` - ${v.description}`;\n if (prefix.length + title.length + desc.length >= this.out.columns\n || v.description.split(/\\r?\\n/).length > 1) {\n desc = '\\n' + wrap(v.description, { margin: 3, width: this.out.columns })\n }\n }\n return prefix + ' ' + title + color.gray(desc || '');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n let { startIndex, endIndex } = entriesToDisplay(this.select, this.choices.length, this.limit);\n\n this.outputText = [\n style.symbol(this.done, this.aborted, this.exited),\n color.bold(this.msg),\n style.delimiter(this.completing),\n this.done && this.suggestions[this.select]\n ? this.suggestions[this.select].title\n : this.rendered = this.transform.render(this.input)\n ].join(' ');\n\n if (!this.done) {\n const suggestions = this.suggestions\n .slice(startIndex, endIndex)\n .map((item, i) => this.renderOption(item,\n this.select === i + startIndex,\n i === 0 && startIndex > 0,\n i + startIndex === endIndex - 1 && endIndex < this.choices.length))\n .join('\\n');\n this.outputText += `\\n` + (suggestions || color.gray(this.fallback.title));\n }\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = AutocompletePrompt;\n","'use strict';\n\nconst color = require('kleur');\nconst { cursor } = require('sisteransi');\nconst MultiselectPrompt = require('./multiselect');\nconst { clear, style, figures } = require('../util');\n/**\n * MultiselectPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Array} opts.choices Array of choice objects\n * @param {String} [opts.hint] Hint to display\n * @param {String} [opts.warn] Hint shown for disabled choices\n * @param {Number} [opts.max] Max choices\n * @param {Number} [opts.cursor=0] Cursor start position\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n */\nclass AutocompleteMultiselectPrompt extends MultiselectPrompt {\n constructor(opts={}) {\n opts.overrideRender = true;\n super(opts);\n this.inputValue = '';\n this.clear = clear('', this.out.columns);\n this.filteredOptions = this.value;\n this.render();\n }\n\n last() {\n this.cursor = this.filteredOptions.length - 1;\n this.render();\n }\n next() {\n this.cursor = (this.cursor + 1) % this.filteredOptions.length;\n this.render();\n }\n\n up() {\n if (this.cursor === 0) {\n this.cursor = this.filteredOptions.length - 1;\n } else {\n this.cursor--;\n }\n this.render();\n }\n\n down() {\n if (this.cursor === this.filteredOptions.length - 1) {\n this.cursor = 0;\n } else {\n this.cursor++;\n }\n this.render();\n }\n\n left() {\n this.filteredOptions[this.cursor].selected = false;\n this.render();\n }\n\n right() {\n if (this.value.filter(e => e.selected).length >= this.maxChoices) return this.bell();\n this.filteredOptions[this.cursor].selected = true;\n this.render();\n }\n\n delete() {\n if (this.inputValue.length) {\n this.inputValue = this.inputValue.substr(0, this.inputValue.length - 1);\n this.updateFilteredOptions();\n }\n }\n\n updateFilteredOptions() {\n const currentHighlight = this.filteredOptions[this.cursor];\n this.filteredOptions = this.value\n .filter(v => {\n if (this.inputValue) {\n if (typeof v.title === 'string') {\n if (v.title.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n if (typeof v.value === 'string') {\n if (v.value.toLowerCase().includes(this.inputValue.toLowerCase())) {\n return true;\n }\n }\n return false;\n }\n return true;\n });\n const newHighlightIndex = this.filteredOptions.findIndex(v => v === currentHighlight)\n this.cursor = newHighlightIndex < 0 ? 0 : newHighlightIndex;\n this.render();\n }\n\n handleSpaceToggle() {\n const v = this.filteredOptions[this.cursor];\n\n if (v.selected) {\n v.selected = false;\n this.render();\n } else if (v.disabled || this.value.filter(e => e.selected).length >= this.maxChoices) {\n return this.bell();\n } else {\n v.selected = true;\n this.render();\n }\n }\n\n handleInputChange(c) {\n this.inputValue = this.inputValue + c;\n this.updateFilteredOptions();\n }\n\n _(c, key) {\n if (c === ' ') {\n this.handleSpaceToggle();\n } else {\n this.handleInputChange(c);\n }\n }\n\n renderInstructions() {\n if (this.instructions === undefined || this.instructions) {\n if (typeof this.instructions === 'string') {\n return this.instructions;\n }\n return `\nInstructions:\n ${figures.arrowUp}/${figures.arrowDown}: Highlight option\n ${figures.arrowLeft}/${figures.arrowRight}/[space]: Toggle selection\n [a,b,c]/delete: Filter choices\n enter/return: Complete answer\n`;\n }\n return '';\n }\n\n renderCurrentInput() {\n return `\nFiltered results for: ${this.inputValue ? this.inputValue : color.gray('Enter something to filter')}\\n`;\n }\n\n renderOption(cursor, v, i) {\n let title;\n if (v.disabled) title = cursor === i ? color.gray().underline(v.title) : color.strikethrough().gray(v.title);\n else title = cursor === i ? color.cyan().underline(v.title) : v.title;\n return (v.selected ? color.green(figures.radioOn) : figures.radioOff) + ' ' + title\n }\n\n renderDoneOrInstructions() {\n if (this.done) {\n return this.value\n .filter(e => e.selected)\n .map(v => v.title)\n .join(', ');\n }\n\n const output = [color.gray(this.hint), this.renderInstructions(), this.renderCurrentInput()];\n\n if (this.filteredOptions.length && this.filteredOptions[this.cursor].disabled) {\n output.push(color.yellow(this.warn));\n }\n return output.join(' ');\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n super.render();\n\n // print prompt\n\n let prompt = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(false),\n this.renderDoneOrInstructions()\n ].join(' ');\n\n if (this.showMinError) {\n prompt += color.red(`You must select a minimum of ${this.minSelected} choices.`);\n this.showMinError = false;\n }\n prompt += this.renderOptions(this.filteredOptions);\n\n this.out.write(this.clear + prompt);\n this.clear = clear(prompt, this.out.columns);\n }\n}\n\nmodule.exports = AutocompleteMultiselectPrompt;\n","const color = require('kleur');\nconst Prompt = require('./prompt');\nconst { style, clear } = require('../util');\nconst { erase, cursor } = require('sisteransi');\n\n/**\n * ConfirmPrompt Base Element\n * @param {Object} opts Options\n * @param {String} opts.message Message\n * @param {Boolean} [opts.initial] Default value (true/false)\n * @param {Stream} [opts.stdin] The Readable stream to listen to\n * @param {Stream} [opts.stdout] The Writable stream to write readline data to\n * @param {String} [opts.yes] The \"Yes\" label\n * @param {String} [opts.yesOption] The \"Yes\" option when choosing between yes/no\n * @param {String} [opts.no] The \"No\" label\n * @param {String} [opts.noOption] The \"No\" option when choosing between yes/no\n */\nclass ConfirmPrompt extends Prompt {\n constructor(opts={}) {\n super(opts);\n this.msg = opts.message;\n this.value = opts.initial;\n this.initialValue = !!opts.initial;\n this.yesMsg = opts.yes || 'yes';\n this.yesOption = opts.yesOption || '(Y/n)';\n this.noMsg = opts.no || 'no';\n this.noOption = opts.noOption || '(y/N)';\n this.render();\n }\n\n reset() {\n this.value = this.initialValue;\n this.fire();\n this.render();\n }\n\n exit() {\n this.abort();\n }\n\n abort() {\n this.done = this.aborted = true;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n submit() {\n this.value = this.value || false;\n this.done = true;\n this.aborted = false;\n this.fire();\n this.render();\n this.out.write('\\n');\n this.close();\n }\n\n _(c, key) {\n if (c.toLowerCase() === 'y') {\n this.value = true;\n return this.submit();\n }\n if (c.toLowerCase() === 'n') {\n this.value = false;\n return this.submit();\n }\n return this.bell();\n }\n\n render() {\n if (this.closed) return;\n if (this.firstRender) this.out.write(cursor.hide);\n else this.out.write(clear(this.outputText, this.out.columns));\n super.render();\n\n this.outputText = [\n style.symbol(this.done, this.aborted),\n color.bold(this.msg),\n style.delimiter(this.done),\n this.done ? (this.value ? this.yesMsg : this.noMsg)\n : color.gray(this.initialValue ? this.yesOption : this.noOption)\n ].join(' ');\n\n this.out.write(erase.line + cursor.to(0) + this.outputText);\n }\n}\n\nmodule.exports = ConfirmPrompt;\n","'use strict';\n\nmodule.exports = {\n TextPrompt: require('./text'),\n SelectPrompt: require('./select'),\n TogglePrompt: require('./toggle'),\n DatePrompt: require('./date'),\n NumberPrompt: require('./number'),\n MultiselectPrompt: require('./multiselect'),\n AutocompletePrompt: require('./autocomplete'),\n AutocompleteMultiselectPrompt: require('./autocompleteMultiselect'),\n ConfirmPrompt: require('./confirm')\n};\n","'use strict';\nconst $ = exports;\nconst el = require('./elements');\nconst noop = v => v;\n\nfunction toPrompt(type, args, opts={}) {\n return new Promise((res, rej) => {\n const p = new el[type](args);\n const onAbort = opts.onAbort || noop;\n const onSubmit = opts.onSubmit || noop;\n const onExit = opts.onExit || noop;\n p.on('state', args.onState || noop);\n p.on('submit', x => res(onSubmit(x)));\n p.on('exit', x => res(onExit(x)));\n p.on('abort', x => rej(onAbort(x)));\n });\n}\n\n/**\n * Text prompt\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.text = args => toPrompt('TextPrompt', args);\n\n/**\n * Password prompt with masked input\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.password = args => {\n args.style = 'password';\n return $.text(args);\n};\n\n/**\n * Prompt where input is invisible, like sudo\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {function} [args.onState] On state change callback\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.invisible = args => {\n args.style = 'invisible';\n return $.text(args);\n};\n\n/**\n * Number prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.number = args => toPrompt('NumberPrompt', args);\n\n/**\n * Date prompt\n * @param {string} args.message Prompt message to display\n * @param {number} args.initial Default number value\n * @param {function} [args.onState] On state change callback\n * @param {number} [args.max] Max value\n * @param {number} [args.min] Min value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {Boolean} [opts.float=false] Parse input as floats\n * @param {Number} [opts.round=2] Round floats to x decimals\n * @param {Number} [opts.increment=1] Number to increment by when using arrow-keys\n * @param {function} [args.validate] Function to validate user input\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.date = args => toPrompt('DatePrompt', args);\n\n/**\n * Classic yes/no prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.confirm = args => toPrompt('ConfirmPrompt', args);\n\n/**\n * List prompt, split intput string by `seperator`\n * @param {string} args.message Prompt message to display\n * @param {string} [args.initial] Default string value\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {string} [args.separator] String separator\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input, in form of an `Array`\n */\n$.list = args => {\n const sep = args.separator || ',';\n return toPrompt('TextPrompt', args, {\n onSubmit: str => str.split(sep).map(s => s.trim())\n });\n};\n\n/**\n * Toggle/switch prompt\n * @param {string} args.message Prompt message to display\n * @param {boolean} [args.initial=false] Default value\n * @param {string} [args.active=\"on\"] Text for `active` state\n * @param {string} [args.inactive=\"off\"] Text for `inactive` state\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.toggle = args => toPrompt('TogglePrompt', args);\n\n/**\n * Interactive select prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value }, ...]`\n * @param {number} [args.initial] Index of default value\n * @param {String} [args.hint] Hint to display\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.select = args => toPrompt('SelectPrompt', args);\n\n/**\n * Interactive multi-select / autocompleteMultiselect prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of choices objects `[{ title, value, [selected] }, ...]`\n * @param {number} [args.max] Max select\n * @param {string} [args.hint] Hint to display user\n * @param {Number} [args.cursor=0] Cursor start position\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.multiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('MultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\n$.autocompleteMultiselect = args => {\n args.choices = [].concat(args.choices || []);\n const toSelected = items => items.filter(item => item.selected).map(item => item.value);\n return toPrompt('AutocompleteMultiselectPrompt', args, {\n onAbort: toSelected,\n onSubmit: toSelected\n });\n};\n\nconst byTitle = (input, choices) => Promise.resolve(\n choices.filter(item => item.title.slice(0, input.length).toLowerCase() === input.toLowerCase())\n);\n\n/**\n * Interactive auto-complete prompt\n * @param {string} args.message Prompt message to display\n * @param {Array} args.choices Array of auto-complete choices objects `[{ title, value }, ...]`\n * @param {Function} [args.suggest] Function to filter results based on user input. Defaults to sort by `title`\n * @param {number} [args.limit=10] Max number of results to show\n * @param {string} [args.style=\"default\"] Render style ('default', 'password', 'invisible')\n * @param {String} [args.initial] Index of the default value\n * @param {boolean} [opts.clearFirst] The first ESCAPE keypress will clear the input\n * @param {String} [args.fallback] Fallback message - defaults to initial value\n * @param {function} [args.onState] On state change callback\n * @param {Stream} [args.stdin] The Readable stream to listen to\n * @param {Stream} [args.stdout] The Writable stream to write readline data to\n * @returns {Promise} Promise with user input\n */\n$.autocomplete = args => {\n args.suggest = args.suggest || byTitle;\n args.choices = [].concat(args.choices || []);\n return toPrompt('AutocompletePrompt', args);\n};\n","'use strict';\n\nconst prompts = require('./prompts');\n\nconst passOn = ['suggest', 'format', 'onState', 'validate', 'onRender', 'type'];\nconst noop = () => {};\n\n/**\n * Prompt for a series of questions\n * @param {Array|Object} questions Single question object or Array of question objects\n * @param {Function} [onSubmit] Callback function called on prompt submit\n * @param {Function} [onCancel] Callback function called on cancel/abort\n * @returns {Object} Object with values from user input\n */\nasync function prompt(questions=[], { onSubmit=noop, onCancel=noop }={}) {\n const answers = {};\n const override = prompt._override || {};\n questions = [].concat(questions);\n let answer, question, quit, name, type, lastPrompt;\n\n const getFormattedAnswer = async (question, answer, skipValidation = false) => {\n if (!skipValidation && question.validate && question.validate(answer) !== true) {\n return;\n }\n return question.format ? await question.format(answer, answers) : answer\n };\n\n for (question of questions) {\n ({ name, type } = question);\n\n // evaluate type first and skip if type is a falsy value\n if (typeof type === 'function') {\n type = await type(answer, { ...answers }, question)\n question['type'] = type\n }\n if (!type) continue;\n\n // if property is a function, invoke it unless it's a special function\n for (let key in question) {\n if (passOn.includes(key)) continue;\n let value = question[key];\n question[key] = typeof value === 'function' ? await value(answer, { ...answers }, lastPrompt) : value;\n }\n\n lastPrompt = question;\n\n if (typeof question.message !== 'string') {\n throw new Error('prompt message is required');\n }\n\n // update vars in case they changed\n ({ name, type } = question);\n\n if (prompts[type] === void 0) {\n throw new Error(`prompt type (${type}) is not defined`);\n }\n\n if (override[question.name] !== undefined) {\n answer = await getFormattedAnswer(question, override[question.name]);\n if (answer !== undefined) {\n answers[name] = answer;\n continue;\n }\n }\n\n try {\n // Get the injected answer if there is one or prompt the user\n answer = prompt._injected ? getInjectedAnswer(prompt._injected, question.initial) : await prompts[type](question);\n answers[name] = answer = await getFormattedAnswer(question, answer, true);\n quit = await onSubmit(question, answer, answers);\n } catch (err) {\n quit = !(await onCancel(question, answers));\n }\n\n if (quit) return answers;\n }\n\n return answers;\n}\n\nfunction getInjectedAnswer(injected, deafultValue) {\n const answer = injected.shift();\n if (answer instanceof Error) {\n throw answer;\n }\n\n return (answer === undefined) ? deafultValue : answer;\n}\n\nfunction inject(answers) {\n prompt._injected = (prompt._injected || []).concat(answers);\n}\n\nfunction override(answers) {\n prompt._override = Object.assign({}, answers);\n}\n\nmodule.exports = Object.assign(prompt, { prompt, prompts, inject, override });\n","function isNodeLT(tar) {\n tar = (Array.isArray(tar) ? tar : tar.split('.')).map(Number);\n let i=0, src=process.versions.node.split('.').map(Number);\n for (; i < tar.length; i++) {\n if (src[i] > tar[i]) return false;\n if (tar[i] > src[i]) return true;\n }\n return false;\n}\n\nmodule.exports =\n isNodeLT('8.6.0')\n ? require('./dist/index.js')\n : require('./lib/index.js');\n","#!/usr/bin/env node\nimport { existsSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\nimport { Command } from \"commander\";\nimport prompts from \"prompts\";\nimport { executeBatch, getBatchExitCode } from \"./batch-executor\";\nimport { CliOptionsError } from \"./errors\";\nimport { OpenApiGenerator } from \"./openapi-generator\";\nimport type { ExecutionMode } from \"./types\";\nimport { loadConfig, mergeConfigWithDefaults } from \"./utils/config-loader\";\n\nconst program = new Command();\n\nprogram\n\t.name(\"openapi-to-zod\")\n\t.description(\"Generate Zod v4 schemas from OpenAPI specifications\")\n\t.version(\"1.0.0\")\n\t.option(\"-c, --config <path>\", \"Path to config file (openapi-to-zod.config.{ts,json})\")\n\t.addHelpText(\n\t\t\"after\",\n\t\t`\nExamples:\n # Create a new config file\n $ openapi-to-zod init\n\n # Generate with auto-discovered config\n $ openapi-to-zod\n\n # Generate with custom config path\n $ openapi-to-zod --config custom.config.ts\n`\n\t)\n\t.action(async options => {\n\t\ttry {\n\t\t\tawait executeConfigMode(options);\n\t\t} catch (error) {\n\t\t\tif (error instanceof CliOptionsError) {\n\t\t\t\tconsole.error(error.message);\n\t\t\t\tprocess.exit(1);\n\t\t\t}\n\t\t\tconsole.error(\"Error:\", error instanceof Error ? error.message : String(error));\n\t\t\tif (error instanceof Error && error.stack) {\n\t\t\t\tconsole.error(\"\\nStack trace:\", error.stack);\n\t\t\t}\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\n// Add init command\nprogram\n\t.command(\"init\")\n\t.description(\"Initialize a new openapi-to-zod configuration file\")\n\t.action(async () => {\n\t\ttry {\n\t\t\tawait initConfigFile();\n\t\t} catch (error) {\n\t\t\tconsole.error(\"Error:\", error instanceof Error ? error.message : String(error));\n\t\t\tprocess.exit(1);\n\t\t}\n\t});\n\nprogram.parse();\n\n/**\n * Find OpenAPI spec files in spec/ or specs/ folders\n * @returns Object with files (path + size) and totalCount\n */\nfunction findSpecFiles(): { files: Array<{ path: string; size: string }>; totalCount: number } {\n\tconst specFolders = [\"spec\", \"specs\"];\n\tconst validExtensions = [\".yaml\", \".yml\", \".json\"];\n\tconst excludePatterns = [\"node_modules\", \".git\", \"dist\", \"build\", \"coverage\"];\n\tconst allFiles: Array<{ path: string; size: string }> = [];\n\n\tfor (const folder of specFolders) {\n\t\tif (!existsSync(folder)) continue;\n\n\t\ttry {\n\t\t\tconst entries = readdirSync(folder, { recursive: true, encoding: \"utf-8\" });\n\n\t\t\tfor (const entry of entries) {\n\t\t\t\tconst fullPath = join(folder, entry as string);\n\n\t\t\t\t// Skip if path contains excluded patterns\n\t\t\t\tif (excludePatterns.some(pattern => fullPath.includes(pattern))) continue;\n\n\t\t\t\ttry {\n\t\t\t\t\tconst stats = statSync(fullPath);\n\t\t\t\t\tif (!stats.isFile()) continue;\n\n\t\t\t\t\t// Check if file has valid extension\n\t\t\t\t\tconst hasValidExt = validExtensions.some(ext => fullPath.endsWith(ext));\n\t\t\t\t\tif (!hasValidExt) continue;\n\n\t\t\t\t\t// Format file size\n\t\t\t\t\tconst sizeKB = (stats.size / 1024).toFixed(2);\n\t\t\t\t\tallFiles.push({ path: fullPath.replace(/\\\\/g, \"/\"), size: `${sizeKB} KB` });\n\t\t\t\t} catch {}\n\t\t\t}\n\t\t} catch {}\n\t}\n\n\t// Sort alphabetically\n\tallFiles.sort((a, b) => a.path.localeCompare(b.path));\n\n\tconst totalCount = allFiles.length;\n\tconst files = allFiles.slice(0, 20);\n\n\treturn { files, totalCount };\n}\n\n/**\n * Execute config mode (only mode available)\n */\nasync function executeConfigMode(options: { config?: string }): Promise<void> {\n\t// Load config file\n\tconst config = await loadConfig(options.config);\n\n\t// Merge defaults with specs\n\tconst specs = mergeConfigWithDefaults(config);\n\n\t// Determine execution mode\n\tconst executionMode: ExecutionMode = config.executionMode || \"parallel\";\n\n\t// Extract batchSize from first spec's options or use default\n\tconst batchSize = specs[0]?.batchSize ?? 10;\n\n\t// Execute batch with generator factory\n\tconst summary = await executeBatch(specs, executionMode, spec => new OpenApiGenerator(spec), batchSize);\n\n\t// Exit with appropriate code\n\tconst exitCode = getBatchExitCode(summary);\n\tif (exitCode !== 0) {\n\t\tprocess.exit(exitCode);\n\t}\n} /**\n * Initialize a new config file with prompts\n */\nasync function initConfigFile(): Promise<void> {\n\tconsole.log(\"Welcome to openapi-to-zod configuration setup!\\n\");\n\n\t// Check for existing config files\n\tconst configFiles = [\"openapi-to-zod.config.ts\", \"openapi-to-zod.config.json\"];\n\n\tconst existingConfig = configFiles.find(f => existsSync(f));\n\tif (existingConfig) {\n\t\tconst { overwrite } = await prompts({\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"overwrite\",\n\t\t\tmessage: `Config file '${existingConfig}' already exists. Overwrite?`,\n\t\t\tinitial: false,\n\t\t});\n\n\t\tif (!overwrite) {\n\t\t\tconsole.log(\"Initialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Discover spec files\n\tconst { files, totalCount } = findSpecFiles();\n\n\t// Show pagination message if needed\n\tif (totalCount > 20) {\n\t\tconsole.log(`Showing first 20 of ${totalCount} files found. Use manual entry to specify others.\\n`);\n\t}\n\n\tlet inputPath: string;\n\n\tif (files.length > 0) {\n\t\t// Show file selection\n\t\tconst choices = [\n\t\t\t...files.map(f => ({ title: `${f.path} (${f.size})`, value: f.path })),\n\t\t\t{ title: \"→ Enter manually...\", value: \"__MANUAL__\" },\n\t\t];\n\n\t\tconst inputResponse = await prompts({\n\t\t\ttype: \"select\",\n\t\t\tname: \"input\",\n\t\t\tmessage: \"Select OpenAPI spec file (YAML or JSON):\",\n\t\t\tchoices,\n\t\t});\n\n\t\tif (!inputResponse.input) {\n\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\n\t\tif (inputResponse.input === \"__MANUAL__\") {\n\t\t\t// Manual entry\n\t\t\tconst manualResponse = await prompts({\n\t\t\t\ttype: \"text\",\n\t\t\t\tname: \"input\",\n\t\t\t\tmessage: \"Input OpenAPI file path (YAML or JSON):\",\n\t\t\t\tinitial: \"openapi.{yaml,yml,json}\",\n\t\t\t\tvalidate: value => {\n\t\t\t\t\tif (value.length === 0) return \"Input path is required\";\n\t\t\t\t\tif (!existsSync(value)) return \"⚠️ File does not exist. Continue anyway?\";\n\t\t\t\t\treturn true;\n\t\t\t\t},\n\t\t\t});\n\n\t\t\tif (!manualResponse.input) {\n\t\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tinputPath = manualResponse.input;\n\t\t} else {\n\t\t\tinputPath = inputResponse.input;\n\t\t}\n\t} else {\n\t\t// No files found, fall back to text input\n\t\tconst manualResponse = await prompts({\n\t\t\ttype: \"text\",\n\t\t\tname: \"input\",\n\t\t\tmessage: \"Input OpenAPI file path (YAML or JSON):\",\n\t\t\tinitial: \"openapi.{yaml,yml,json}\",\n\t\t\tvalidate: value => {\n\t\t\t\tif (value.length === 0) return \"Input path is required\";\n\t\t\t\tif (!existsSync(value)) return \"⚠️ File does not exist. Continue anyway?\";\n\t\t\t\treturn true;\n\t\t\t},\n\t\t});\n\n\t\tif (!manualResponse.input) {\n\t\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\t\treturn;\n\t\t}\n\n\t\tinputPath = manualResponse.input;\n\t}\n\n\tconst response = await prompts([\n\t\t{\n\t\t\ttype: \"text\",\n\t\t\tname: \"output\",\n\t\t\tmessage: \"Output TypeScript file path:\",\n\t\t\tinitial: \"src/schemas.ts\",\n\t\t\tvalidate: value => value.length > 0 || \"Output path is required\",\n\t\t},\n\t\t{\n\t\t\ttype: \"select\",\n\t\t\tname: \"format\",\n\t\t\tmessage: \"Config file format:\",\n\t\t\tchoices: [\n\t\t\t\t{ title: \"TypeScript (recommended)\", value: \"ts\" },\n\t\t\t\t{ title: \"JSON\", value: \"json\" },\n\t\t\t],\n\t\t\tinitial: 0,\n\t\t},\n\t\t{\n\t\t\ttype: \"confirm\",\n\t\t\tname: \"includeDefaults\",\n\t\t\tmessage: \"Include commonly-used recommended defaults?\",\n\t\t\tinitial: true,\n\t\t},\n\t]);\n\n\t// Handle user cancellation (Ctrl+C)\n\tif (!response.output || !response.format) {\n\t\tconsole.log(\"\\nInitialization cancelled.\");\n\t\treturn;\n\t}\n\n\tconst { output, format, includeDefaults } = response;\n\tconst input = inputPath;\n\n\t// Generate config content\n\tlet configContent: string;\n\tlet configFilename: string;\n\n\tif (format === \"ts\") {\n\t\tconfigFilename = \"openapi-to-zod.config.ts\";\n\t\tif (includeDefaults) {\n\t\t\tconfigContent = `import { defineConfig } from '@cerios/openapi-to-zod';\n\nexport default defineConfig({\n defaults: {\n mode: 'strict',\n includeDescriptions: true,\n\tuseDescribe: false,\n showStats: true,\n\tschemaType: 'all',\n },\n specs: [\n {\n input: '${input}',\n output: '${output}',\n },\n ],\n});\n`;\n\t\t} else {\n\t\t\tconfigContent = `import { defineConfig } from '@cerios/openapi-to-zod';\n\nexport default defineConfig({\n specs: [\n {\n input: '${input}',\n output: '${output}',\n },\n ],\n});\n`;\n\t\t}\n\t} else {\n\t\tconfigFilename = \"openapi-to-zod.config.json\";\n\t\tconst jsonConfig: any = {\n\t\t\tspecs: [\n\t\t\t\t{\n\t\t\t\t\tinput,\n\t\t\t\t\toutput,\n\t\t\t\t},\n\t\t\t],\n\t\t};\n\n\t\tif (includeDefaults) {\n\t\t\tjsonConfig.defaults = {\n\t\t\t\tmode: \"strict\",\n\t\t\t\tincludeDescriptions: true,\n\t\t\t\tshowStats: false,\n\t\t\t};\n\t\t}\n\n\t\tconfigContent = `${JSON.stringify(jsonConfig, null, 2)}\\n`;\n\t}\n\n\t// Write config file\n\twriteFileSync(configFilename, configContent, \"utf-8\");\n\n\tconsole.log(`\\n✓ Created ${configFilename}`);\n\tconsole.log(\"\\nNext steps:\");\n\tconsole.log(\" 1. Review and customize your config file if needed\");\n\tconsole.log(\" 2. Run 'openapi-to-zod' to generate schemas\\n\");\n\n\t// Random fun messages\n\tconst ceriosMessages = [\n\t\t\"Things just got Cerios!\",\n\t\t\"Getting Cerios about schemas!\",\n\t\t\"Cerios business ahead!\",\n\t\t\"Don't take it too Cerios-ly!\",\n\t\t\"Time to get Cerios!\",\n\t\t\"We're dead Cerios about types!\",\n\t\t\"This is Cerios-ly awesome!\",\n\t\t\"Cerios-ly, you're all set!\",\n\t\t\"You are Cerios right now!\",\n\t\t\"Cerios vibes only!\",\n\t];\n\tconst randomMessage = ceriosMessages[Math.floor(Math.random() * ceriosMessages.length)];\n\tconsole.log(`${randomMessage}\\n`);\n}\n","import { ConfigurationError } from \"./errors\";\nimport type { ExecutionMode } from \"./types\";\n\n/**\n * @shared Generator interface for batch execution\n * @since 1.0.0\n * Interface that both OpenApiGenerator and OpenApiPlaywrightGenerator must implement\n */\nexport interface Generator {\n\tgenerate(): void;\n}\n\n/**\n * Result of processing a single spec\n */\ninterface SpecResult<T> {\n\tspec: T;\n\tsuccess: boolean;\n\terror?: string;\n}\n\n/**\n * Summary of batch execution results\n */\ninterface BatchExecutionSummary<T> {\n\ttotal: number;\n\tsuccessful: number;\n\tfailed: number;\n\tresults: SpecResult<T>[];\n}\n\n/**\n * Process a single spec and return result with error handling\n */\nasync function processSpec<T>(\n\tspec: T,\n\tindex: number,\n\ttotal: number,\n\tcreateGenerator: (spec: T) => Generator\n): Promise<SpecResult<T>> {\n\t// Live progress to stdout\n\tconst specInput = (spec as any).input || \"spec\";\n\tconst specOutput = (spec as any).output || \"output\";\n\tconsole.log(`Processing [${index + 1}/${total}] ${specInput}...`);\n\n\ttry {\n\t\tconst generator = createGenerator(spec);\n\t\tgenerator.generate();\n\n\t\treturn {\n\t\t\tspec,\n\t\t\tsuccess: true,\n\t\t};\n\t} catch (error) {\n\t\tconst errorMessage = error instanceof Error ? error.message : String(error);\n\t\tconsole.error(`✗ Failed to generate ${specOutput}: ${errorMessage}`);\n\n\t\treturn {\n\t\t\tspec,\n\t\t\tsuccess: false,\n\t\t\terror: errorMessage,\n\t\t};\n\t}\n}\n\n/**\n * Execute specs in parallel using Promise.allSettled with configurable batch size\n * Processes specifications in batches to control memory usage and concurrency\n * Continues processing all specs even if some fail\n */\nasync function executeParallel<T>(\n\tspecs: T[],\n\tcreateGenerator: (spec: T) => Generator,\n\tbatchSize: number\n): Promise<SpecResult<T>[]> {\n\tconsole.log(`\\nExecuting ${specs.length} specification(s) in parallel (batch size: ${batchSize})...\\n`);\n\n\tconst results: SpecResult<T>[] = [];\n\n\t// Process in batches to control memory usage\n\tfor (let i = 0; i < specs.length; i += batchSize) {\n\t\tconst batch = specs.slice(i, Math.min(i + batchSize, specs.length));\n\t\tconst batchPromises = batch.map((spec, batchIndex) =>\n\t\t\tprocessSpec(spec, i + batchIndex, specs.length, createGenerator)\n\t\t);\n\n\t\tconst batchResults = await Promise.allSettled(batchPromises);\n\n\t\t// Convert settled results to SpecResult\n\t\tfor (let j = 0; j < batchResults.length; j++) {\n\t\t\tconst result = batchResults[j];\n\t\t\tif (result.status === \"fulfilled\") {\n\t\t\t\tresults.push(result.value);\n\t\t\t} else {\n\t\t\t\t// Handle unexpected promise rejection\n\t\t\t\tresults.push({\n\t\t\t\t\tspec: batch[j],\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: result.reason instanceof Error ? result.reason.message : String(result.reason),\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn results;\n}\n\n/**\n * Execute specs sequentially one at a time\n * Continues processing all specs even if some fail\n */\nasync function executeSequential<T>(specs: T[], createGenerator: (spec: T) => Generator): Promise<SpecResult<T>[]> {\n\tconsole.log(`\\nExecuting ${specs.length} spec(s) sequentially...\\n`);\n\n\tconst results: SpecResult<T>[] = [];\n\n\tfor (let i = 0; i < specs.length; i++) {\n\t\tconst result = await processSpec(specs[i], i, specs.length, createGenerator);\n\t\tresults.push(result);\n\t}\n\n\treturn results;\n}\n\n/**\n * Print final summary of batch execution\n */\nfunction printSummary<T>(summary: BatchExecutionSummary<T>): void {\n\tconsole.log(`\\n${\"=\".repeat(50)}`);\n\tconsole.log(\"Batch Execution Summary\");\n\tconsole.log(\"=\".repeat(50));\n\tconsole.log(`Total specs: ${summary.total}`);\n\tconsole.log(`Successful: ${summary.successful}`);\n\tconsole.log(`Failed: ${summary.failed}`);\n\n\tif (summary.failed > 0) {\n\t\tconsole.log(\"\\nFailed specs:\");\n\t\tfor (const result of summary.results) {\n\t\t\tif (!result.success) {\n\t\t\t\tconst specInput = (result.spec as any).input || \"spec\";\n\t\t\t\tconsole.error(` ✗ ${specInput}`);\n\t\t\t\tconsole.error(` Error: ${result.error}`);\n\t\t\t}\n\t\t}\n\t}\n\n\tconsole.log(`${\"=\".repeat(50)}\\n`);\n}\n\n/**\n * @shared Execute batch processing of multiple specs with custom generator\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * @param specs - Array of spec configurations to process\n * @param executionMode - Execution mode: \"parallel\" (default) or \"sequential\"\n * @param createGenerator - Factory function to create generator from spec\n * @param batchSize - Number of specifications to process concurrently in parallel mode\n * @returns BatchExecutionSummary with results\n * @throws Never throws - collects all errors and reports them\n */\nexport async function executeBatch<T>(\n\tspecs: T[],\n\texecutionMode: ExecutionMode = \"parallel\",\n\tcreateGenerator: (spec: T) => Generator,\n\tbatchSize: number\n): Promise<BatchExecutionSummary<T>> {\n\tif (specs.length === 0) {\n\t\tthrow new ConfigurationError(\"No specs provided for batch execution\", { specsCount: 0, executionMode });\n\t}\n\n\tlet results: SpecResult<T>[] = [];\n\n\ttry {\n\t\t// Execute based on mode\n\t\tresults =\n\t\t\texecutionMode === \"parallel\"\n\t\t\t\t? await executeParallel(specs, createGenerator, batchSize)\n\t\t\t\t: await executeSequential(specs, createGenerator);\n\n\t\t// Calculate summary\n\t\tconst summary: BatchExecutionSummary<T> = {\n\t\t\ttotal: results.length,\n\t\t\tsuccessful: results.filter(r => r.success).length,\n\t\t\tfailed: results.filter(r => !r.success).length,\n\t\t\tresults,\n\t\t};\n\n\t\t// Print summary\n\t\tprintSummary(summary);\n\n\t\treturn summary;\n\t} finally {\n\t\t// Memory leak prevention: Clear large result objects and hint GC for large batches\n\t\tif (results.length > batchSize) {\n\t\t\t// Clear spec references to allow GC\n\t\t\tfor (const result of results) {\n\t\t\t\t// Keep only essential info, clear large objects\n\t\t\t\tif (result.spec) {\n\t\t\t\t\t(result.spec as any) = null;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Hint to V8 garbage collector for large batches (if available)\n\t\t\tif (global.gc) {\n\t\t\t\tglobal.gc();\n\t\t\t}\n\t\t}\n\t}\n}\n\n/**\n * Determine exit code based on batch execution results\n * Returns 1 if any spec failed, 0 if all succeeded\n */\nexport function getBatchExitCode<T>(summary: BatchExecutionSummary<T>): number {\n\treturn summary.failed > 0 ? 1 : 0;\n}\n","/**\n * Custom error classes for better error handling and debugging\n */\n\n/**\n * Base error class for all generator errors\n */\nexport class GeneratorError extends Error {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly code: string,\n\t\tpublic readonly context?: Record<string, unknown>\n\t) {\n\t\tsuper(message);\n\t\tthis.name = \"GeneratorError\";\n\t\tError.captureStackTrace?.(this, this.constructor);\n\t}\n}\n\n/**\n * Error thrown when OpenAPI spec validation fails\n */\nexport class SpecValidationError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"SPEC_VALIDATION_ERROR\", context);\n\t\tthis.name = \"SpecValidationError\";\n\t}\n}\n\n/**\n * Error thrown when file operations fail\n */\nexport class FileOperationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly filePath: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"FILE_OPERATION_ERROR\", { ...context, filePath });\n\t\tthis.name = \"FileOperationError\";\n\t}\n}\n\n/**\n * Error thrown when config file is invalid\n */\nexport class ConfigValidationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly configPath?: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"CONFIG_VALIDATION_ERROR\", { ...context, configPath });\n\t\tthis.name = \"ConfigValidationError\";\n\t}\n}\n\n/**\n * Error thrown when schema generation fails\n */\nexport class SchemaGenerationError extends GeneratorError {\n\tconstructor(\n\t\tmessage: string,\n\t\tpublic readonly schemaName: string,\n\t\tcontext?: Record<string, unknown>\n\t) {\n\t\tsuper(message, \"SCHEMA_GENERATION_ERROR\", { ...context, schemaName });\n\t\tthis.name = \"SchemaGenerationError\";\n\t}\n}\n\n/**\n * Error thrown when circular reference is detected in schema\n */\nexport class CircularReferenceError extends SchemaGenerationError {\n\tconstructor(\n\t\tschemaName: string,\n\t\tpublic readonly referencePath: string[]\n\t) {\n\t\tconst pathStr = referencePath.join(\" -> \");\n\t\tsuper(`Circular reference detected in schema: ${pathStr}`, schemaName, { referencePath, circularPath: pathStr });\n\t\tthis.name = \"CircularReferenceError\";\n\t}\n}\n\n/**\n * Error thrown when CLI options are invalid\n */\nexport class CliOptionsError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"CLI_OPTIONS_ERROR\", context);\n\t\tthis.name = \"CliOptionsError\";\n\t}\n}\n\n/**\n * Error thrown when configuration is invalid or missing required values\n */\nexport class ConfigurationError extends GeneratorError {\n\tconstructor(message: string, context?: Record<string, unknown>) {\n\t\tsuper(message, \"CONFIGURATION_ERROR\", context);\n\t\tthis.name = \"ConfigurationError\";\n\t}\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, normalize } from \"node:path\";\nimport { minimatch } from \"minimatch\";\nimport { parse } from \"yaml\";\nimport { ConfigurationError, FileOperationError, SchemaGenerationError, SpecValidationError } from \"./errors\";\nimport { generateEnum } from \"./generators/enum-generator\";\nimport { generateJSDoc } from \"./generators/jsdoc-generator\";\nimport { PropertyGenerator } from \"./generators/property-generator\";\nimport type { OpenAPISchema, OpenAPISpec, OpenApiGeneratorOptions, ResolvedOptions } from \"./types\";\nimport { resolveRef, toCamelCase, toPascalCase } from \"./utils/name-utils\";\nimport {\n\tcreateFilterStatistics,\n\ttype FilterStatistics,\n\tformatFilterStatistics,\n\tshouldIncludeOperation,\n\tvalidateFilters,\n} from \"./utils/operation-filters\";\nimport { stripPathPrefix, stripPrefix } from \"./utils/pattern-utils\";\nimport { mergeParameters } from \"./utils/ref-resolver\";\nimport { configureDateTimeFormat, configurePatternCache } from \"./validators/string-validator\";\n\ntype SchemaContext = \"request\" | \"response\" | \"both\";\n\nexport class OpenApiGenerator {\n\tprivate schemas: Map<string, string> = new Map();\n\tprivate types: Map<string, string> = new Map();\n\tprivate schemaDependencies: Map<string, Set<string>> = new Map();\n\tprivate options: OpenApiGeneratorOptions;\n\tprivate spec: OpenAPISpec;\n\tprivate propertyGenerator: PropertyGenerator;\n\tprivate schemaUsageMap: Map<string, SchemaContext> = new Map();\n\tprivate requestOptions: ResolvedOptions;\n\tprivate responseOptions: ResolvedOptions;\n\tprivate needsZodImport = true;\n\tprivate filterStats: FilterStatistics = createFilterStatistics();\n\n\tconstructor(options: OpenApiGeneratorOptions) {\n\t\t// Validate input path early\n\t\tif (!options.input) {\n\t\t\tthrow new ConfigurationError(\"Input path is required\", { providedOptions: options });\n\t\t}\n\n\t\tthis.options = {\n\t\t\tmode: options.mode || \"normal\",\n\t\t\tinput: options.input,\n\t\t\toutput: options.output,\n\t\t\tincludeDescriptions: options.includeDescriptions ?? true,\n\t\t\tuseDescribe: options.useDescribe ?? false,\n\t\t\tdefaultNullable: options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: options.emptyObjectBehavior ?? \"loose\",\n\t\t\tschemaType: options.schemaType || \"all\",\n\t\t\tprefix: options.prefix,\n\t\t\tsuffix: options.suffix,\n\t\t\tstripSchemaPrefix: options.stripSchemaPrefix,\n\t\t\tstripPathPrefix: options.stripPathPrefix,\n\t\t\tshowStats: options.showStats ?? true,\n\t\t\trequest: options.request,\n\t\t\tresponse: options.response,\n\t\t\toperationFilters: options.operationFilters,\n\t\t\tignoreHeaders: options.ignoreHeaders,\n\t\t\tcacheSize: options.cacheSize ?? 1000,\n\t\t\tbatchSize: options.batchSize ?? 10,\n\t\t\tcustomDateTimeFormatRegex: options.customDateTimeFormatRegex,\n\t\t};\n\n\t\t// Configure pattern cache size if specified\n\t\tif (this.options.cacheSize) {\n\t\t\tconfigurePatternCache(this.options.cacheSize);\n\t\t}\n\n\t\t// Configure custom date-time format if specified\n\t\tif (this.options.customDateTimeFormatRegex) {\n\t\t\tconfigureDateTimeFormat(this.options.customDateTimeFormatRegex);\n\t\t}\n\n\t\t// Validate input file exists\n\t\ttry {\n\t\t\tconst fs = require(\"node:fs\");\n\t\t\tif (!fs.existsSync(this.options.input)) {\n\t\t\t\tthrow new FileOperationError(`Input file not found: ${this.options.input}`, this.options.input);\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof FileOperationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\t// If fs.existsSync fails for another reason, continue and let readFileSync throw\n\t\t}\n\n\t\ttry {\n\t\t\tconst content = readFileSync(this.options.input, \"utf-8\");\n\n\t\t\t// Try parsing as YAML first (works for both YAML and JSON)\n\t\t\ttry {\n\t\t\t\tthis.spec = parse(content);\n\t\t\t} catch (yamlError) {\n\t\t\t\t// If YAML parsing fails, try JSON\n\t\t\t\ttry {\n\t\t\t\t\tthis.spec = JSON.parse(content);\n\t\t\t\t} catch {\n\t\t\t\t\tif (yamlError instanceof Error) {\n\t\t\t\t\t\tconst errorMessage = [\n\t\t\t\t\t\t\t`Failed to parse OpenAPI specification from: ${this.options.input}`,\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t`Error: ${yamlError.message}`,\n\t\t\t\t\t\t\t\"\",\n\t\t\t\t\t\t\t\"Please ensure:\",\n\t\t\t\t\t\t\t\" - The file exists and is readable\",\n\t\t\t\t\t\t\t\" - The file contains valid YAML or JSON syntax\",\n\t\t\t\t\t\t\t\" - The file is a valid OpenAPI 3.x specification\",\n\t\t\t\t\t\t].join(\"\\n\");\n\t\t\t\t\t\tthrow new SpecValidationError(errorMessage, {\n\t\t\t\t\t\t\tfilePath: this.options.input,\n\t\t\t\t\t\t\toriginalError: yamlError.message,\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t\tthrow yamlError;\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (error instanceof SpecValidationError) {\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t\tif (error instanceof Error) {\n\t\t\t\tconst errorMessage = [\n\t\t\t\t\t`Failed to read OpenAPI specification from: ${this.options.input}`,\n\t\t\t\t\t\"\",\n\t\t\t\t\t`Error: ${error.message}`,\n\t\t\t\t].join(\"\\n\");\n\t\t\t\tthrow new SpecValidationError(errorMessage, { filePath: this.options.input, originalError: error.message });\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\n\t\tthis.validateSpec();\n\n\t\t// Resolve options for request and response contexts\n\t\tthis.requestOptions = this.resolveOptionsForContext(\"request\");\n\t\tthis.responseOptions = this.resolveOptionsForContext(\"response\");\n\n\t\t// Analyze schema usage to determine context (request/response/both)\n\t\tthis.analyzeSchemaUsage();\n\n\t\t// Initialize property generator with context\n\t\t// We'll update this dynamically based on schema context during generation\n\t\tthis.propertyGenerator = new PropertyGenerator({\n\t\t\tspec: this.spec,\n\t\t\tschemaDependencies: this.schemaDependencies,\n\t\t\tschemaType: this.options.schemaType || \"all\",\n\t\t\tmode: this.requestOptions.mode,\n\t\t\tincludeDescriptions: this.requestOptions.includeDescriptions,\n\t\t\tuseDescribe: this.requestOptions.useDescribe,\n\t\t\tdefaultNullable: this.options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: this.options.emptyObjectBehavior ?? \"loose\",\n\t\t\tnamingOptions: {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t},\n\t\t\tstripSchemaPrefix: this.options.stripSchemaPrefix,\n\t\t});\n\t}\n\n\t/**\n\t * Generate schemas as a string (without writing to file)\n\t * @returns The generated TypeScript code as a string\n\t */\n\tgenerateString(): string {\n\t\tif (!this.spec.components?.schemas) {\n\t\t\tthrow new SpecValidationError(\"No schemas found in OpenAPI spec\", { filePath: this.options.input });\n\t\t}\n\n\t\t// Generate schemas and track dependencies\n\t\tfor (const [name, schema] of Object.entries(this.spec.components.schemas)) {\n\t\t\t// Skip schemas not referenced by filtered operations when operation filters are active\n\t\t\tif (this.options.operationFilters && this.schemaUsageMap.size > 0 && !this.schemaUsageMap.has(name)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tthis.generateComponentSchema(name, schema);\n\t\t}\n\n\t\t// Generate query parameter schemas from path operations\n\t\tthis.generateQueryParameterSchemas();\n\n\t\t// Generate header parameter schemas from path operations\n\t\tthis.generateHeaderParameterSchemas();\n\n\t\t// Validate filters and emit warnings if needed\n\t\tvalidateFilters(this.filterStats, this.options.operationFilters);\n\n\t\t// Sort schemas by dependencies\n\t\tconst orderedSchemaNames = this.topologicalSort();\n\n\t\t// Build output\n\t\tconst output: string[] = [\"// Auto-generated by @cerios/openapi-to-zod\", \"// Do not edit this file manually\", \"\"];\n\n\t\t// Add statistics if enabled (must be explicitly true)\n\t\tif (this.options.showStats === true) {\n\t\t\toutput.push(...this.generateStats());\n\t\t\toutput.push(\"\");\n\t\t}\n\n\t\t// Conditionally import Zod only if needed\n\t\tif (this.needsZodImport) {\n\t\t\toutput.push('import { z } from \"zod\";');\n\t\t\toutput.push(\"\");\n\t\t}\n\n\t\t// Add schemas and types in dependency order\n\t\toutput.push(\"// Schemas and Types\");\n\t\tfor (const name of orderedSchemaNames) {\n\t\t\tconst schemaCode = this.schemas.get(name);\n\t\t\tconst typeCode = this.types.get(name);\n\n\t\t\tif (schemaCode) {\n\t\t\t\t// Zod schema with inferred type\n\t\t\t\toutput.push(schemaCode);\n\n\t\t\t\t// Add type immediately after schema (if not already included)\n\t\t\t\t// Convert schema name to valid TypeScript type name (handles dotted names)\n\t\t\t\t// Apply stripSchemaPrefix before type name generation\n\t\t\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\t\t\t\tconst typeName = toPascalCase(strippedName);\n\t\t\t\tif (!schemaCode.includes(`export type ${typeName}`)) {\n\t\t\t\t\tconst schemaName = `${toCamelCase(strippedName, { prefix: this.options.prefix, suffix: this.options.suffix })}Schema`;\n\t\t\t\t\toutput.push(`export type ${typeName} = z.infer<typeof ${schemaName}>;`);\n\t\t\t\t}\n\t\t\t\toutput.push(\"\");\n\t\t\t} else if (typeCode) {\n\t\t\t\t// Type only (shouldn't happen in Zod-only mode, but kept for safety)\n\t\t\t\toutput.push(typeCode);\n\t\t\t\toutput.push(\"\");\n\t\t\t}\n\t\t}\n\t\treturn output.join(\"\\n\");\n\t}\n\n\t/**\n\t * Ensure directory exists for a file path\n\t */\n\tprivate ensureDirectoryExists(filePath: string): void {\n\t\tconst normalizedPath = normalize(filePath);\n\t\tconst dir = dirname(normalizedPath);\n\t\tif (!existsSync(dir)) {\n\t\t\tmkdirSync(dir, { recursive: true });\n\t\t}\n\t}\n\n\t/**\n\t * Generate the complete output file\n\t */\n\tgenerate(): void {\n\t\tconst output = this.generateString();\n\t\tconst normalizedOutput = normalize(this.options.output);\n\t\tthis.ensureDirectoryExists(normalizedOutput);\n\t\twriteFileSync(normalizedOutput, output);\n\t\tconsole.log(` ✓ Generated ${normalizedOutput}`);\n\t}\n\n\t/**\n\t * Resolve options for a specific context (request or response)\n\t * Nested options silently override root-level options\n\t */\n\tprivate resolveOptionsForContext(context: \"request\" | \"response\"): ResolvedOptions {\n\t\tconst contextOptions = context === \"request\" ? this.options.request : this.options.response;\n\n\t\treturn {\n\t\t\tmode: contextOptions?.mode ?? this.options.mode ?? \"normal\",\n\t\t\tuseDescribe: contextOptions?.useDescribe ?? this.options.useDescribe ?? false,\n\t\t\tincludeDescriptions: contextOptions?.includeDescriptions ?? this.options.includeDescriptions ?? true,\n\t\t};\n\t}\n\n\t/**\n\t * Analyze schema usage across the OpenAPI spec to determine if schemas\n\t * are used in request, response, or both contexts\n\t */\n\tprivate analyzeSchemaUsage(): void {\n\t\tconst requestSchemas = new Set<string>();\n\t\tconst responseSchemas = new Set<string>();\n\n\t\t// Analyze paths section if available\n\t\tif (this.spec.paths) {\n\t\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\t\t\t\tfor (const method of methods) {\n\t\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\t\tif (typeof operation !== \"object\" || !operation) continue;\n\n\t\t\t\t\t// Track total operations\n\t\t\t\t\tthis.filterStats.totalOperations++;\n\n\t\t\t\t\t// Apply operation filters\n\t\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters, this.filterStats)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Count included operation\n\t\t\t\t\tthis.filterStats.includedOperations++;\n\n\t\t\t\t\t// Check request bodies\n\t\t\t\t\tif (\n\t\t\t\t\t\t\"requestBody\" in operation &&\n\t\t\t\t\t\toperation.requestBody &&\n\t\t\t\t\t\ttypeof operation.requestBody === \"object\" &&\n\t\t\t\t\t\t\"content\" in operation.requestBody &&\n\t\t\t\t\t\toperation.requestBody.content\n\t\t\t\t\t) {\n\t\t\t\t\t\tfor (const mediaType of Object.values(operation.requestBody.content)) {\n\t\t\t\t\t\t\tif (mediaType && typeof mediaType === \"object\" && \"schema\" in mediaType && mediaType.schema) {\n\t\t\t\t\t\t\t\tthis.extractSchemaRefs(mediaType.schema, requestSchemas);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check responses\n\t\t\t\t\tif (\"responses\" in operation && operation.responses && typeof operation.responses === \"object\") {\n\t\t\t\t\t\tfor (const response of Object.values(operation.responses)) {\n\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\tresponse &&\n\t\t\t\t\t\t\t\ttypeof response === \"object\" &&\n\t\t\t\t\t\t\t\t\"content\" in response &&\n\t\t\t\t\t\t\t\tresponse.content &&\n\t\t\t\t\t\t\t\ttypeof response.content === \"object\"\n\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\tfor (const mediaType of Object.values(response.content)) {\n\t\t\t\t\t\t\t\t\tif (mediaType && typeof mediaType === \"object\" && \"schema\" in mediaType && mediaType.schema) {\n\t\t\t\t\t\t\t\t\t\tthis.extractSchemaRefs(mediaType.schema, responseSchemas);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Check parameters\n\t\t\t\t\tif (\"parameters\" in operation && Array.isArray(operation.parameters)) {\n\t\t\t\t\t\tfor (const param of operation.parameters) {\n\t\t\t\t\t\t\tif (param && typeof param === \"object\" && \"schema\" in param && param.schema) {\n\t\t\t\t\t\t\t\tthis.extractSchemaRefs(param.schema, requestSchemas);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Expand to include all transitively referenced schemas\n\t\t\tthis.expandTransitiveReferences(requestSchemas);\n\t\t\tthis.expandTransitiveReferences(responseSchemas);\n\t\t}\n\n\t\t// Fallback: analyze readOnly/writeOnly properties if paths not available\n\t\tif (!this.spec.paths || (requestSchemas.size === 0 && responseSchemas.size === 0)) {\n\t\t\tfor (const [name, schema] of Object.entries(this.spec.components?.schemas || {})) {\n\t\t\t\tconst hasReadOnly = this.hasReadOnlyProperties(schema);\n\t\t\t\tconst hasWriteOnly = this.hasWriteOnlyProperties(schema);\n\n\t\t\t\tif (hasWriteOnly && !hasReadOnly) {\n\t\t\t\t\trequestSchemas.add(name);\n\t\t\t\t} else if (hasReadOnly && !hasWriteOnly) {\n\t\t\t\t\tresponseSchemas.add(name);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Build usage map with circular reference detection\n\t\tfor (const [name] of Object.entries(this.spec.components?.schemas || {})) {\n\t\t\tif (requestSchemas.has(name) && responseSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"both\");\n\t\t\t} else if (requestSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"request\");\n\t\t\t} else if (responseSchemas.has(name)) {\n\t\t\t\tthis.schemaUsageMap.set(name, \"response\");\n\t\t\t}\n\t\t\t// Unreferenced schemas are not added to map (will use root typeMode)\n\t\t}\n\n\t\t// Detect circular references and mark entire chain as \"both\"\n\t\tthis.detectCircularReferences();\n\t}\n\n\t/**\n\t * Expand a set of schemas to include all transitively referenced schemas\n\t */\n\tprivate expandTransitiveReferences(schemas: Set<string>): void {\n\t\tconst toProcess = Array.from(schemas);\n\t\tconst processed = new Set<string>();\n\n\t\twhile (toProcess.length > 0) {\n\t\t\tconst schemaName = toProcess.pop();\n\t\t\tif (!schemaName || processed.has(schemaName)) continue;\n\n\t\t\tprocessed.add(schemaName);\n\n\t\t\tconst schema = this.spec.components?.schemas?.[schemaName];\n\t\t\tif (schema) {\n\t\t\t\tconst refs = new Set<string>();\n\t\t\t\tthis.extractSchemaRefs(schema, refs);\n\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\tif (!schemas.has(ref)) {\n\t\t\t\t\t\tschemas.add(ref);\n\t\t\t\t\t\ttoProcess.push(ref);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Extract schema names from $ref and nested structures\n\t */\n\tprivate extractSchemaRefs(schema: any, refs: Set<string>): void {\n\t\tif (!schema) return;\n\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\trefs.add(refName);\n\t\t}\n\n\t\tif (schema.allOf) {\n\t\t\tfor (const subSchema of schema.allOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.oneOf) {\n\t\t\tfor (const subSchema of schema.oneOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.anyOf) {\n\t\t\tfor (const subSchema of schema.anyOf) {\n\t\t\t\tthis.extractSchemaRefs(subSchema, refs);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.items) {\n\t\t\tthis.extractSchemaRefs(schema.items, refs);\n\t\t}\n\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tthis.extractSchemaRefs(prop, refs);\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Check if schema has readOnly properties\n\t */\n\tprivate hasReadOnlyProperties(schema: OpenAPISchema): boolean {\n\t\tif (schema.readOnly) return true;\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tif (this.hasReadOnlyProperties(prop)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Check if schema has writeOnly properties\n\t */\n\tprivate hasWriteOnlyProperties(schema: OpenAPISchema): boolean {\n\t\tif (schema.writeOnly) return true;\n\t\tif (schema.properties) {\n\t\t\tfor (const prop of Object.values(schema.properties)) {\n\t\t\t\tif (this.hasWriteOnlyProperties(prop)) return true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\t/**\n\t * Detect circular references and mark them as \"both\" context for safety\n\t */\n\tprivate detectCircularReferences(): void {\n\t\tconst visited = new Set<string>();\n\t\tconst recursionStack = new Set<string>();\n\n\t\tconst detectCycle = (name: string): boolean => {\n\t\t\tif (recursionStack.has(name)) {\n\t\t\t\t// Found a cycle - mark all schemas in the cycle as \"both\"\n\t\t\t\treturn true;\n\t\t\t}\n\n\t\t\tif (visited.has(name)) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvisited.add(name);\n\t\t\trecursionStack.add(name);\n\n\t\t\tconst schema = this.spec.components?.schemas?.[name];\n\t\t\tif (schema) {\n\t\t\t\tconst refs = new Set<string>();\n\t\t\t\tthis.extractSchemaRefs(schema, refs);\n\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\tif (detectCycle(ref)) {\n\t\t\t\t\t\t// Mark this schema as \"both\" since it's part of a circular chain\n\t\t\t\t\t\tthis.schemaUsageMap.set(name, \"both\");\n\t\t\t\t\t\trecursionStack.delete(name);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trecursionStack.delete(name);\n\t\t\treturn false;\n\t\t};\n\n\t\tfor (const name of Object.keys(this.spec.components?.schemas || {})) {\n\t\t\tdetectCycle(name);\n\t\t}\n\t}\n\n\t/**\n\t * Validate the OpenAPI specification\n\t */\n\tprivate validateSpec(): void {\n\t\tif (!this.spec.components?.schemas) {\n\t\t\tthrow new SpecValidationError(\n\t\t\t\t`No schemas found in OpenAPI spec at ${this.options.input}. Expected to find schemas at components.schemas`,\n\t\t\t\t{ filePath: this.options.input }\n\t\t\t);\n\t\t}\n\n\t\t// Validate all $refs can be resolved\n\t\tconst allSchemas = Object.keys(this.spec.components.schemas);\n\t\tfor (const [name, schema] of Object.entries(this.spec.components.schemas)) {\n\t\t\ttry {\n\t\t\t\tthis.validateSchemaRefs(name, schema, allSchemas);\n\t\t\t} catch (error) {\n\t\t\t\tif (error instanceof Error) {\n\t\t\t\t\tthrow new SchemaGenerationError(`Invalid schema '${name}': ${error.message}`, name, {\n\t\t\t\t\t\toriginalError: error.message,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Validate all $ref references in a schema\n\t */\n\tprivate validateSchemaRefs(schemaName: string, schema: OpenAPISchema, allSchemas: string[], path = \"\"): void {\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\tif (!allSchemas.includes(refName)) {\n\t\t\t\tthrow new SpecValidationError(\n\t\t\t\t\t`Invalid reference${path ? ` at '${path}'` : \"\"}: ` +\n\t\t\t\t\t\t`'${schema.$ref}' points to non-existent schema '${refName}'`,\n\t\t\t\t\t{ schemaName, path, ref: schema.$ref, refName }\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\t// Recursively validate nested schemas\n\t\tif (schema.properties) {\n\t\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t\tthis.validateSchemaRefs(schemaName, propSchema, allSchemas, path ? `${path}.${propName}` : propName);\n\t\t\t}\n\t\t}\n\n\t\tif (schema.items) {\n\t\t\tthis.validateSchemaRefs(schemaName, schema.items, allSchemas, `${path}[]`);\n\t\t}\n\n\t\tif (schema.prefixItems) {\n\t\t\tschema.prefixItems.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.prefixItems[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.allOf) {\n\t\t\tschema.allOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.allOf[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.oneOf) {\n\t\t\tschema.oneOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.oneOf[${i}]`);\n\t\t\t});\n\t\t}\n\n\t\tif (schema.anyOf) {\n\t\t\tschema.anyOf.forEach((s, i) => {\n\t\t\t\tthis.validateSchemaRefs(schemaName, s, allSchemas, `${path}.anyOf[${i}]`);\n\t\t\t});\n\t\t}\n\t}\n\n\t/**\n\t * Generate schema for a component\n\t */\n\tprivate generateComponentSchema(name: string, schema: OpenAPISchema): void {\n\t\t// Initialize dependencies for this schema\n\t\tif (!this.schemaDependencies.has(name)) {\n\t\t\tthis.schemaDependencies.set(name, new Set());\n\t\t}\n\n\t\tconst context = this.schemaUsageMap.get(name);\n\t\tconst resolvedOptions = context === \"response\" ? this.responseOptions : this.requestOptions;\n\n\t\t// Handle enums at the top level\n\t\tif (schema.enum) {\n\t\t\tconst jsdoc = generateJSDoc(schema, name, { includeDescriptions: resolvedOptions.includeDescriptions });\n\n\t\t\t// Apply stripSchemaPrefix before generating enum\n\t\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\n\t\t\t// Generate Zod enum\n\t\t\tconst { schemaCode, typeCode } = generateEnum(strippedName, schema.enum, {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t});\n\n\t\t\tconst enumSchemaCode = `${jsdoc}${schemaCode}\\n${typeCode}`;\n\t\t\tthis.schemas.set(name, enumSchemaCode);\n\t\t\treturn;\n\t\t}\n\n\t\t// Generate Zod schema\n\t\t// Apply stripSchemaPrefix to get cleaner schema names\n\t\tconst strippedName = stripPrefix(name, this.options.stripSchemaPrefix);\n\t\tconst schemaName = `${toCamelCase(strippedName, { prefix: this.options.prefix, suffix: this.options.suffix })}Schema`;\n\t\tconst jsdoc = generateJSDoc(schema, name, { includeDescriptions: resolvedOptions.includeDescriptions });\n\n\t\t// For allOf with single $ref, track dependency manually since we simplify it\n\t\tif (schema.allOf && schema.allOf.length === 1 && schema.allOf[0].$ref) {\n\t\t\tconst refName = resolveRef(schema.allOf[0].$ref);\n\t\t\tthis.schemaDependencies.get(name)?.add(refName);\n\t\t}\n\n\t\t// Update property generator context for this schema\n\t\tthis.propertyGenerator = new PropertyGenerator({\n\t\t\tspec: this.spec,\n\t\t\tschemaDependencies: this.schemaDependencies,\n\t\t\tschemaType: this.options.schemaType || \"all\",\n\t\t\tmode: resolvedOptions.mode,\n\t\t\tincludeDescriptions: resolvedOptions.includeDescriptions,\n\t\t\tuseDescribe: resolvedOptions.useDescribe,\n\t\t\tdefaultNullable: this.options.defaultNullable ?? false,\n\t\t\temptyObjectBehavior: this.options.emptyObjectBehavior ?? \"loose\",\n\t\t\tnamingOptions: {\n\t\t\t\tprefix: this.options.prefix,\n\t\t\t\tsuffix: this.options.suffix,\n\t\t\t},\n\t\t\tstripSchemaPrefix: this.options.stripSchemaPrefix,\n\t\t});\n\n\t\t// Check if this is just a simple $ref (alias)\n\t\t// Pass isTopLevel=true for top-level schema generation to prevent defaultNullable from applying\n\t\tconst zodSchema = this.propertyGenerator.generatePropertySchema(schema, name, true);\n\t\tconst zodSchemaCode = `${jsdoc}export const ${schemaName} = ${zodSchema};`;\n\n\t\t// Track dependencies from discriminated unions\n\t\t// Extract schema references like \"carSchema, truckSchema\" from discriminatedUnion calls\n\t\tif (zodSchema.includes(\"z.discriminatedUnion(\")) {\n\t\t\tconst match = zodSchema.match(/z\\.discriminatedUnion\\([^,]+,\\s*\\[([^\\]]+)\\]/);\n\t\t\tif (match) {\n\t\t\t\tconst refs = match[1].split(\",\").map(ref => ref.trim());\n\t\t\t\tfor (const ref of refs) {\n\t\t\t\t\t// Extract schema name from camelCase reference (e.g., \"carSchema\" -> \"Car\")\n\t\t\t\t\tconst depMatch = ref.match(/^([a-z][a-zA-Z0-9]*?)Schema$/);\n\t\t\t\t\tif (depMatch) {\n\t\t\t\t\t\t// Convert camelCase to PascalCase (carSchema -> Car)\n\t\t\t\t\t\tconst depName = depMatch[1].charAt(0).toUpperCase() + depMatch[1].slice(1);\n\t\t\t\t\t\tthis.schemaDependencies.get(name)?.add(depName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis.schemas.set(name, zodSchemaCode);\n\t}\n\n\t/**\n\t * Generate query parameter schemas for each operation\n\t */\n\tprivate generateQueryParameterSchemas(): void {\n\t\tif (!this.spec.paths) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\tif (!pathItem || typeof pathItem !== \"object\") continue;\n\n\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\n\t\t\tfor (const method of methods) {\n\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\tif (!operation) continue;\n\n\t\t\t\t// Apply operation filters (stats already tracked in analyzeSchemaUsage)\n\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Merge path-level and operation-level parameters, resolving $refs\n\t\t\t\tconst allParams = mergeParameters(pathItem.parameters, operation.parameters, this.spec);\n\n\t\t\t\t// Filter for query parameters only\n\t\t\t\tconst queryParams = allParams.filter(\n\t\t\t\t\t(param: any) => param && typeof param === \"object\" && param.in === \"query\"\n\t\t\t\t);\n\n\t\t\t\tif (queryParams.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Generate schema name from operationId or path+method fallback\n\t\t\t\tlet pascalOperationId: string;\n\t\t\t\tif (operation.operationId) {\n\t\t\t\t\t// Use toPascalCase only for kebab-case IDs, simple capitalization for camelCase\n\t\t\t\t\tpascalOperationId = operation.operationId.includes(\"-\")\n\t\t\t\t\t\t? toPascalCase(operation.operationId)\n\t\t\t\t\t\t: operation.operationId.charAt(0).toUpperCase() + operation.operationId.slice(1);\n\t\t\t\t} else {\n\t\t\t\t\t// Fallback: generate name from path + method\n\t\t\t\t\t// Apply stripPathPrefix if configured (for consistency with Playwright service generator)\n\t\t\t\t\tconst strippedPath = stripPathPrefix(path, this.options.stripPathPrefix);\n\t\t\t\t\tpascalOperationId = this.generateMethodNameFromPath(method, strippedPath);\n\t\t\t\t}\n\t\t\t\tconst schemaName = `${pascalOperationId}QueryParams`; // Initialize dependencies for this schema\n\t\t\t\tif (!this.schemaDependencies.has(schemaName)) {\n\t\t\t\t\tthis.schemaDependencies.set(schemaName, new Set());\n\t\t\t\t}\n\n\t\t\t\t// Build object schema properties\n\t\t\t\tconst properties: Record<string, string> = {};\n\t\t\t\tconst required: string[] = [];\n\n\t\t\t\tfor (const param of queryParams) {\n\t\t\t\t\tconst paramName = param.name;\n\t\t\t\t\tconst isRequired = param.required === true;\n\t\t\t\t\tconst paramSchema = param.schema;\n\n\t\t\t\t\tif (!paramSchema) continue;\n\n\t\t\t\t\t// Generate Zod schema for this parameter\n\t\t\t\t\tlet zodType = this.generateQueryParamType(paramSchema, param);\n\n\t\t\t\t\t// Handle arrays with serialization styles\n\t\t\t\t\tif (paramSchema.type === \"array\" && paramSchema.items) {\n\t\t\t\t\t\tconst itemType = this.generateQueryParamType(paramSchema.items, param);\n\n\t\t\t\t\t\t// Note: Query param arrays are sent as strings and need to be split on the client side\n\t\t\t\t\t\t// The style is documented but validation is for the array type\n\t\t\t\t\t\tzodType = `z.array(${itemType})`;\n\n\t\t\t\t\t\t// Description is handled by addDescription below\n\t\t\t\t\t} // Add description if available (before .optional())\n\t\t\t\t\tif (param.description && this.requestOptions.includeDescriptions) {\n\t\t\t\t\t\tif (this.requestOptions.useDescribe) {\n\t\t\t\t\t\t\tzodType = `${zodType}.describe(${JSON.stringify(param.description)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Make optional if not required (don't add defaults)\n\t\t\t\t\tif (!isRequired) {\n\t\t\t\t\t\tzodType = `${zodType}.optional()`;\n\t\t\t\t\t}\n\n\t\t\t\t\tproperties[paramName] = zodType;\n\t\t\t\t\tif (isRequired) {\n\t\t\t\t\t\trequired.push(paramName);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Track dependencies from schema references\n\t\t\t\t\tif (paramSchema.$ref) {\n\t\t\t\t\t\tconst refName = resolveRef(paramSchema.$ref);\n\t\t\t\t\t\tthis.schemaDependencies.get(schemaName)?.add(refName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Generate the object schema code\n\t\t\t\tconst objectMode = this.requestOptions.mode;\n\t\t\t\tconst zodMethod = objectMode === \"strict\" ? \"strictObject\" : objectMode === \"loose\" ? \"looseObject\" : \"object\";\n\n\t\t\t\tconst propsCode = Object.entries(properties)\n\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t// Quote property names that contain special characters or are not valid identifiers\n\t\t\t\t\t\tconst needsQuotes = !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key);\n\t\t\t\t\t\tconst quotedKey = needsQuotes ? `\"${key}\"` : key;\n\t\t\t\t\t\treturn ` ${quotedKey}: ${value}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\",\\n\");\n\n\t\t\t\tconst schemaCode = `z.${zodMethod}({\\n${propsCode}\\n})`; // Apply prefix/suffix to the operation name only, then add QueryParams and Schema\n\t\t\t\tconst operationName = pascalOperationId; // Already PascalCase\n\t\t\t\tconst prefixedName = this.options.prefix\n\t\t\t\t\t? `${toPascalCase(this.options.prefix)}${operationName}`\n\t\t\t\t\t: operationName;\n\t\t\t\tconst suffixedName = this.options.suffix ? `${prefixedName}${toPascalCase(this.options.suffix)}` : prefixedName;\n\t\t\t\tconst camelCaseSchemaName = `${suffixedName.charAt(0).toLowerCase() + suffixedName.slice(1)}QueryParamsSchema`;\n\n\t\t\t\t// Generate JSDoc - use operationId if available, otherwise use method + path\n\t\t\t\tconst jsdocOperationName = operation.operationId || `${method.toUpperCase()} ${path}`;\n\t\t\t\tconst jsdoc = `/**\\n * Query parameters for ${jsdocOperationName}\\n */\\n`;\n\t\t\t\tconst fullSchemaCode = `${jsdoc}export const ${camelCaseSchemaName} = ${schemaCode};`;\n\n\t\t\t\tthis.schemas.set(schemaName, fullSchemaCode);\n\t\t\t\tthis.needsZodImport = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generate a PascalCase method name from HTTP method and path\n\t * Used as fallback when operationId is not available\n\t * @internal\n\t */\n\tprivate generateMethodNameFromPath(method: string, path: string): string {\n\t\t// Convert path to PascalCase\n\t\t// e.g., GET /users/{userId}/posts -> GetUsersByUserIdPosts\n\t\t// e.g., GET /api/v0.1/users -> GetApiV01Users\n\t\tconst segments = path\n\t\t\t.split(\"/\")\n\t\t\t.filter(Boolean)\n\t\t\t.map(segment => {\n\t\t\t\tif (segment.startsWith(\"{\") && segment.endsWith(\"}\")) {\n\t\t\t\t\t// Path parameter - convert to \"ByParamName\"\n\t\t\t\t\tconst paramName = segment.slice(1, -1);\n\t\t\t\t\treturn `By${this.capitalizeSegment(paramName)}`;\n\t\t\t\t}\n\t\t\t\t// Regular segment - capitalize and handle special characters\n\t\t\t\treturn this.capitalizeSegment(segment);\n\t\t\t})\n\t\t\t.join(\"\");\n\n\t\t// Capitalize first letter of method\n\t\tconst capitalizedMethod = method.charAt(0).toUpperCase() + method.slice(1).toLowerCase();\n\t\treturn `${capitalizedMethod}${segments}`;\n\t}\n\n\t/**\n\t * Capitalizes a path segment, handling special characters like dashes, underscores, and dots\n\t * @internal\n\t */\n\tprivate capitalizeSegment(str: string): string {\n\t\t// Handle kebab-case, snake_case, and dots\n\t\tif (str.includes(\"-\") || str.includes(\"_\") || str.includes(\".\")) {\n\t\t\treturn str\n\t\t\t\t.split(/[-_.]/)\n\t\t\t\t.map(part => {\n\t\t\t\t\tif (!part) return \"\";\n\t\t\t\t\treturn part.charAt(0).toUpperCase() + part.slice(1).toLowerCase();\n\t\t\t\t})\n\t\t\t\t.join(\"\");\n\t\t}\n\n\t\t// Regular word - just capitalize first letter\n\t\treturn str.charAt(0).toUpperCase() + str.slice(1);\n\t}\n\n\t/**\n\t * Check if a header should be ignored based on filter patterns\n\t * @internal\n\t */\n\tprivate shouldIgnoreHeader(headerName: string): boolean {\n\t\tconst ignorePatterns = this.options.ignoreHeaders;\n\t\tif (!ignorePatterns || ignorePatterns.length === 0) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif (ignorePatterns.includes(\"*\")) {\n\t\t\treturn true;\n\t\t}\n\n\t\tconst headerLower = headerName.toLowerCase();\n\n\t\treturn ignorePatterns.some((pattern: string) => {\n\t\t\tconst patternLower = pattern.toLowerCase();\n\t\t\treturn minimatch(headerLower, patternLower);\n\t\t});\n\t}\n\n\t/**\n\t * Generate header parameter schemas for each operation\n\t * Header parameters are always string type (HTTP header semantics)\n\t */\n\tprivate generateHeaderParameterSchemas(): void {\n\t\tif (!this.spec.paths) {\n\t\t\treturn;\n\t\t}\n\n\t\tfor (const [path, pathItem] of Object.entries(this.spec.paths)) {\n\t\t\tif (!pathItem || typeof pathItem !== \"object\") continue;\n\n\t\t\tconst methods = [\"get\", \"post\", \"put\", \"patch\", \"delete\", \"head\", \"options\"];\n\n\t\t\tfor (const method of methods) {\n\t\t\t\tconst operation = (pathItem as any)[method];\n\t\t\t\tif (!operation) continue;\n\n\t\t\t\t// Apply operation filters\n\t\t\t\tif (!shouldIncludeOperation(operation, path, method, this.options.operationFilters)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Merge path-level and operation-level parameters, resolving $refs\n\t\t\t\tconst allParams = mergeParameters(pathItem.parameters, operation.parameters, this.spec);\n\n\t\t\t\t// Filter for header parameters only, excluding ignored ones\n\t\t\t\tconst headerParams = allParams.filter(\n\t\t\t\t\t(param: any) =>\n\t\t\t\t\t\tparam && typeof param === \"object\" && param.in === \"header\" && !this.shouldIgnoreHeader(param.name)\n\t\t\t\t);\n\n\t\t\t\tif (headerParams.length === 0) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\t// Generate schema name from operationId or path+method fallback\n\t\t\t\tlet pascalOperationId: string;\n\t\t\t\tif (operation.operationId) {\n\t\t\t\t\tpascalOperationId = operation.operationId.includes(\"-\")\n\t\t\t\t\t\t? toPascalCase(operation.operationId)\n\t\t\t\t\t\t: operation.operationId.charAt(0).toUpperCase() + operation.operationId.slice(1);\n\t\t\t\t} else {\n\t\t\t\t\t// Fallback: generate name from path + method\n\t\t\t\t\t// Apply stripPathPrefix if configured (for consistency with Playwright service generator)\n\t\t\t\t\tconst strippedPath = stripPathPrefix(path, this.options.stripPathPrefix);\n\t\t\t\t\tpascalOperationId = this.generateMethodNameFromPath(method, strippedPath);\n\t\t\t\t}\n\t\t\t\tconst schemaName = `${pascalOperationId}HeaderParams`;\n\n\t\t\t\t// Initialize dependencies for this schema\n\t\t\t\tif (!this.schemaDependencies.has(schemaName)) {\n\t\t\t\t\tthis.schemaDependencies.set(schemaName, new Set());\n\t\t\t\t}\n\n\t\t\t\t// Build object schema properties (headers are always strings)\n\t\t\t\tconst properties: Record<string, string> = {};\n\n\t\t\t\tfor (const param of headerParams) {\n\t\t\t\t\tconst paramName = param.name;\n\t\t\t\t\tconst paramSchema = param.schema;\n\n\t\t\t\t\tif (!paramSchema) continue;\n\n\t\t\t\t\t// Headers are always strings in HTTP, regardless of schema type\n\t\t\t\t\tlet zodType = \"z.string()\";\n\n\t\t\t\t\t// Add description if available\n\t\t\t\t\tif (param.description && this.requestOptions.includeDescriptions) {\n\t\t\t\t\t\tif (this.requestOptions.useDescribe) {\n\t\t\t\t\t\t\tzodType = `${zodType}.describe(${JSON.stringify(param.description)})`;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Headers are always optional in service layer (as per requirements)\n\t\t\t\t\tzodType = `${zodType}.optional()`;\n\n\t\t\t\t\tproperties[paramName] = zodType;\n\n\t\t\t\t\t// Track dependencies from schema references (if any)\n\t\t\t\t\tif (paramSchema.$ref) {\n\t\t\t\t\t\tconst refName = resolveRef(paramSchema.$ref);\n\t\t\t\t\t\tthis.schemaDependencies.get(schemaName)?.add(refName);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Generate the object schema code\n\t\t\t\tconst objectMode = this.requestOptions.mode;\n\t\t\t\tconst zodMethod = objectMode === \"strict\" ? \"strictObject\" : objectMode === \"loose\" ? \"looseObject\" : \"object\";\n\n\t\t\t\tconst propsCode = Object.entries(properties)\n\t\t\t\t\t.map(([key, value]) => {\n\t\t\t\t\t\t// Quote property names that contain special characters or are not valid identifiers\n\t\t\t\t\t\tconst needsQuotes = !/^[a-zA-Z_$][a-zA-Z0-9_$]*$/.test(key);\n\t\t\t\t\t\tconst quotedKey = needsQuotes ? `\"${key}\"` : key;\n\t\t\t\t\t\treturn ` ${quotedKey}: ${value}`;\n\t\t\t\t\t})\n\t\t\t\t\t.join(\",\\n\");\n\n\t\t\t\tconst schemaCode = `z.${zodMethod}({\\n${propsCode}\\n})`;\n\n\t\t\t\t// Apply prefix/suffix to the operation name only, then add HeaderParams and Schema\n\t\t\t\tconst operationName = pascalOperationId;\n\t\t\t\tconst prefixedName = this.options.prefix\n\t\t\t\t\t? `${toPascalCase(this.options.prefix)}${operationName}`\n\t\t\t\t\t: operationName;\n\t\t\t\tconst suffixedName = this.options.suffix ? `${prefixedName}${toPascalCase(this.options.suffix)}` : prefixedName;\n\t\t\t\tconst camelCaseSchemaName = `${suffixedName.charAt(0).toLowerCase() + suffixedName.slice(1)}HeaderParamsSchema`;\n\n\t\t\t\t// Generate JSDoc - use operationId if available, otherwise use method + path\n\t\t\t\tconst jsdocOperationName = operation.operationId || `${method.toUpperCase()} ${path}`;\n\t\t\t\tconst jsdoc = `/**\\n * Header parameters for ${jsdocOperationName}\\n */\\n`;\n\t\t\t\tconst fullSchemaCode = `${jsdoc}export const ${camelCaseSchemaName} = ${schemaCode};`;\n\n\t\t\t\tthis.schemas.set(schemaName, fullSchemaCode);\n\t\t\t\tthis.needsZodImport = true;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Generate Zod type for a query parameter schema\n\t */\n\tprivate generateQueryParamType(schema: OpenAPISchema, param: any): string {\n\t\t// Handle references\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\t// Apply stripSchemaPrefix to referenced schema names\n\t\t\tconst strippedRefName = stripPrefix(refName, this.options.stripSchemaPrefix);\n\t\t\tconst schemaName = toCamelCase(strippedRefName, { prefix: this.options.prefix, suffix: this.options.suffix });\n\t\t\treturn `${schemaName}Schema`;\n\t\t}\n\n\t\t// Handle enums\n\t\tif (schema.enum) {\n\t\t\t// Check if all values are booleans\n\t\t\tconst allBooleans = schema.enum.every((v: any) => typeof v === \"boolean\");\n\t\t\tif (allBooleans) {\n\t\t\t\treturn \"z.boolean()\";\n\t\t\t}\n\n\t\t\t// Check if all values are strings\n\t\t\tconst allStrings = schema.enum.every((v: any) => typeof v === \"string\");\n\t\t\tif (allStrings) {\n\t\t\t\tconst enumValues = schema.enum.map(v => `\"${v}\"`).join(\", \");\n\t\t\t\treturn `z.enum([${enumValues}])`;\n\t\t\t}\n\n\t\t\t// For numeric or mixed enums, use z.union with z.literal\n\t\t\tconst literalValues = schema.enum\n\t\t\t\t.map((v: any) => {\n\t\t\t\t\tif (typeof v === \"string\") {\n\t\t\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `z.literal(${v})`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\treturn `z.union([${literalValues}])`;\n\t\t}\n\n\t\t// Handle primitive types\n\t\tconst type = schema.type;\n\n\t\tif (type === \"string\") {\n\t\t\t// Use Zod v4 top-level format validators for known formats\n\t\t\tconst formatMap: Record<string, string> = {\n\t\t\t\temail: \"z.email()\",\n\t\t\t\turi: \"z.url()\",\n\t\t\t\turl: \"z.url()\",\n\t\t\t\tuuid: \"z.uuid()\",\n\t\t\t};\n\n\t\t\t// Check if format has a dedicated Zod v4 validator\n\t\t\tif (schema.format && formatMap[schema.format]) {\n\t\t\t\tlet zodType = formatMap[schema.format];\n\t\t\t\t// Add string validations (these still work on format types)\n\t\t\t\tif (schema.minLength !== undefined) zodType = `${zodType}.min(${schema.minLength})`;\n\t\t\t\tif (schema.maxLength !== undefined) zodType = `${zodType}.max(${schema.maxLength})`;\n\t\t\t\tif (schema.pattern) zodType = `${zodType}.regex(/${schema.pattern}/)`;\n\t\t\t\treturn zodType;\n\t\t\t}\n\n\t\t\t// Fallback to z.string() for unknown formats or no format\n\t\t\tlet zodType = \"z.string()\";\n\t\t\tif (schema.minLength !== undefined) zodType = `${zodType}.min(${schema.minLength})`;\n\t\t\tif (schema.maxLength !== undefined) zodType = `${zodType}.max(${schema.maxLength})`;\n\t\t\tif (schema.pattern) zodType = `${zodType}.regex(/${schema.pattern}/)`;\n\t\t\treturn zodType;\n\t\t}\n\n\t\tif (type === \"number\" || type === \"integer\") {\n\t\t\tlet zodType = type === \"integer\" ? \"z.number().int()\" : \"z.number()\";\n\t\t\t// Add number validations\n\t\t\tif (schema.minimum !== undefined) {\n\t\t\t\tzodType = schema.exclusiveMinimum ? `${zodType}.gt(${schema.minimum})` : `${zodType}.gte(${schema.minimum})`;\n\t\t\t}\n\t\t\tif (schema.maximum !== undefined) {\n\t\t\t\tzodType = schema.exclusiveMaximum ? `${zodType}.lt(${schema.maximum})` : `${zodType}.lte(${schema.maximum})`;\n\t\t\t}\n\t\t\treturn zodType;\n\t\t}\n\n\t\tif (type === \"boolean\") {\n\t\t\treturn \"z.boolean()\";\n\t\t}\n\n\t\tif (type === \"array\" && schema.items) {\n\t\t\tconst itemType = this.generateQueryParamType(schema.items, param);\n\t\t\tlet arrayType = `z.array(${itemType})`;\n\t\t\t// Add array validations\n\t\t\tif (schema.minItems !== undefined) arrayType = `${arrayType}.min(${schema.minItems})`;\n\t\t\tif (schema.maxItems !== undefined) arrayType = `${arrayType}.max(${schema.maxItems})`;\n\t\t\treturn arrayType;\n\t\t}\n\n\t\t// Fallback to z.unknown() for unhandled types\n\t\treturn \"z.unknown()\";\n\t}\n\n\t/**\n\t * Topological sort for schema dependencies\n\t * Returns schemas in the order they should be declared\n\t */\n\tprivate topologicalSort(): string[] {\n\t\tconst sorted: string[] = [];\n\t\tconst visited = new Set<string>();\n\t\tconst visiting = new Set<string>();\n\t\tconst aliases: string[] = [];\n\t\tconst circularDeps = new Set<string>(); // Track schemas involved in circular dependencies\n\n\t\t// Performance optimization: Cache schema and type code lookups\n\t\tconst codeCache = new Map<string, string>();\n\t\tfor (const [name, code] of this.schemas) {\n\t\t\tcodeCache.set(name, code);\n\t\t}\n\t\tfor (const [name, code] of this.types) {\n\t\t\tcodeCache.set(name, code);\n\t\t}\n\n\t\tconst visit = (name: string): void => {\n\t\t\tif (visited.has(name)) return;\n\n\t\t\t// Detect circular dependencies\n\t\t\tif (visiting.has(name)) {\n\t\t\t\t// Mark this as a circular dependency but don't add it yet\n\t\t\t\tcircularDeps.add(name);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tvisiting.add(name);\n\n\t\t\t// Check if this is a simple alias (just assigns another schema directly)\n\t\t\tconst code = codeCache.get(name) || \"\";\n\t\t\tconst isSimpleAlias =\n\t\t\t\tcode.match(/= (\\w+Schema);$/) !== null &&\n\t\t\t\t!code.includes(\"z.object\") &&\n\t\t\t\t!code.includes(\"z.enum\") &&\n\t\t\t\t!code.includes(\"z.union\") &&\n\t\t\t\t!code.includes(\"z.array\") &&\n\t\t\t\t!code.includes(\".and(\");\n\n\t\t\tif (isSimpleAlias) {\n\t\t\t\t// For simple aliases, just mark as visited and add to aliases list\n\t\t\t\tvisiting.delete(name);\n\t\t\t\tvisited.add(name);\n\t\t\t\taliases.push(name);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Visit dependencies first for non-alias schemas\n\t\t\tconst deps = this.schemaDependencies.get(name);\n\t\t\tif (deps && deps.size > 0) {\n\t\t\t\tfor (const dep of deps) {\n\t\t\t\t\tif (this.schemas.has(dep) || this.types.has(dep)) {\n\t\t\t\t\t\tvisit(dep);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvisiting.delete(name);\n\t\t\tvisited.add(name);\n\n\t\t\t// Don't add circular dependencies yet - they need special handling\n\t\t\tif (!circularDeps.has(name)) {\n\t\t\t\tsorted.push(name);\n\t\t\t}\n\t\t};\n\n\t\t// Visit all schemas and types\n\t\tconst allNames = new Set([...this.schemas.keys(), ...this.types.keys()]);\n\t\tfor (const name of allNames) {\n\t\t\tvisit(name);\n\t\t}\n\n\t\t// Add circular dependencies at the end (before aliases)\n\t\t// This ensures they come after their non-circular dependencies\n\t\tfor (const name of circularDeps) {\n\t\t\tif (!visited.has(name)) {\n\t\t\t\tsorted.push(name);\n\t\t\t\tvisited.add(name);\n\t\t\t}\n\t\t}\n\n\t\t// Add aliases at the end\n\t\treturn [...sorted, ...aliases];\n\t}\n\n\t/**\n\t * Generate statistics about the generated schemas\n\t */\n\tprivate generateStats(): string[] {\n\t\tconst stats = {\n\t\t\ttotalSchemas: this.schemas.size,\n\t\t\twithCircularRefs: 0,\n\t\t\twithDiscriminators: 0,\n\t\t\twithConstraints: 0,\n\t\t};\n\n\t\t// Count schemas with special features\n\t\tfor (const code of this.schemas.values()) {\n\t\t\tif (code.includes(\"z.lazy(\")) stats.withCircularRefs++;\n\t\t\tif (code.includes(\"z.discriminatedUnion\")) stats.withDiscriminators++;\n\t\t\tif (code.includes(\".min(\") || code.includes(\".max(\") || code.includes(\".gte(\")) {\n\t\t\t\tstats.withConstraints++;\n\t\t\t}\n\t\t}\n\n\t\tconst output = [\n\t\t\t\"// Generation Statistics:\",\n\t\t\t`// Total schemas: ${stats.totalSchemas}`,\n\t\t\t`// Circular references: ${stats.withCircularRefs}`,\n\t\t\t`// Discriminated unions: ${stats.withDiscriminators}`,\n\t\t\t`// With constraints: ${stats.withConstraints}`,\n\t\t];\n\n\t\t// Add filter statistics if filtering was used\n\t\tif (this.options.operationFilters && this.filterStats.totalOperations > 0) {\n\t\t\toutput.push(\"//\");\n\t\t\tconst filterStatsStr = formatFilterStatistics(this.filterStats);\n\t\t\tfor (const line of filterStatsStr.split(\"\\n\")) {\n\t\t\t\toutput.push(`// ${line}`);\n\t\t\t}\n\t\t}\n\n\t\toutput.push(`// Generated at: ${new Date().toISOString()}`);\n\n\t\treturn output;\n\t}\n}\n","import type { NamingOptions } from \"../utils/name-utils\";\nimport { toCamelCase, toPascalCase } from \"../utils/name-utils\";\n\nexport interface EnumOpenApiGeneratorOptions extends NamingOptions {}\n\nexport interface EnumResult {\n\tschemaCode: string;\n\ttypeCode: string;\n}\n\n/**\n * Generate Zod enum schema\n * - String-only enums: z.enum()\n * - Numeric enums: z.union([z.literal(), ...])\n * - Boolean enums: z.boolean()\n * - Mixed enums: z.union([z.literal(), ...])\n */\nexport function generateEnum(\n\tname: string,\n\tvalues: (string | number | boolean)[],\n\toptions: EnumOpenApiGeneratorOptions\n): EnumResult {\n\tconst schemaName = `${toCamelCase(name, options)}Schema`;\n\tconst typeName = toPascalCase(name);\n\n\t// Check if all values are booleans\n\tconst allBooleans = values.every(v => typeof v === \"boolean\");\n\tif (allBooleans) {\n\t\t// For boolean enums, use z.boolean()\n\t\tconst schemaCode = `export const ${schemaName} = z.boolean();`;\n\t\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\t\treturn { schemaCode, typeCode };\n\t}\n\n\t// Check if all values are strings\n\tconst allStrings = values.every(v => typeof v === \"string\");\n\tif (allStrings) {\n\t\t// z.enum only accepts string values\n\t\tconst enumValues = values.map(v => `\"${v}\"`).join(\", \");\n\t\tconst schemaCode = `export const ${schemaName} = z.enum([${enumValues}]);`;\n\t\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\t\treturn { schemaCode, typeCode };\n\t}\n\n\t// For numeric or mixed enums, use z.union with z.literal\n\tconst literalValues = values\n\t\t.map(v => {\n\t\t\tif (typeof v === \"string\") {\n\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t}\n\t\t\treturn `z.literal(${v})`;\n\t\t})\n\t\t.join(\", \");\n\n\tconst schemaCode = `export const ${schemaName} = z.union([${literalValues}]);`;\n\tconst typeCode = `export type ${typeName} = z.infer<typeof ${schemaName}>;`;\n\n\treturn { schemaCode, typeCode };\n}\n","/**\n * Name conversion utilities\n */\n\nexport interface NamingOptions {\n\tprefix?: string;\n\tsuffix?: string;\n}\n\n/**\n * Sanitize a string by replacing invalid identifier characters with underscores\n * Preserves dots, hyphens, underscores, and spaces as word separators\n * Example: \"User@Domain\" -> \"User_Domain\"\n * Example: \"User-Data@2024\" -> \"User-Data_2024\"\n */\nfunction sanitizeIdentifier(str: string): string {\n\t// Replace all non-identifier chars (except dots, hyphens, underscores, spaces) with underscores\n\t// Valid identifier chars: letters, digits, underscore\n\t// Preserve: dots, hyphens, underscores, spaces as word separators\n\treturn str.replace(/[^a-zA-Z0-9._\\-\\s]+/g, \"_\");\n}\n\n/**\n * Convert schema name to camelCase with optional prefix/suffix\n * Handles dotted names like \"Company.Models.User\" -> \"companyModelsUser\"\n */\nexport function toCamelCase(str: string, options?: NamingOptions): string {\n\t// Sanitize invalid characters first\n\tconst sanitized = sanitizeIdentifier(str);\n\n\t// Split by dots, hyphens, underscores, and spaces to get words\n\tconst words = sanitized.split(/[.\\-_\\s]+/).filter(word => word.length > 0);\n\n\t// Convert to camelCase: first word lowercase, rest PascalCase\n\tlet name: string;\n\tif (words.length === 0) {\n\t\tname = str.charAt(0).toLowerCase() + str.slice(1);\n\t} else if (words.length === 1) {\n\t\tname = words[0].charAt(0).toLowerCase() + words[0].slice(1);\n\t} else {\n\t\tname =\n\t\t\twords[0].charAt(0).toLowerCase() +\n\t\t\twords[0].slice(1) +\n\t\t\twords\n\t\t\t\t.slice(1)\n\t\t\t\t.map(word => word.charAt(0).toUpperCase() + word.slice(1))\n\t\t\t\t.join(\"\");\n\t}\n\n\t// Add prefix (only lowercase first char for camelCase, preserve rest)\n\tif (options?.prefix) {\n\t\tconst prefix = options.prefix.charAt(0).toLowerCase() + options.prefix.slice(1);\n\t\tname = prefix + name.charAt(0).toUpperCase() + name.slice(1);\n\t}\n\n\t// Add suffix (capitalize first char for proper camelCase, preserve rest)\n\tif (options?.suffix) {\n\t\tconst suffix = options.suffix.charAt(0).toUpperCase() + options.suffix.slice(1);\n\t\tname = name + suffix;\n\t}\n\n\treturn name;\n}\n\n/**\n * @shared Convert enum value to PascalCase and sanitize for TypeScript enum keys\n * @since 1.0.0\n * Utility used by core and playwright packages\n * Handles dotted names like \"Company.Models.User\" -> \"CompanyModelsUser\"\n */\nexport function toPascalCase(str: string | number): string {\n\tconst stringValue = String(str);\n\n\t// Check if it's already a valid PascalCase or camelCase identifier\n\t// (only contains letters, digits, and no special characters)\n\tconst isAlreadyValidCase = /^[a-zA-Z][a-zA-Z0-9]*$/.test(stringValue);\n\n\tif (isAlreadyValidCase) {\n\t\t// Just ensure it starts with uppercase\n\t\treturn stringValue.charAt(0).toUpperCase() + stringValue.slice(1);\n\t}\n\n\t// Sanitize invalid characters first\n\tconst sanitized = sanitizeIdentifier(stringValue);\n\n\t// Split by dots, hyphens, underscores, and spaces to get words\n\tconst words = sanitized.split(/[.\\-_\\s]+/).filter(word => word.length > 0);\n\n\t// Convert all words to PascalCase\n\tlet result: string;\n\tif (words.length === 0) {\n\t\tresult = \"Value\";\n\t} else {\n\t\tresult = words.map(word => word.charAt(0).toUpperCase() + word.slice(1)).join(\"\");\n\t}\n\n\t// Enum keys can't start with a number - prefix with 'N'\n\tif (/^\\d/.test(result)) {\n\t\tresult = `N${result}`;\n\t}\n\n\t// If result is empty or only underscores, use a default\n\tif (!result || /^_+$/.test(result)) {\n\t\treturn \"Value\";\n\t}\n\n\treturn result;\n}\n\n/**\n * Resolve $ref to schema name\n */\nexport function resolveRef(ref: string): string {\n\tconst parts = ref.split(\"/\");\n\treturn parts[parts.length - 1];\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { escapeJSDoc } from \"../utils/string-utils\";\n\nexport interface JSDocOptions {\n\tincludeDescriptions: boolean;\n}\n\n/**\n * Generate JSDoc comment for a schema or property\n * Type-safe with input validation to prevent JSDoc injection\n */\nexport function generateJSDoc(\n\tschema: OpenAPISchema,\n\tname?: string,\n\toptions: JSDocOptions = { includeDescriptions: true }\n): string {\n\t// Type safety: Validate schema input\n\tif (!schema || typeof schema !== \"object\") {\n\t\treturn \"\";\n\t}\n\n\tif (!options.includeDescriptions) {\n\t\t// Only add @deprecated if descriptions are disabled\n\t\tif (schema.deprecated) {\n\t\t\treturn \"/** @deprecated */\\n\";\n\t\t}\n\t\treturn \"\";\n\t}\n\n\t// Check if we have anything to document\n\tif (!schema.description && !schema.title && !schema.deprecated && !schema.examples && schema.example === undefined) {\n\t\treturn \"\";\n\t}\n\n\tconst parts: string[] = [];\n\n\t// Add title if different from name (sanitized)\n\tif (schema.title && typeof schema.title === \"string\" && (!name || schema.title !== name)) {\n\t\t// Sanitize title to prevent JSDoc injection\n\t\tconst sanitizedTitle = escapeJSDoc(schema.title).replace(/@/g, \"\\\\@\");\n\t\tparts.push(sanitizedTitle);\n\t}\n\n\t// Add description (sanitized to prevent injection)\n\tif (schema.description && typeof schema.description === \"string\") {\n\t\t// Escape @ symbols and other JSDoc tags to prevent injection\n\t\tconst sanitizedDesc = escapeJSDoc(schema.description).replace(/@/g, \"\\\\@\").replace(/\\*\\//g, \"*\\\\/\");\n\t\tparts.push(sanitizedDesc);\n\t}\n\n\t// Add examples (with type safety)\n\tif (schema.examples && Array.isArray(schema.examples) && schema.examples.length > 0) {\n\t\ttry {\n\t\t\tconst examplesStr = schema.examples.map(ex => JSON.stringify(ex)).join(\", \");\n\t\t\tparts.push(`@example ${examplesStr}`);\n\t\t} catch (error) {\n\t\t\t// Skip examples that can't be serialized\n\t\t\tconsole.warn(\"Warning: Could not serialize schema examples\", error);\n\t\t}\n\t} else if (schema.example !== undefined) {\n\t\ttry {\n\t\t\tparts.push(`@example ${JSON.stringify(schema.example)}`);\n\t\t} catch (error) {\n\t\t\t// Skip example that can't be serialized\n\t\t\tconsole.warn(\"Warning: Could not serialize schema example\", error);\n\t\t}\n\t}\n\n\t// Add deprecated\n\tif (schema.deprecated) {\n\t\tparts.push(\"@deprecated\");\n\t}\n\n\tif (parts.length === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst fullComment = parts.join(\" \");\n\treturn `/** ${fullComment} */\\n`;\n}\n","/**\n * String utility functions for escaping and formatting\n */\n\nimport type { OpenAPISchema } from \"../types\";\n\n/**\n * Escape string for description in .describe()\n */\nexport function escapeDescription(str: string): string {\n\treturn str.replace(/\\\\/g, \"\\\\\\\\\").replace(/\"/g, '\\\\\"').replace(/\\n/g, \"\\\\n\");\n}\n\n/**\n * Escape regex pattern for use in code\n * Only escapes forward slashes which would terminate the regex literal\n */\nexport function escapePattern(str: string): string {\n\treturn str.replace(/\\//g, \"\\\\/\");\n}\n\n/**\n * @shared Escape JSDoc comment content to prevent injection\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport function escapeJSDoc(str: string): string {\n\treturn str.replace(/\\*\\//g, \"*\\\\/\");\n}\n\n/**\n * Wrap validation with .nullable() if needed\n */\nexport function wrapNullable(validation: string, isNullable: boolean): string {\n\treturn isNullable ? `${validation}.nullable()` : validation;\n}\n\n/**\n * Check if schema is nullable (supports both OpenAPI 3.0 and 3.1 syntax)\n * @param schema - The OpenAPI schema to check\n * @param defaultNullable - Default nullable behavior when not explicitly specified (default: false)\n */\nexport function isNullable(schema: OpenAPISchema, defaultNullable = false): boolean {\n\t// OpenAPI 3.0 style: nullable explicitly set\n\tif (schema.nullable === true) {\n\t\treturn true;\n\t}\n\tif (schema.nullable === false) {\n\t\treturn false;\n\t}\n\t// OpenAPI 3.1 style: type can be an array including \"null\"\n\tif (Array.isArray(schema.type)) {\n\t\treturn schema.type.includes(\"null\");\n\t}\n\t// No explicit nullable annotation - use default\n\treturn defaultNullable;\n}\n\n/**\n * Get the primary type from schema (handles OpenAPI 3.1 type arrays)\n */\nexport function getPrimaryType(schema: OpenAPISchema): string | undefined {\n\tif (Array.isArray(schema.type)) {\n\t\t// OpenAPI 3.1: type can be an array like [\"string\", \"null\"]\n\t\t// Return the first non-null type\n\t\tconst nonNullType = schema.type.find(t => t !== \"null\");\n\t\treturn nonNullType;\n\t}\n\treturn schema.type;\n}\n\n/**\n * Check if schema has multiple non-null types\n */\nexport function hasMultipleTypes(schema: OpenAPISchema): boolean {\n\tif (Array.isArray(schema.type)) {\n\t\tconst nonNullTypes = schema.type.filter(t => t !== \"null\");\n\t\treturn nonNullTypes.length > 1;\n\t}\n\treturn false;\n}\n\n/**\n * Add description to a schema validation string\n */\nexport function addDescription(validation: string, description: string | undefined, useDescribe: boolean): string {\n\tif (!description || !useDescribe) return validation;\n\n\tconst escapedDesc = escapeDescription(description);\n\treturn `${validation}.describe(\"${escapedDesc}\")`;\n}\n","import type { OpenAPISchema, OpenAPISpec } from \"../types\";\nimport { LRUCache } from \"../utils/lru-cache\";\nimport type { NamingOptions } from \"../utils/name-utils\";\nimport { resolveRef, toCamelCase } from \"../utils/name-utils\";\nimport { stripPrefix } from \"../utils/pattern-utils\";\nimport { addDescription, getPrimaryType, hasMultipleTypes, isNullable, wrapNullable } from \"../utils/string-utils\";\nimport { generateArrayValidation } from \"../validators/array-validator\";\nimport { generateAllOf, generateUnion } from \"../validators/composition-validator\";\nimport { generateNumberValidation } from \"../validators/number-validator\";\nimport type { ObjectMode } from \"../validators/object-validator\";\nimport { generateObjectSchema } from \"../validators/object-validator\";\nimport { generateStringValidation } from \"../validators/string-validator\";\n\nexport interface PropertyGeneratorContext {\n\tspec: OpenAPISpec;\n\tschemaDependencies: Map<string, Set<string>>;\n\tschemaType: \"all\" | \"request\" | \"response\";\n\tmode: ObjectMode;\n\tincludeDescriptions: boolean;\n\tuseDescribe: boolean;\n\tnamingOptions: NamingOptions;\n\tstripSchemaPrefix?: string;\n\t/**\n\t * Default nullable behavior when not explicitly specified\n\t * @default false\n\t */\n\tdefaultNullable: boolean;\n\t/**\n\t * Behavior for empty object schemas (objects with no properties defined)\n\t * @default 'loose'\n\t */\n\temptyObjectBehavior: \"strict\" | \"loose\" | \"record\";\n}\n\n/**\n * Property schema generator with memoization for performance\n */\nexport class PropertyGenerator {\n\tprivate context: PropertyGeneratorContext;\n\t// Performance optimization: Memoize filtered property results\n\tprivate filteredPropsCache = new Map<string, OpenAPISchema>();\n\t// Performance optimization: LRU cache for generated schemas\n\tprivate schemaCache = new LRUCache<string, string>(500);\n\n\t// Performance optimization: Lookup table for faster inclusion checks\n\tstatic readonly INCLUSION_RULES = {\n\t\trequest: (schema: OpenAPISchema) => !schema.readOnly,\n\t\tresponse: (schema: OpenAPISchema) => !schema.writeOnly,\n\t\tall: () => true,\n\t} as const;\n\n\tconstructor(context: PropertyGeneratorContext) {\n\t\tthis.context = context;\n\t}\n\n\t/**\n\t * Check if a property should be included based on schemaType and readOnly/writeOnly flags\n\t */\n\tshouldIncludeProperty(schema: OpenAPISchema): boolean {\n\t\tconst rule = PropertyGenerator.INCLUSION_RULES[this.context.schemaType];\n\t\treturn rule(schema);\n\t}\n\n\t/**\n\t * Recursively filter any schema type (helper for composition schemas)\n\t */\n\tprivate filterSchemaRecursive(schema: OpenAPISchema): OpenAPISchema {\n\t\tif (schema.$ref) {\n\t\t\t// Don't filter refs, they'll be filtered when resolved\n\t\t\treturn schema;\n\t\t}\n\n\t\tif (schema.properties) {\n\t\t\treturn this.filterNestedProperties(schema);\n\t\t}\n\n\t\tif (schema.type === \"array\" && schema.items && typeof schema.items === \"object\" && schema.items.properties) {\n\t\t\treturn {\n\t\t\t\t...schema,\n\t\t\t\titems: this.filterNestedProperties(schema.items),\n\t\t\t};\n\t\t}\n\n\t\treturn schema;\n\t}\n\n\t/**\n\t * Recursively filter properties in nested objects based on readOnly/writeOnly\n\t * Performance optimized with memoization\n\t */\n\tprivate filterNestedProperties(schema: OpenAPISchema): OpenAPISchema {\n\t\t// Performance optimization: More efficient cache key generation\n\t\tconst propKeys = schema.properties ? Object.keys(schema.properties).sort().join(\",\") : \"\";\n\t\tconst cacheKey = `${this.context.schemaType}:${schema.type || \"unknown\"}:${propKeys}:${schema.required?.join(\",\") || \"\"}`;\n\t\tconst cached = this.filteredPropsCache.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn cached;\n\t\t}\n\n\t\tif (!schema.properties) {\n\t\t\treturn schema;\n\t\t}\n\n\t\tconst filteredProperties: Record<string, OpenAPISchema> = {};\n\t\tconst filteredRequired: string[] = [];\n\n\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\tif (!this.shouldIncludeProperty(propSchema)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Recursively filter nested structures\n\t\t\tlet filteredPropSchema = propSchema;\n\n\t\t\tif (propSchema.type === \"object\" && propSchema.properties) {\n\t\t\t\t// Nested object\n\t\t\t\tfilteredPropSchema = this.filterNestedProperties(propSchema);\n\t\t\t} else if (\n\t\t\t\tpropSchema.type === \"array\" &&\n\t\t\t\tpropSchema.items &&\n\t\t\t\ttypeof propSchema.items === \"object\" &&\n\t\t\t\tpropSchema.items.properties\n\t\t\t) {\n\t\t\t\t// Array of objects\n\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t...propSchema,\n\t\t\t\t\titems: this.filterNestedProperties(propSchema.items),\n\t\t\t\t};\n\t\t\t} else if (propSchema.allOf || propSchema.oneOf || propSchema.anyOf) {\n\t\t\t\t// Composition schemas - filter each branch\n\t\t\t\tif (propSchema.allOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\tallOf: propSchema.allOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t} else if (propSchema.oneOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\toneOf: propSchema.oneOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t} else if (propSchema.anyOf) {\n\t\t\t\t\tfilteredPropSchema = {\n\t\t\t\t\t\t...propSchema,\n\t\t\t\t\t\tanyOf: propSchema.anyOf.map(s => this.filterSchemaRecursive(s)),\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfilteredProperties[propName] = filteredPropSchema;\n\n\t\t\t// Keep required status if property is included\n\t\t\tif (schema.required?.includes(propName)) {\n\t\t\t\tfilteredRequired.push(propName);\n\t\t\t}\n\t\t}\n\n\t\tconst result = {\n\t\t\t...schema,\n\t\t\tproperties: filteredProperties,\n\t\t\trequired: filteredRequired.length > 0 ? filteredRequired : undefined,\n\t\t};\n\n\t\t// Cache the result\n\t\tthis.filteredPropsCache.set(cacheKey, result);\n\t\treturn result;\n\t}\n\n\t/**\n\t * Resolve discriminator mapping to actual schema references\n\t */\n\tprivate resolveDiscriminatorMapping(mapping: Record<string, string>, schemas: OpenAPISchema[]): OpenAPISchema[] {\n\t\t// If mapping is provided, use it to reorder/filter schemas\n\t\t// The mapping maps discriminator values to schema references\n\t\tconst mappedSchemas: OpenAPISchema[] = [];\n\n\t\tfor (const [_, schemaRef] of Object.entries(mapping)) {\n\t\t\t// Find the schema that matches this reference\n\t\t\tconst matchingSchema = schemas.find(s => {\n\t\t\t\tif (s.$ref) {\n\t\t\t\t\t// Check if the ref matches\n\t\t\t\t\treturn s.$ref === schemaRef || s.$ref.endsWith(schemaRef);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tif (matchingSchema) {\n\t\t\t\tmappedSchemas.push(matchingSchema);\n\t\t\t} else {\n\t\t\t\t// Schema not found in oneOf/anyOf, create a reference\n\t\t\t\tmappedSchemas.push({ $ref: schemaRef });\n\t\t\t}\n\t\t}\n\n\t\t// Include any schemas that weren't in the mapping\n\t\tfor (const schema of schemas) {\n\t\t\tif (!mappedSchemas.includes(schema)) {\n\t\t\t\tmappedSchemas.push(schema);\n\t\t\t}\n\t\t}\n\n\t\treturn mappedSchemas;\n\t}\n\n\t/**\n\t * Resolve a $ref string to the actual schema\n\t */\n\tprivate resolveSchemaRef(ref: string): OpenAPISchema | undefined {\n\t\tconst schemaName = ref.split(\"/\").pop();\n\t\tif (!schemaName) return undefined;\n\t\treturn this.context.spec.components?.schemas?.[schemaName];\n\t}\n\n\t/**\n\t * Resolve a schema name through any aliases to get the actual schema name\n\t * If the schema is an alias (allOf with single $ref), return the target name\n\t */\n\tprivate resolveSchemaAlias(schemaName: string): string {\n\t\tconst schema = this.context.spec.components?.schemas?.[schemaName];\n\t\tif (!schema) return schemaName;\n\n\t\t// Check if this is a simple alias (allOf with single $ref and nothing else)\n\t\tif (\n\t\t\tschema.allOf &&\n\t\t\tschema.allOf.length === 1 &&\n\t\t\tschema.allOf[0].$ref &&\n\t\t\t!schema.properties &&\n\t\t\t!schema.oneOf &&\n\t\t\t!schema.anyOf\n\t\t) {\n\t\t\tconst targetName = resolveRef(schema.allOf[0].$ref);\n\t\t\t// Recursively resolve in case of chained aliases\n\t\t\treturn this.resolveSchemaAlias(targetName);\n\t\t}\n\n\t\treturn schemaName;\n\t}\n\n\t/**\n\t * Check if this is a circular dependency through aliases\n\t */\n\tprivate isCircularThroughAlias(fromSchema: string, toSchema: string): boolean {\n\t\tconst toSchemaSpec = this.context.spec.components?.schemas?.[toSchema];\n\t\tif (!toSchemaSpec) return false;\n\n\t\t// Check if toSchema is a simple alias (allOf with single $ref)\n\t\tif (toSchemaSpec.allOf && toSchemaSpec.allOf.length === 1 && toSchemaSpec.allOf[0].$ref) {\n\t\t\tconst aliasTarget = resolveRef(toSchemaSpec.allOf[0].$ref);\n\t\t\t// If the alias points back to the original schema, it's circular\n\t\t\treturn aliasTarget === fromSchema;\n\t\t}\n\n\t\treturn false;\n\t}\n\n\t/**\n\t * Generate union for multiple types (OpenAPI 3.1)\n\t */\n\tprivate generateMultiTypeUnion(schema: OpenAPISchema, currentSchema?: string): string {\n\t\tif (!Array.isArray(schema.type)) {\n\t\t\treturn \"z.unknown()\";\n\t\t}\n\t\tconst nonNullTypes = schema.type.filter(t => t !== \"null\");\n\t\tconst schemas = nonNullTypes.map(type => {\n\t\t\tconst typeSchema = { ...schema, type };\n\t\t\treturn this.generatePropertySchema(typeSchema, currentSchema);\n\t\t});\n\t\treturn `z.union([${schemas.join(\", \")}])`;\n\t}\n\n\t/**\n\t * Apply unevaluatedProperties validation to a schema\n\t */\n\tprivate applyUnevaluatedProperties(baseSchema: string, schema: OpenAPISchema): string {\n\t\t// Collect all evaluated properties from the schema and its composition\n\t\tconst evaluatedProps = new Set<string>();\n\n\t\t// Add properties from this schema\n\t\tif (schema.properties) {\n\t\t\tfor (const propName of Object.keys(schema.properties)) {\n\t\t\t\tevaluatedProps.add(propName);\n\t\t\t}\n\t\t}\n\n\t\t// Add properties from allOf/oneOf/anyOf (shallow scan)\n\t\tconst collectPropsFromComposition = (schemas?: OpenAPISchema[]) => {\n\t\t\tif (!schemas) return;\n\t\t\tfor (const subSchema of schemas) {\n\t\t\t\tif (subSchema.properties) {\n\t\t\t\t\tfor (const propName of Object.keys(subSchema.properties)) {\n\t\t\t\t\t\tevaluatedProps.add(propName);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t// Also check $ref schemas\n\t\t\t\tif (subSchema.$ref) {\n\t\t\t\t\tconst refSchema = this.context.spec.components?.schemas?.[subSchema.$ref.split(\"/\").pop() || \"\"];\n\t\t\t\t\tif (refSchema?.properties) {\n\t\t\t\t\t\tfor (const propName of Object.keys(refSchema.properties)) {\n\t\t\t\t\t\t\tevaluatedProps.add(propName);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\tcollectPropsFromComposition(schema.allOf);\n\t\tcollectPropsFromComposition(schema.oneOf);\n\t\tcollectPropsFromComposition(schema.anyOf);\n\n\t\tconst evaluatedPropsSet = `new Set(${JSON.stringify([...evaluatedProps])})`;\n\n\t\t// For unions (oneOf/anyOf), we need to add .catchall(z.unknown()) to EACH branch\n\t\t// For allOf with extend(), add catchall to the final result\n\t\tlet schemaWithCatchall = baseSchema;\n\t\tif (baseSchema.includes(\".union([\") || baseSchema.includes(\".discriminatedUnion(\")) {\n\t\t\t// For unions, we need to make each branch allow additional properties\n\t\t\t// This is complex, so we'll apply refinement and let the refinement check the raw input\n\t\t\t// The union will have already validated structure, refinement checks extra props\n\t\t\tschemaWithCatchall = baseSchema;\n\t\t} else if (baseSchema.includes(\".extend(\")) {\n\t\t\t// Wrap in catchall - apply to final result\n\t\t\tschemaWithCatchall = `${baseSchema}.catchall(z.unknown())`;\n\t\t}\n\n\t\tif (schema.unevaluatedProperties === false) {\n\t\t\t// No unevaluated properties allowed\n\t\t\treturn `${schemaWithCatchall}.refine((obj) => Object.keys(obj).every(key => ${evaluatedPropsSet}.has(key)), { message: \"No unevaluated properties allowed\" })`;\n\t\t} else if (typeof schema.unevaluatedProperties === \"object\") {\n\t\t\t// Unevaluated properties must match schema\n\t\t\tconst unevalSchema = this.generatePropertySchema(schema.unevaluatedProperties);\n\t\t\treturn `${schemaWithCatchall}.refine((obj) => Object.keys(obj).filter(key => !${evaluatedPropsSet}.has(key)).every(key => ${unevalSchema}.safeParse(obj[key]).success), { message: \"Unevaluated properties must match the schema\" })`;\n\t\t}\n\n\t\treturn baseSchema;\n\t}\n\n\t/**\n\t * Generate Zod schema for a property\n\t * @param schema - The OpenAPI schema to generate\n\t * @param currentSchema - The name of the current schema being processed (for circular ref detection)\n\t * @param isTopLevel - Whether this is a top-level schema definition\n\t * @param suppressDefaultNullable - When true, don't apply defaultNullable (used when outer schema has explicit nullable: false)\n\t */\n\tgeneratePropertySchema(\n\t\tschema: OpenAPISchema,\n\t\tcurrentSchema?: string,\n\t\tisTopLevel = false,\n\t\tsuppressDefaultNullable = false\n\t): string {\n\t\t// Performance optimization: Check cache for simple schemas\n\t\t// Only cache schemas without $ref or complex compositions to avoid stale circular refs\n\t\tconst isCacheable = !schema.$ref && !schema.allOf && !schema.oneOf && !schema.anyOf && !currentSchema;\n\t\tif (isCacheable) {\n\t\t\tconst cacheKey = JSON.stringify({\n\t\t\t\tschema,\n\t\t\t\ttype: this.context.schemaType,\n\t\t\t\tmode: this.context.mode,\n\t\t\t\tsuppressDefaultNullable,\n\t\t\t});\n\t\t\tconst cached = this.schemaCache.get(cacheKey);\n\t\t\tif (cached) {\n\t\t\t\treturn cached;\n\t\t\t}\n\t\t}\n\n\t\t// Apply nested property filtering if needed\n\t\tif ((this.context.schemaType === \"request\" || this.context.schemaType === \"response\") && schema.properties) {\n\t\t\tschema = this.filterNestedProperties(schema);\n\t\t}\n\n\t\t// Determine if defaultNullable should apply to this schema.\n\t\t// defaultNullable should apply to property values within objects, NOT to:\n\t\t// 1. Top-level schema definitions (isTopLevel = true)\n\t\t// 2. Enum values - enums define discrete values and shouldn't be nullable by default\n\t\t// 3. Const/literal values - these are exact values and shouldn't be nullable by default\n\t\t// 4. When suppressDefaultNullable is true (outer schema has explicit nullable: false)\n\t\t//\n\t\t// Note: $ref properties DO respect defaultNullable. If you want a non-nullable\n\t\t// reference when defaultNullable is true, you must explicitly add `nullable: false`\n\t\t// to the schema containing the $ref.\n\t\tconst isEnum = !!schema.enum;\n\t\tconst isConst = schema.const !== undefined;\n\t\tconst shouldApplyDefaultNullable = !isTopLevel && !isEnum && !isConst && !suppressDefaultNullable;\n\t\tconst effectiveDefaultNullable = shouldApplyDefaultNullable ? this.context.defaultNullable : false;\n\t\tconst nullable = isNullable(schema, effectiveDefaultNullable);\n\n\t\t// Handle multiple types (OpenAPI 3.1)\n\t\tif (hasMultipleTypes(schema)) {\n\t\t\tconst union = this.generateMultiTypeUnion(schema, currentSchema);\n\t\t\treturn wrapNullable(union, nullable);\n\t\t}\n\n\t\t// Handle $ref\n\t\tif (schema.$ref) {\n\t\t\tconst refName = resolveRef(schema.$ref);\n\t\t\t// Resolve through any aliases to get the actual schema\n\t\t\tconst resolvedRefName = this.resolveSchemaAlias(refName);\n\n\t\t\t// Track dependency (but not if it's just an alias at top level)\n\t\t\tif (currentSchema && refName !== currentSchema && !isTopLevel) {\n\t\t\t\tif (!this.context.schemaDependencies.has(currentSchema)) {\n\t\t\t\t\tthis.context.schemaDependencies.set(currentSchema, new Set());\n\t\t\t\t}\n\t\t\t\tthis.context.schemaDependencies.get(currentSchema)?.add(refName);\n\t\t\t}\n\t\t\t// Use the resolved name for the schema reference\n\t\t\t// Apply stripSchemaPrefix to get consistent schema names\n\t\t\tconst strippedRefName = stripPrefix(resolvedRefName, this.context.stripSchemaPrefix);\n\t\t\tconst schemaName = `${toCamelCase(strippedRefName, this.context.namingOptions)}Schema`; // Check for direct self-reference or circular dependency through alias\n\t\t\tif (currentSchema && (refName === currentSchema || this.isCircularThroughAlias(currentSchema, refName))) {\n\t\t\t\t// Use lazy evaluation for circular references with explicit type annotation\n\t\t\t\tconst lazySchema = `z.lazy((): z.ZodTypeAny => ${schemaName})`;\n\t\t\t\treturn wrapNullable(lazySchema, nullable);\n\t\t\t}\n\n\t\t\treturn wrapNullable(schemaName, nullable);\n\t\t}\n\n\t\t// Handle const (literal values)\n\t\tif (schema.const !== undefined) {\n\t\t\tconst literalValue = typeof schema.const === \"string\" ? `\"${schema.const}\"` : schema.const;\n\t\t\tconst zodLiteral = `z.literal(${literalValue})`;\n\t\t\treturn wrapNullable(zodLiteral, nullable);\n\t\t}\n\n\t\t// Handle enum\n\t\tif (schema.enum) {\n\t\t\t// Check if all values are booleans\n\t\t\tconst allBooleans = schema.enum.every(v => typeof v === \"boolean\");\n\t\t\tif (allBooleans) {\n\t\t\t\tconst zodBoolean = \"z.boolean()\";\n\t\t\t\treturn wrapNullable(zodBoolean, nullable);\n\t\t\t}\n\n\t\t\t// Check if all values are strings\n\t\t\tconst allStrings = schema.enum.every(v => typeof v === \"string\");\n\t\t\tif (allStrings) {\n\t\t\t\tconst enumValues = schema.enum.map(v => `\"${v}\"`).join(\", \");\n\t\t\t\tconst zodEnum = `z.enum([${enumValues}])`;\n\t\t\t\treturn wrapNullable(zodEnum, nullable);\n\t\t\t}\n\n\t\t\t// For numeric or mixed enums, use z.union with z.literal\n\t\t\tconst literalValues = schema.enum\n\t\t\t\t.map(v => {\n\t\t\t\t\tif (typeof v === \"string\") {\n\t\t\t\t\t\treturn `z.literal(\"${v}\")`;\n\t\t\t\t\t}\n\t\t\t\t\treturn `z.literal(${v})`;\n\t\t\t\t})\n\t\t\t\t.join(\", \");\n\t\t\tconst zodUnion = `z.union([${literalValues}])`;\n\t\t\treturn wrapNullable(zodUnion, nullable);\n\t\t}\n\n\t\t// Handle allOf\n\t\tif (schema.allOf) {\n\t\t\t// For allOf compositions, only apply nullable if explicitly set on the schema.\n\t\t\t// defaultNullable should NOT apply to composition results - they define schema shapes,\n\t\t\t// not property values. The .nullable() on individual properties inside the composition\n\t\t\t// is handled by generateInlineObjectShape which respects defaultNullable.\n\t\t\tconst compositionNullable = isNullable(schema, false);\n\t\t\tlet composition = generateAllOf(\n\t\t\t\tschema.allOf,\n\t\t\t\tcompositionNullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tgenerateInlineObjectShape: this.generateInlineObjectShape.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\tcurrentSchema\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle oneOf with discriminator support\n\t\tif (schema.oneOf) {\n\t\t\t// For oneOf compositions, only apply nullable if explicitly set on the schema.\n\t\t\t// defaultNullable should NOT apply to composition results.\n\t\t\tconst compositionNullable = isNullable(schema, false);\n\t\t\tconst needsPassthrough = schema.unevaluatedProperties !== undefined;\n\t\t\tlet composition = generateUnion(\n\t\t\t\tschema.oneOf,\n\t\t\t\tschema.discriminator?.propertyName,\n\t\t\t\tcompositionNullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tresolveDiscriminatorMapping: this.resolveDiscriminatorMapping.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpassthrough: needsPassthrough,\n\t\t\t\t\tdiscriminatorMapping: schema.discriminator?.mapping,\n\t\t\t\t},\n\t\t\t\tcurrentSchema\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle anyOf with discriminator support\n\t\tif (schema.anyOf) {\n\t\t\t// For anyOf compositions, only apply nullable if explicitly set on the schema.\n\t\t\t// defaultNullable should NOT apply to composition results.\n\t\t\tconst compositionNullable = isNullable(schema, false);\n\t\t\tconst needsPassthrough = schema.unevaluatedProperties !== undefined;\n\t\t\tlet composition = generateUnion(\n\t\t\t\tschema.anyOf,\n\t\t\t\tschema.discriminator?.propertyName,\n\t\t\t\tcompositionNullable,\n\t\t\t\t{\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tresolveDiscriminatorMapping: this.resolveDiscriminatorMapping.bind(this),\n\t\t\t\t\tresolveSchemaRef: this.resolveSchemaRef.bind(this),\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tpassthrough: needsPassthrough,\n\t\t\t\t\tdiscriminatorMapping: schema.discriminator?.mapping,\n\t\t\t\t},\n\t\t\t\tcurrentSchema\n\t\t\t);\n\n\t\t\t// Apply unevaluatedProperties if specified\n\t\t\tif (schema.unevaluatedProperties !== undefined) {\n\t\t\t\tcomposition = this.applyUnevaluatedProperties(composition, schema);\n\t\t\t}\n\n\t\t\treturn composition;\n\t\t}\n\n\t\t// Handle not keyword (must be after compositions)\n\t\tif (schema.not) {\n\t\t\tconst notSchema = this.generatePropertySchema(schema.not, currentSchema);\n\t\t\tlet baseValidation: string;\n\n\t\t\t// If schema has a type, generate validation for that type first\n\t\t\tif (schema.type || schema.properties || schema.items) {\n\t\t\t\t// Create a copy without 'not' to generate base validation\n\t\t\t\tconst { not: _, ...baseSchema } = schema;\n\t\t\t\tbaseValidation = this.generatePropertySchema(baseSchema, currentSchema);\n\t\t\t} else {\n\t\t\t\t// No specific type, use unknown\n\t\t\t\tbaseValidation = \"z.unknown()\";\n\t\t\t}\n\n\t\t\tconst refined = `${baseValidation}.refine((val) => !${notSchema}.safeParse(val).success, { message: \"Value must not match the excluded schema\" })`;\n\t\t\treturn wrapNullable(refined, nullable);\n\t\t}\n\n\t\tlet validation = \"\";\n\t\tconst primaryType = getPrimaryType(schema);\n\n\t\tswitch (primaryType) {\n\t\t\tcase \"string\":\n\t\t\t\tvalidation = generateStringValidation(schema, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"number\":\n\t\t\t\tvalidation = generateNumberValidation(schema, false, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"integer\":\n\t\t\t\tvalidation = generateNumberValidation(schema, true, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"boolean\":\n\t\t\t\tvalidation = \"z.boolean()\";\n\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\tbreak;\n\n\t\t\tcase \"array\":\n\t\t\t\tvalidation = generateArrayValidation(schema, {\n\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\tuseDescribe: this.context.useDescribe,\n\t\t\t\t\tcurrentSchema,\n\t\t\t\t});\n\t\t\t\tbreak;\n\n\t\t\tcase \"object\":\n\t\t\t\tif (\n\t\t\t\t\tschema.properties ||\n\t\t\t\t\tschema.required ||\n\t\t\t\t\tschema.minProperties !== undefined ||\n\t\t\t\t\tschema.maxProperties !== undefined ||\n\t\t\t\t\tschema.patternProperties ||\n\t\t\t\t\tschema.propertyNames\n\t\t\t\t) {\n\t\t\t\t\tvalidation = generateObjectSchema(\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tgeneratePropertySchema: this.generatePropertySchema.bind(this),\n\t\t\t\t\t\t\tshouldIncludeProperty: this.shouldIncludeProperty.bind(this),\n\t\t\t\t\t\t\tmode: this.context.mode,\n\t\t\t\t\t\t\tincludeDescriptions: this.context.includeDescriptions,\n\t\t\t\t\t\t\tuseDescribe: this.context.useDescribe,\n\t\t\t\t\t\t},\n\t\t\t\t\t\tcurrentSchema\n\t\t\t\t\t);\n\t\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\t} else {\n\t\t\t\t\t// Empty object schema - behavior controlled by emptyObjectBehavior option\n\t\t\t\t\tswitch (this.context.emptyObjectBehavior) {\n\t\t\t\t\t\tcase \"strict\":\n\t\t\t\t\t\t\tvalidation = \"z.strictObject({})\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase \"loose\":\n\t\t\t\t\t\t\tvalidation = \"z.looseObject({})\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tvalidation = \"z.record(z.string(), z.unknown())\";\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tvalidation = \"z.unknown()\";\n\t\t\t\tvalidation = addDescription(validation, schema.description, this.context.useDescribe);\n\t\t}\n\n\t\tconst result = wrapNullable(validation, nullable);\n\n\t\t// Store in cache if cacheable\n\t\tif (isCacheable) {\n\t\t\tconst cacheKey = JSON.stringify({ schema, type: this.context.schemaType, mode: this.context.mode });\n\t\t\tthis.schemaCache.set(cacheKey, result);\n\t\t}\n\n\t\treturn result;\n\t}\n\n\t/**\n\t * Generate inline object shape for use with .extend()\n\t * Returns just the shape object literal: { prop1: z.string(), prop2: z.number() }\n\t *\n\t * This method is specifically for allOf compositions where we need to pass\n\t * the shape directly to .extend() instead of using z.object({...}).shape.\n\t * This avoids the .nullable().shape bug when inline objects have nullable: true.\n\t *\n\t * According to Zod docs (https://zod.dev/api?id=extend):\n\t * - .extend() accepts an object of shape definitions\n\t * - e.g., baseSchema.extend({ prop: z.string() })\n\t */\n\tgenerateInlineObjectShape(schema: OpenAPISchema, currentSchema?: string): string {\n\t\tconst required = new Set(schema.required || []);\n\t\tconst properties: string[] = [];\n\n\t\tif (schema.properties) {\n\t\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t\t// Skip properties based on readOnly/writeOnly\n\t\t\t\tif (!this.shouldIncludeProperty(propSchema)) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tconst isRequired = required.has(propName);\n\t\t\t\tconst zodSchema = this.generatePropertySchema(propSchema, currentSchema);\n\n\t\t\t\t// Quote property name if it contains special characters\n\t\t\t\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\t\t\t\tconst quotedPropName = validIdentifier.test(propName) ? propName : `\"${propName}\"`;\n\n\t\t\t\tlet propertyDef = `${quotedPropName}: ${zodSchema}`;\n\t\t\t\tif (!isRequired) {\n\t\t\t\t\tpropertyDef += \".optional()\";\n\t\t\t\t}\n\n\t\t\t\tproperties.push(propertyDef);\n\t\t\t}\n\t\t}\n\n\t\t// Return the shape as an object literal\n\t\tif (properties.length === 0) {\n\t\t\treturn \"{}\";\n\t\t}\n\n\t\treturn `{\\n${properties.map(p => `\\t${p}`).join(\",\\n\")}\\n}`;\n\t}\n}\n","/**\n * @shared Simple LRU Cache implementation for performance optimization\n * @since 1.0.0\n * Utility used by core and playwright packages\n * Prevents memory leaks from unbounded cache growth\n */\nexport class LRUCache<K, V> {\n\tprivate cache = new Map<K, V>();\n\tprivate maxSize: number;\n\n\tconstructor(maxSize: number) {\n\t\tthis.maxSize = maxSize;\n\t}\n\n\tget capacity(): number {\n\t\treturn this.maxSize;\n\t}\n\n\tget(key: K): V | undefined {\n\t\tif (!this.cache.has(key)) return undefined;\n\t\t// Move to end (most recently used)\n\t\tconst value = this.cache.get(key);\n\t\tif (value === undefined) return undefined;\n\t\tthis.cache.delete(key);\n\t\tthis.cache.set(key, value);\n\t\treturn value;\n\t}\n\n\tset(key: K, value: V): void {\n\t\tif (this.cache.has(key)) {\n\t\t\tthis.cache.delete(key);\n\t\t} else if (this.cache.size >= this.maxSize) {\n\t\t\t// Remove least recently used (first item)\n\t\t\tconst firstKey = this.cache.keys().next().value;\n\t\t\tif (firstKey !== undefined) {\n\t\t\t\tthis.cache.delete(firstKey);\n\t\t\t}\n\t\t}\n\t\tthis.cache.set(key, value);\n\t}\n\n\thas(key: K): boolean {\n\t\treturn this.cache.has(key);\n\t}\n\n\tclear(): void {\n\t\tthis.cache.clear();\n\t}\n\n\tsize(): number {\n\t\treturn this.cache.size;\n\t}\n}\n","import { minimatch } from \"minimatch\";\n\n/**\n * Pattern matching utilities for prefix stripping\n *\n * Shared utility used by core and playwright packages\n *\n * Supports both literal string matching and glob patterns for stripping\n * prefixes from strings (paths, schema names, etc.)\n */\n\n/**\n * Validates if a glob pattern is syntactically valid\n * @param pattern - The glob pattern to validate\n * @returns true if valid, false otherwise\n */\nfunction isValidGlobPattern(pattern: string): boolean {\n\ttry {\n\t\t// Try to create a minimatch instance to validate the pattern\n\t\tnew minimatch.Minimatch(pattern);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\n/**\n * Checks if a pattern contains glob special characters\n * @param pattern - The pattern to check\n * @returns true if pattern contains glob wildcards\n */\nfunction isGlobPattern(pattern: string): boolean {\n\treturn /[*?[\\]{}!]/.test(pattern);\n}\n\n/**\n * @shared Strips a prefix from a string using either literal string matching or glob patterns\n * @since 1.1.0\n * Shared utility used by core and playwright packages\n *\n * @param input - The full string to strip from\n * @param pattern - The glob pattern to strip\n * @param ensureLeadingChar - Optional character to ensure at start (e.g., \"/\" for paths)\n * @returns The string with prefix removed, or original string if no match\n *\n * @example\n * // Literal string matching\n * stripPrefix(\"/api/v1/users\", \"/api/v1\") // => \"/users\"\n * stripPrefix(\"Company.Models.User\", \"Company.Models.\") // => \"User\"\n *\n * @example\n * // Glob pattern matching\n * stripPrefix(\"/api/v1.0/users\", \"/api/v*\") // => matches and strips\n * stripPrefix(\"Company.Models.User\", \"*.Models.\") // => \"User\"\n * stripPrefix(\"api_v2_UserSchema\", \"api_v[0-9]_\") // => \"UserSchema\"\n */\nexport function stripPrefix(input: string, pattern: string | undefined, ensureLeadingChar?: string): string {\n\tif (!pattern) {\n\t\treturn input;\n\t}\n\n\t// Validate glob pattern if it contains special characters\n\tif (isGlobPattern(pattern) && !isValidGlobPattern(pattern)) {\n\t\tconsole.warn(`⚠️ Invalid glob pattern \"${pattern}\": Pattern is malformed`);\n\t\treturn input;\n\t}\n\n\t// Check if pattern contains glob wildcards\n\tif (isGlobPattern(pattern)) {\n\t\t// Use glob matching to find the prefix\n\t\t// We need to find what part of the input matches the pattern as a prefix\n\t\t// Try matching progressively longer prefixes to find the longest match\n\t\tlet longestMatch = -1;\n\n\t\tfor (let i = 1; i <= input.length; i++) {\n\t\t\tconst testPrefix = input.substring(0, i);\n\t\t\tif (minimatch(testPrefix, pattern)) {\n\t\t\t\t// Found a match - keep looking for a longer match\n\t\t\t\tlongestMatch = i;\n\t\t\t}\n\t\t}\n\n\t\tif (longestMatch > 0) {\n\t\t\t// Strip the longest matching prefix\n\t\t\tconst stripped = input.substring(longestMatch);\n\n\t\t\t// Ensure result starts with specified character if provided\n\t\t\tif (ensureLeadingChar) {\n\t\t\t\tif (stripped === \"\") {\n\t\t\t\t\treturn ensureLeadingChar;\n\t\t\t\t}\n\t\t\t\tif (!stripped.startsWith(ensureLeadingChar)) {\n\t\t\t\t\treturn `${ensureLeadingChar}${stripped}`;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn stripped === \"\" && !ensureLeadingChar ? input : stripped;\n\t\t}\n\n\t\t// No match found\n\t\treturn input;\n\t}\n\n\t// Literal string matching\n\tif (input.startsWith(pattern)) {\n\t\tconst stripped = input.substring(pattern.length);\n\n\t\t// Ensure result starts with specified character if provided\n\t\tif (ensureLeadingChar) {\n\t\t\tif (stripped === \"\") {\n\t\t\t\treturn ensureLeadingChar;\n\t\t\t}\n\t\t\tif (!stripped.startsWith(ensureLeadingChar)) {\n\t\t\t\treturn `${ensureLeadingChar}${stripped}`;\n\t\t\t}\n\t\t}\n\n\t\treturn stripped;\n\t}\n\n\t// No match - return original input\n\treturn input;\n}\n\n/**\n * @shared Strips a prefix from a path (ensures leading slash)\n * @since 1.1.0\n * Shared utility used by playwright package for path manipulation\n *\n * @param path - The full path to strip from\n * @param pattern - The glob pattern to strip\n * @returns The path with prefix removed, or original path if no match\n *\n * @example\n * stripPathPrefix(\"/api/v1/users\", \"/api/v1\") // => \"/users\"\n * stripPathPrefix(\"/api/v2/posts\", \"/api/v*\") // => \"/posts\"\n * stripPathPrefix(\"/api/v1.0/items\", \"/api/v[0-9].*\") // => \"/items\"\n */\nexport function stripPathPrefix(path: string, pattern: string | undefined): string {\n\tif (!pattern) {\n\t\treturn path;\n\t}\n\n\t// For literal string matching with paths, normalize the pattern\n\tif (!isGlobPattern(pattern)) {\n\t\tlet normalizedPattern = pattern.trim();\n\t\tif (!normalizedPattern.startsWith(\"/\")) {\n\t\t\tnormalizedPattern = `/${normalizedPattern}`;\n\t\t}\n\t\tif (normalizedPattern.endsWith(\"/\") && normalizedPattern !== \"/\") {\n\t\t\tnormalizedPattern = normalizedPattern.slice(0, -1);\n\t\t}\n\n\t\treturn stripPrefix(path, normalizedPattern, \"/\");\n\t}\n\n\t// For glob patterns, use as-is\n\treturn stripPrefix(path, pattern, \"/\");\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { addDescription } from \"../utils/string-utils\";\n\nexport interface ArrayValidatorContext {\n\tgeneratePropertySchema: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tuseDescribe: boolean;\n\tcurrentSchema?: string;\n}\n\n/**\n * Generate array or tuple validation\n */\nexport function generateArrayValidation(schema: OpenAPISchema, context: ArrayValidatorContext): string {\n\tlet validation: string;\n\n\t// Handle prefixItems (tuple validation - OpenAPI 3.1)\n\tif (schema.prefixItems && schema.prefixItems.length > 0) {\n\t\tconst tupleItems = schema.prefixItems.map(item => context.generatePropertySchema(item, context.currentSchema));\n\t\tvalidation = `z.tuple([${tupleItems.join(\", \")}])`;\n\n\t\t// Add rest items if specified (items after the fixed prefix)\n\t\t// items takes precedence over unevaluatedItems\n\t\tif (schema.items) {\n\t\t\tconst restSchema = context.generatePropertySchema(schema.items, context.currentSchema);\n\t\t\tvalidation += `.rest(${restSchema})`;\n\t\t} else if (schema.unevaluatedItems && typeof schema.unevaluatedItems === \"object\") {\n\t\t\t// Use unevaluatedItems as rest schema if items not specified\n\t\t\tconst restSchema = context.generatePropertySchema(schema.unevaluatedItems, context.currentSchema);\n\t\t\tvalidation += `.rest(${restSchema})`;\n\t\t}\n\t\t// If unevaluatedItems is false (or undefined), tuple has fixed length by default\n\t} else if (schema.items) {\n\t\tconst itemSchema = context.generatePropertySchema(schema.items, context.currentSchema);\n\t\tvalidation = `z.array(${itemSchema})`;\n\n\t\t// Add array constraints\n\t\tif (schema.minItems !== undefined) {\n\t\t\tvalidation += `.min(${schema.minItems})`;\n\t\t}\n\t\tif (schema.maxItems !== undefined) {\n\t\t\tvalidation += `.max(${schema.maxItems})`;\n\t\t}\n\n\t\t// Add uniqueItems constraint\n\t\tif (schema.uniqueItems === true) {\n\t\t\tvalidation += `.refine((items) => new Set(items).size === items.length, { message: \"Array items must be unique\" })`;\n\t\t}\n\t} else {\n\t\tvalidation = \"z.array(z.unknown())\";\n\t}\n\n\t// Handle contains with min/max constraints\n\tif (schema.contains) {\n\t\tconst containsSchema = context.generatePropertySchema(schema.contains, context.currentSchema);\n\t\tconst minCount = schema.minContains ?? 1;\n\t\tconst maxCount = schema.maxContains;\n\n\t\tif (maxCount !== undefined) {\n\t\t\t// Both min and max\n\t\t\tvalidation += `.refine((arr) => { const matches = arr.filter(item => ${containsSchema}.safeParse(item).success); return matches.length >= ${minCount} && matches.length <= ${maxCount}; }, { message: \"Array must contain between ${minCount} and ${maxCount} items matching the schema\" })`;\n\t\t} else {\n\t\t\t// Just min\n\t\t\tvalidation += `.refine((arr) => arr.filter(item => ${containsSchema}.safeParse(item).success).length >= ${minCount}, { message: \"Array must contain at least ${minCount} item(s) matching the schema\" })`;\n\t\t}\n\t}\n\n\t// Handle unevaluatedItems (OpenAPI 3.1) - only applies to prefixItems scenarios\n\t// Note: unevaluatedItems with prefixItems should use .rest() which was already handled above\n\t// This section handles the false case which needs to restrict the length\n\tif (schema.unevaluatedItems === false && schema.prefixItems && schema.prefixItems.length > 0 && !schema.items) {\n\t\t// No items beyond prefixItems allowed - add length restriction\n\t\tconst prefixCount = schema.prefixItems.length;\n\t\tvalidation += `.refine((arr) => arr.length <= ${prefixCount}, { message: \"No unevaluated items allowed beyond prefix items\" })`;\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, context.useDescribe);\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { wrapNullable } from \"../utils/string-utils\";\n\nexport interface CompositionValidatorContext {\n\tgeneratePropertySchema: (\n\t\tschema: OpenAPISchema,\n\t\tcurrentSchema?: string,\n\t\tisTopLevel?: boolean,\n\t\tsuppressDefaultNullable?: boolean\n\t) => string;\n\t/**\n\t * Generate inline object shape for use with .extend()\n\t * Returns just the shape object literal: { prop1: z.string(), prop2: z.number() }\n\t * This avoids the .nullable().shape bug when inline objects have nullable: true\n\t */\n\tgenerateInlineObjectShape?: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tresolveDiscriminatorMapping?: (mapping: Record<string, string>, schemas: OpenAPISchema[]) => OpenAPISchema[];\n\tresolveSchemaRef?: (ref: string) => OpenAPISchema | undefined;\n}\n\nexport interface UnionOptions {\n\tpassthrough?: boolean;\n\tdiscriminatorMapping?: Record<string, string>;\n}\n\n/**\n * Check if discriminator property is required in all schemas\n */\nfunction isDiscriminatorRequired(\n\tschemas: OpenAPISchema[],\n\tdiscriminator: string,\n\tcontext: CompositionValidatorContext\n): { valid: boolean; invalidSchemas: string[] } {\n\tconst invalidSchemas: string[] = [];\n\n\tfor (const schema of schemas) {\n\t\tconst resolved = resolveSchema(schema, context);\n\t\tconst required = resolved.required || [];\n\n\t\tif (!required.includes(discriminator)) {\n\t\t\tconst schemaName = schema.$ref ? schema.$ref.split(\"/\").pop() || \"inline\" : \"inline\";\n\t\t\tinvalidSchemas.push(schemaName);\n\t\t}\n\t}\n\n\treturn {\n\t\tvalid: invalidSchemas.length === 0,\n\t\tinvalidSchemas,\n\t};\n}\n\n/**\n * Generate union validation\n */\nexport function generateUnion(\n\tschemas: OpenAPISchema[],\n\tdiscriminator: string | undefined,\n\tisNullable: boolean,\n\tcontext: CompositionValidatorContext,\n\toptions?: UnionOptions,\n\tcurrentSchema?: string\n): string {\n\t// Handle empty oneOf/anyOf - malformed spec, warn and return z.never()\n\tif (schemas.length === 0) {\n\t\tconsole.warn(\n\t\t\t\"[openapi-to-zod] Warning: Empty oneOf/anyOf array encountered. This is likely a malformed OpenAPI spec. Generating z.never() as fallback.\"\n\t\t);\n\t\treturn wrapNullable(\n\t\t\t'z.never().describe(\"Empty oneOf/anyOf in OpenAPI spec - no valid schema defined\")',\n\t\t\tisNullable\n\t\t);\n\t}\n\n\t// Simplify single-item oneOf/anyOf - no union needed\n\tif (schemas.length === 1) {\n\t\t// Suppress defaultNullable - this is a schema definition, not a property value\n\t\tlet singleSchema = context.generatePropertySchema(schemas[0], currentSchema, false, true);\n\t\tif (options?.passthrough && !singleSchema.includes(\".catchall(\")) {\n\t\t\tsingleSchema = `${singleSchema}.catchall(z.unknown())`;\n\t\t}\n\t\treturn wrapNullable(singleSchema, isNullable);\n\t}\n\n\tif (discriminator) {\n\t\t// Apply discriminator mapping if provided\n\t\tlet resolvedSchemas = schemas;\n\t\tif (options?.discriminatorMapping && context.resolveDiscriminatorMapping) {\n\t\t\tresolvedSchemas = context.resolveDiscriminatorMapping(options.discriminatorMapping, schemas);\n\t\t}\n\n\t\t// Check if discriminator is required in all schemas\n\t\tconst discriminatorCheck = isDiscriminatorRequired(resolvedSchemas, discriminator, context);\n\n\t\tif (!discriminatorCheck.valid) {\n\t\t\t// Discriminator is not required in all schemas - fallback to z.union()\n\t\t\tconsole.warn(\n\t\t\t\t`[openapi-to-zod] Warning: Discriminator \"${discriminator}\" is not required in schemas: ${discriminatorCheck.invalidSchemas.join(\", \")}. ` +\n\t\t\t\t\t\"Falling back to z.union() instead of z.discriminatedUnion().\"\n\t\t\t);\n\n\t\t\t// Suppress defaultNullable on each variant - they are schema definitions, not property values\n\t\t\tlet schemaStrings = resolvedSchemas.map(s => context.generatePropertySchema(s, currentSchema, false, true));\n\t\t\tif (options?.passthrough) {\n\t\t\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t\t\t}\n\n\t\t\tconst fallbackDescription = `Discriminator \"${discriminator}\" is optional in some schemas (${discriminatorCheck.invalidSchemas.join(\", \")}), using z.union() instead of z.discriminatedUnion()`;\n\t\t\tconst union = `z.union([${schemaStrings.join(\", \")}]).describe(\"${fallbackDescription}\")`;\n\t\t\treturn wrapNullable(union, isNullable);\n\t\t}\n\n\t\t// Use discriminated union for better type inference\n\t\t// Suppress defaultNullable on each variant - they are schema definitions, not property values\n\t\tlet schemaStrings = resolvedSchemas.map(s => context.generatePropertySchema(s, currentSchema, false, true));\n\t\tif (options?.passthrough) {\n\t\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t\t}\n\t\tconst union = `z.discriminatedUnion(\"${discriminator}\", [${schemaStrings.join(\", \")}])`;\n\t\treturn wrapNullable(union, isNullable);\n\t}\n\n\t// Suppress defaultNullable on each variant - they are schema definitions, not property values\n\tlet schemaStrings = schemas.map(s => context.generatePropertySchema(s, currentSchema, false, true));\n\tif (options?.passthrough) {\n\t\tschemaStrings = schemaStrings.map(s => (s.includes(\".catchall(\") ? s : `${s}.catchall(z.unknown())`));\n\t}\n\tconst union = `z.union([${schemaStrings.join(\", \")}])`;\n\treturn wrapNullable(union, isNullable);\n}\n\n/**\n * Helper to resolve schema (follows $ref if needed)\n */\nfunction resolveSchema(schema: OpenAPISchema, context: CompositionValidatorContext): OpenAPISchema {\n\tif (schema.$ref && context.resolveSchemaRef) {\n\t\tconst resolved = context.resolveSchemaRef(schema.$ref);\n\t\tif (resolved) {\n\t\t\treturn resolved;\n\t\t}\n\t}\n\treturn schema;\n}\n\n/**\n * Collect properties from a schema (including nested allOf)\n */\nfunction collectProperties(\n\tschema: OpenAPISchema,\n\tcontext: CompositionValidatorContext\n): Map<string, { schema: OpenAPISchema; source: string }> {\n\tconst resolved = resolveSchema(schema, context);\n\tconst props = new Map<string, { schema: OpenAPISchema; source: string }>();\n\n\t// Get source name for error messages\n\tconst sourceName = schema.$ref ? schema.$ref.split(\"/\").pop() || \"unknown\" : \"inline\";\n\n\t// Collect direct properties\n\tif (resolved.properties) {\n\t\tfor (const [key, value] of Object.entries(resolved.properties)) {\n\t\t\tprops.set(key, { schema: value, source: sourceName });\n\t\t}\n\t}\n\n\t// Recursively collect from nested allOf\n\tif (resolved.allOf) {\n\t\tfor (const subSchema of resolved.allOf) {\n\t\t\tconst subProps = collectProperties(subSchema, context);\n\t\t\tfor (const [key, value] of subProps) {\n\t\t\t\tif (!props.has(key)) {\n\t\t\t\t\tprops.set(key, value);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn props;\n}\n\n/**\n * Check if two schemas are semantically equivalent\n */\nfunction schemasMatch(a: OpenAPISchema, b: OpenAPISchema): boolean {\n\t// Simple deep comparison for common cases\n\treturn JSON.stringify(a) === JSON.stringify(b);\n}\n\n/**\n * Detect conflicting properties across allOf schemas\n */\nfunction detectConflictingProperties(schemas: OpenAPISchema[], context: CompositionValidatorContext): string[] {\n\tconst conflicts: string[] = [];\n\tconst propertyMap = new Map<string, { schema: OpenAPISchema; source: string }>();\n\n\tfor (const schema of schemas) {\n\t\tconst schemaProps = collectProperties(schema, context);\n\n\t\tfor (const [propName, propInfo] of schemaProps) {\n\t\t\tconst existing = propertyMap.get(propName);\n\t\t\tif (existing) {\n\t\t\t\t// Check if the definitions match\n\t\t\t\tif (!schemasMatch(existing.schema, propInfo.schema)) {\n\t\t\t\t\tconflicts.push(\n\t\t\t\t\t\t`Property \"${propName}\" has conflicting definitions in ${existing.source} and ${propInfo.source}`\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpropertyMap.set(propName, propInfo);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn conflicts;\n}\n\n/**\n * Generate allOf validation\n *\n * Key fix: For inline objects in allOf, we generate the shape directly as an object literal\n * (e.g., { prop: z.string() }) instead of using z.object({...}).shape.\n * This avoids the invalid .nullable().shape pattern that occurs when inline objects\n * have nullable: true set.\n *\n * According to Zod docs (https://zod.dev/api?id=extend):\n * - .extend() accepts an object of shape definitions OR another schema's .shape\n * - For $refs: use baseSchema.extend(otherSchema.shape)\n * - For inline objects: use baseSchema.extend({ prop: z.string() })\n * - .nullable() must be applied AFTER all .extend() calls\n * - defaultNullable should NOT apply to schemas in allOf - they are schema shapes, not property values\n */\nexport function generateAllOf(\n\tschemas: OpenAPISchema[],\n\tisNullable: boolean,\n\tcontext: CompositionValidatorContext,\n\tcurrentSchema?: string\n): string {\n\tif (schemas.length === 1) {\n\t\t// Single-item allOf is essentially an alias - suppress defaultNullable\n\t\t// because this is a schema definition, not a property value\n\t\tconst singleSchema = context.generatePropertySchema(schemas[0], currentSchema, false, true);\n\t\treturn wrapNullable(singleSchema, isNullable);\n\t}\n\n\t// Detect conflicting properties and warn\n\tconst conflicts = detectConflictingProperties(schemas, context);\n\tlet conflictDescription = \"\";\n\tif (conflicts.length > 0) {\n\t\tfor (const conflict of conflicts) {\n\t\t\tconsole.warn(`[openapi-to-zod] Warning: allOf composition conflict - ${conflict}`);\n\t\t}\n\t\tconflictDescription = `allOf property conflicts detected: ${conflicts.join(\"; \")}`;\n\t}\n\n\t// Check if all schemas are objects (for .extend() support)\n\tconst allObjects = schemas.every(s => s.type === \"object\" || s.properties || s.$ref || s.allOf);\n\n\tlet result: string;\n\tif (allObjects) {\n\t\t// Use .extend() for object schemas (Zod v4 compliant - .merge() is deprecated)\n\t\t// First schema is the base - generate with suppressDefaultNullable=true\n\t\t// because this is a schema shape, not a property value\n\t\tlet merged = context.generatePropertySchema(schemas[0], currentSchema, false, true);\n\n\t\t// For subsequent schemas, determine how to extend\n\t\tfor (let i = 1; i < schemas.length; i++) {\n\t\t\tconst schema = schemas[i];\n\n\t\t\tif (schema.$ref) {\n\t\t\t\t// For $ref schemas, use .extend(refSchema.shape)\n\t\t\t\t// Suppress defaultNullable - this is a schema shape, not a property value\n\t\t\t\tconst refSchema = context.generatePropertySchema(schema, currentSchema, false, true);\n\t\t\t\tmerged = `${merged}.extend(${refSchema}.shape)`;\n\t\t\t} else if (context.generateInlineObjectShape && (schema.properties || schema.type === \"object\")) {\n\t\t\t\t// For inline objects, generate shape directly as object literal\n\t\t\t\t// This avoids the .nullable().shape bug - we pass { prop: z.string() }\n\t\t\t\t// directly to .extend() instead of z.object({...}).nullable().shape\n\t\t\t\t// Note: generateInlineObjectShape respects defaultNullable for properties INSIDE the object\n\t\t\t\tconst inlineShape = context.generateInlineObjectShape(schema, currentSchema);\n\t\t\t\tmerged = `${merged}.extend(${inlineShape})`;\n\t\t\t} else {\n\t\t\t\t// Fallback for schemas without properties (e.g., just has allOf)\n\t\t\t\t// Generate full schema with suppressDefaultNullable and use .shape\n\t\t\t\tconst schemaString = context.generatePropertySchema(schema, currentSchema, false, true);\n\t\t\t\tmerged = `${merged}.extend(${schemaString}.shape)`;\n\t\t\t}\n\t\t}\n\t\tresult = merged;\n\t} else {\n\t\t// Use .and() for non-object schemas (intersection)\n\t\t// Suppress defaultNullable on each schema in the intersection\n\t\tconst schemaStrings = schemas.map(s => context.generatePropertySchema(s, currentSchema, false, true));\n\t\tlet merged = schemaStrings[0];\n\t\tfor (let i = 1; i < schemaStrings.length; i++) {\n\t\t\tmerged = `${merged}.and(${schemaStrings[i]})`;\n\t\t}\n\t\tresult = merged;\n\t}\n\n\t// Add description about conflicts if any\n\tif (conflictDescription) {\n\t\tresult = `${result}.describe(\"${conflictDescription}\")`;\n\t}\n\n\t// Apply nullable at the END, after all .extend() calls\n\t// This is critical - .nullable() must come after .extend(), not before\n\treturn wrapNullable(result, isNullable);\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { addDescription } from \"../utils/string-utils\";\n\n/**\n * Generate Zod validation for number\n */\nexport function generateNumberValidation(schema: OpenAPISchema, isInt: boolean, useDescribe: boolean): string {\n\tlet validation = isInt ? \"z.number().int()\" : \"z.number()\";\n\n\t// Handle minimum with exclusive bounds\n\tif (schema.minimum !== undefined) {\n\t\tconst isExclusive = schema.exclusiveMinimum === true;\n\t\tvalidation += isExclusive ? `.gt(${schema.minimum})` : `.gte(${schema.minimum})`;\n\t} else if (typeof schema.exclusiveMinimum === \"number\") {\n\t\t// OpenAPI 3.1 style: exclusiveMinimum as number\n\t\tvalidation += `.gt(${schema.exclusiveMinimum})`;\n\t}\n\n\t// Handle maximum with exclusive bounds\n\tif (schema.maximum !== undefined) {\n\t\tconst isExclusive = schema.exclusiveMaximum === true;\n\t\tvalidation += isExclusive ? `.lt(${schema.maximum})` : `.lte(${schema.maximum})`;\n\t} else if (typeof schema.exclusiveMaximum === \"number\") {\n\t\t// OpenAPI 3.1 style: exclusiveMaximum as number\n\t\tvalidation += `.lt(${schema.exclusiveMaximum})`;\n\t}\n\n\tif (schema.multipleOf !== undefined) {\n\t\tvalidation += `.multipleOf(${schema.multipleOf})`;\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, useDescribe);\n}\n","import { generateJSDoc } from \"../generators/jsdoc-generator\";\nimport type { OpenAPISchema } from \"../types\";\nimport { generateDependencies, generateDependentRequired, generateIfThenElse } from \"./conditional-validator\";\n\n/**\n * Check if a property name needs to be quoted in TypeScript object literal\n */\nfunction needsQuoting(propName: string): boolean {\n\t// Valid identifier: starts with letter/underscore/$, followed by letters/digits/underscores/$\n\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\treturn !validIdentifier.test(propName);\n}\n\n/**\n * Generate property access expression (use dot notation for valid identifiers, bracket notation otherwise)\n */\nfunction generatePropertyAccess(propName: string): string {\n\treturn needsQuoting(propName) ? `obj[\"${propName}\"]` : `obj.${propName}`;\n}\n\nexport type ObjectMode = \"strict\" | \"normal\" | \"loose\";\n\nexport interface ObjectValidatorContext {\n\tgeneratePropertySchema: (schema: OpenAPISchema, currentSchema?: string) => string;\n\tshouldIncludeProperty: (schema: OpenAPISchema) => boolean;\n\tmode: ObjectMode;\n\tincludeDescriptions: boolean;\n\tuseDescribe: boolean;\n}\n\n/**\n * Generate object schema\n */\nexport function generateObjectSchema(\n\tschema: OpenAPISchema,\n\tcontext: ObjectValidatorContext,\n\tcurrentSchema?: string\n): string {\n\tconst required = new Set(schema.required || []);\n\tconst properties: string[] = [];\n\n\t// Process properties if they exist\n\tif (schema.properties) {\n\t\tfor (const [propName, propSchema] of Object.entries(schema.properties)) {\n\t\t\t// Skip properties based on readOnly/writeOnly and schemaType\n\t\t\tif (!context.shouldIncludeProperty(propSchema)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tconst isRequired = required.has(propName);\n\t\t\tconst zodSchema = context.generatePropertySchema(propSchema, currentSchema);\n\n\t\t\t// Quote property name if it contains special characters\n\t\t\tconst quotedPropName = needsQuoting(propName) ? `\"${propName}\"` : propName;\n\t\t\tlet propertyDef = ` ${quotedPropName}: ${zodSchema}`;\n\t\t\tif (!isRequired) {\n\t\t\t\tpropertyDef += \".optional()\";\n\t\t\t}\n\n\t\t\t// Add JSDoc for property if enabled\n\t\t\tconst jsdoc = generateJSDoc(propSchema, propName, { includeDescriptions: context.includeDescriptions });\n\t\t\tif (jsdoc) {\n\t\t\t\tproperties.push(`${jsdoc.trimEnd()}\\n${propertyDef}`);\n\t\t\t} else {\n\t\t\t\tproperties.push(propertyDef);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Determine object method based on mode and additionalProperties\n\tlet objectMethod: string;\n\n\t// additionalProperties: false always uses strictObject\n\tif (schema.additionalProperties === false) {\n\t\tobjectMethod = \"z.strictObject\";\n\t} else {\n\t\t// Otherwise respect the mode setting\n\t\tswitch (context.mode) {\n\t\t\tcase \"strict\":\n\t\t\t\tobjectMethod = \"z.strictObject\";\n\t\t\t\tbreak;\n\t\t\tcase \"loose\":\n\t\t\t\tobjectMethod = \"z.looseObject\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tobjectMethod = \"z.object\";\n\t\t}\n\t}\n\n\tlet objectDef = `${objectMethod}({\\n${properties.join(\",\\n\")}\\n})`;\n\n\t// Handle additionalProperties for typed catchall\n\tif (schema.additionalProperties !== undefined) {\n\t\tif (typeof schema.additionalProperties === \"object\") {\n\t\t\t// Additional properties with specific schema\n\t\t\tconst additionalSchema = context.generatePropertySchema(schema.additionalProperties, currentSchema);\n\t\t\tobjectDef += `.catchall(${additionalSchema})`;\n\t\t} else if (schema.additionalProperties === true) {\n\t\t\t// Any additional properties allowed\n\t\t\tobjectDef += \".catchall(z.unknown())\";\n\t\t}\n\t\t// Note: additionalProperties: false is handled by using z.strictObject\n\t} else if (schema.patternProperties) {\n\t\t// If pattern properties are defined but additionalProperties is not, allow properties through\n\t\t// so they can be validated by pattern property refinements\n\t\tobjectDef += \".catchall(z.unknown())\";\n\t}\n\n\t// Handle minProperties and maxProperties\n\tif (schema.minProperties !== undefined || schema.maxProperties !== undefined) {\n\t\tconst conditions: string[] = [];\n\t\tif (schema.minProperties !== undefined) {\n\t\t\tconditions.push(`Object.keys(obj).length >= ${schema.minProperties}`);\n\t\t}\n\t\tif (schema.maxProperties !== undefined) {\n\t\t\tconditions.push(`Object.keys(obj).length <= ${schema.maxProperties}`);\n\t\t}\n\t\tconst condition = conditions.join(\" && \");\n\t\tlet message = \"Object \";\n\t\tif (schema.minProperties !== undefined && schema.maxProperties !== undefined) {\n\t\t\tmessage += `must have between ${schema.minProperties} and ${schema.maxProperties} properties`;\n\t\t} else if (schema.minProperties !== undefined) {\n\t\t\tmessage += `must have at least ${schema.minProperties} ${schema.minProperties === 1 ? \"property\" : \"properties\"}`;\n\t\t} else {\n\t\t\tmessage += `must have at most ${schema.maxProperties} ${schema.maxProperties === 1 ? \"property\" : \"properties\"}`;\n\t\t}\n\t\tobjectDef += `.refine((obj) => ${condition}, { message: \"${message}\" })`;\n\t}\n\n\t// Handle required fields that aren't in properties (common in schema dependencies)\n\tconst definedProps = new Set(Object.keys(schema.properties || {}));\n\tconst undefinedRequired = (schema.required || []).filter(prop => !definedProps.has(prop));\n\tif (undefinedRequired.length > 0) {\n\t\t// Need catchall to allow required fields that aren't in properties\n\t\tif (!objectDef.includes(\".catchall(\")) {\n\t\t\tobjectDef += \".catchall(z.unknown())\";\n\t\t}\n\t\tconst requiredChecks = undefinedRequired.map(prop => `${generatePropertyAccess(prop)} !== undefined`).join(\" && \");\n\t\tconst propList = undefinedRequired.join(\", \");\n\t\tobjectDef += `.refine((obj) => ${requiredChecks}, { message: \"Missing required fields: ${propList}\" })`;\n\t}\n\n\t// Handle pattern properties with first-match-wins priority\n\tif (schema.patternProperties) {\n\t\tconst definedProps = Object.keys(schema.properties || {});\n\t\tconst definedPropsSet = `new Set(${JSON.stringify(definedProps)})`;\n\t\tconst patterns = Object.entries(schema.patternProperties);\n\n\t\t// Generate schemas for all patterns\n\t\tconst patternSchemas = patterns.map(([pattern, patternSchema]) => ({\n\t\t\tpattern,\n\t\t\tescapedPattern: pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\"),\n\t\t\tzodSchema: context.generatePropertySchema(patternSchema, currentSchema),\n\t\t}));\n\n\t\t// Single superRefine for all patterns (more efficient)\n\t\tobjectDef += `.superRefine((obj, ctx) => {\n\t\t\tconst definedPropsSet = ${definedPropsSet};\n\t\t\tconst patterns = ${JSON.stringify(patternSchemas.map(p => ({ pattern: p.escapedPattern })))};\n\t\t\tconst schemas = [${patternSchemas.map(p => p.zodSchema).join(\", \")}];\n\t\t\tconst regexps = patterns.map(p => new RegExp(p.pattern));\n\n\t\t\t// Check all object keys\n\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\t// Skip properties that are explicitly defined\n\t\t\t\tif (definedPropsSet.has(key)) continue;\n\n\t\t\t\t// Find first matching pattern (first-match-wins priority)\n\t\t\t\tfor (let i = 0; i < regexps.length; i++) {\n\t\t\t\t\tif (regexps[i].test(key)) {\n\t\t\t\t\t\tconst validation = schemas[i].safeParse(obj[key]);\n\t\t\t\t\t\tif (!validation.success) {\n\t\t\t\t\t\t\t// Add detailed error messages with property name and pattern\n\t\t\t\t\t\t\tfor (const issue of validation.error.issues) {\n\t\t\t\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\t\t\t\t...issue,\n\t\t\t\t\t\t\t\t\tpath: [key, ...issue.path],\n\t\t\t\t\t\t\t\t\tmessage: \\`Property '\\${key}' (pattern '\\${patterns[i].pattern}'): \\${issue.message}\\`\n\t\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak; // First match wins, stop checking other patterns\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\t// Handle property names validation (consolidated for efficiency)\n\tif (schema.propertyNames) {\n\t\tconst hasPattern = schema.propertyNames.pattern !== undefined;\n\t\tconst hasMinLength = schema.propertyNames.minLength !== undefined;\n\t\tconst hasMaxLength = schema.propertyNames.maxLength !== undefined;\n\n\t\tif (hasPattern || hasMinLength || hasMaxLength) {\n\t\t\tconst escapedPattern =\n\t\t\t\thasPattern && schema.propertyNames.pattern\n\t\t\t\t\t? schema.propertyNames.pattern.replace(/\\\\/g, \"\\\\\\\\\").replace(/'/g, \"\\\\'\")\n\t\t\t\t\t: null;\n\t\t\tconst minLen = schema.propertyNames.minLength;\n\t\t\tconst maxLen = schema.propertyNames.maxLength;\n\n\t\t\tobjectDef += `.superRefine((obj, ctx) => {\n\t\t\t\t${escapedPattern ? `const pattern = /${escapedPattern}/;` : \"\"}\n\n\t\t\t\tfor (const key of Object.keys(obj)) {\n\t\t\t\t\tconst failures: string[] = [];\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasPattern\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (!pattern.test(key)) {\n\t\t\t\t\t\tfailures.push(\"must match pattern '${schema.propertyNames.pattern}'\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasMinLength\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (key.length < ${minLen}) {\n\t\t\t\t\t\tfailures.push(\"must be at least ${minLen} characters\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\t${\n\t\t\t\t\t\thasMaxLength\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tif (key.length > ${maxLen}) {\n\t\t\t\t\t\tfailures.push(\"must be at most ${maxLen} characters\");\n\t\t\t\t\t}\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: \"\"\n\t\t\t\t\t}\n\n\t\t\t\t\tif (failures.length > 0) {\n\t\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\t\tmessage: \\`Property name '\\${key}' \\${failures.join(\", \")}\\`,\n\t\t\t\t\t\t\tpath: [key]\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})`;\n\t\t}\n\t}\n\n\t// Handle dependencies (OpenAPI 3.0)\n\tobjectDef += generateDependencies(schema, context.generatePropertySchema, currentSchema);\n\n\t// Handle dependentRequired\n\tobjectDef += generateDependentRequired(schema);\n\n\t// Handle if/then/else conditionals\n\tobjectDef += generateIfThenElse(schema);\n\n\treturn objectDef;\n}\n","import type { OpenAPISchema } from \"../types\";\n\n/**\n * Generate property access expression (use dot notation for valid identifiers, bracket notation otherwise)\n */\nfunction generatePropertyAccess(propName: string): string {\n\t// Valid identifier: starts with letter/underscore/$, followed by letters/digits/underscores/$\n\tconst validIdentifier = /^[a-zA-Z_$][a-zA-Z0-9_$]*$/;\n\treturn validIdentifier.test(propName) ? `obj.${propName}` : `obj[\"${propName}\"]`;\n}\n\n/**\n * Generate validation for dependencies (OpenAPI 3.0)\n * Generates detailed error messages showing which specific fields are missing\n */\nexport function generateDependencies(\n\tschema: OpenAPISchema,\n\tgeneratePropertySchema?: (schema: OpenAPISchema, currentSchema?: string) => string,\n\tcurrentSchema?: string\n): string {\n\tif (!schema.dependencies) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, dependency] of Object.entries(schema.dependencies)) {\n\t\tif (Array.isArray(dependency)) {\n\t\t\t// Skip empty dependency arrays (no dependencies to enforce)\n\t\t\tif (dependency.length === 0) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Property dependency - show specific missing properties in error message\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tconst checkLogic = dependency\n\t\t\t\t.map(p => {\n\t\t\t\t\tconst pAccess = generatePropertyAccess(p);\n\t\t\t\t\treturn `if (${pAccess} === undefined) missing.push('${p}');`;\n\t\t\t\t})\n\t\t\t\t.join(\"\\n\\t\\t\");\n\n\t\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\t\tif (${propAccess} === undefined) return;\n\t\t\t\tconst missing: string[] = [];\n\t\t\t\t${checkLogic}\n\t\t\t\tif (missing.length > 0) {\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: \\`When '${prop}' is present, the following properties are required: \\${missing.join(', ')}\\`,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})`;\n\t\t} else if (generatePropertySchema) {\n\t\t\t// Schema dependency - show detailed validation errors\n\t\t\tconst depSchema: OpenAPISchema = { ...dependency, type: dependency.type || \"object\" };\n\t\t\tconst depSchemaValidation = generatePropertySchema(depSchema, currentSchema);\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\n\t\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\t\tif (${propAccess} === undefined) return;\n\t\t\t\tconst validation = ${depSchemaValidation}.safeParse(obj);\n\t\t\t\tif (!validation.success) {\n\t\t\t\t\tconst errors = validation.error.issues.map(i => \\` - \\${i.path.join('.')}: \\${i.message}\\`).join('\\\\n');\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: \\`When '${prop}' is present, object must satisfy additional constraints:\\\\n\\${errors}\\`,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t})`;\n\t\t}\n\t}\n\treturn result;\n}\n\n/**\n * Generate condition check for if/then/else\n */\nexport function generateConditionalCheck(schema: OpenAPISchema): string {\n\tconst conditions: string[] = [];\n\n\t// Check properties\n\tif (schema.properties) {\n\t\tfor (const [prop, propSchema] of Object.entries(schema.properties)) {\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tif (propSchema.type) {\n\t\t\t\tconditions.push(`typeof ${propAccess} === \"${propSchema.type}\"`);\n\t\t\t}\n\t\t\tif (propSchema.const !== undefined) {\n\t\t\t\tconst value = typeof propSchema.const === \"string\" ? `\"${propSchema.const}\"` : propSchema.const;\n\t\t\t\tconditions.push(`${propAccess} === ${value}`);\n\t\t\t}\n\t\t\tif (propSchema.minimum !== undefined) {\n\t\t\t\tconditions.push(`${propAccess} >= ${propSchema.minimum}`);\n\t\t\t}\n\t\t\tif (propSchema.maximum !== undefined) {\n\t\t\t\tconditions.push(`${propAccess} <= ${propSchema.maximum}`);\n\t\t\t}\n\t\t}\n\t}\n\n\t// Check required properties\n\tif (schema.required) {\n\t\tfor (const prop of schema.required) {\n\t\t\tconditions.push(`${generatePropertyAccess(prop)} !== undefined`);\n\t\t}\n\t}\n\n\treturn conditions.length > 0 ? conditions.join(\" && \") : \"true\";\n}\n\n/**\n * Generate validation for then/else clauses\n */\nexport function generateConditionalValidation(schema: OpenAPISchema): string {\n\tconst checks: string[] = [];\n\n\t// Check required properties\n\tif (schema.required) {\n\t\tfor (const prop of schema.required) {\n\t\t\tchecks.push(`${generatePropertyAccess(prop)} !== undefined`);\n\t\t}\n\t}\n\n\t// Check properties constraints\n\tif (schema.properties) {\n\t\tfor (const [prop, propSchema] of Object.entries(schema.properties)) {\n\t\t\tconst propAccess = generatePropertyAccess(prop);\n\t\t\tif (propSchema.minimum !== undefined) {\n\t\t\t\tchecks.push(`${propAccess} === undefined || ${propAccess} >= ${propSchema.minimum}`);\n\t\t\t}\n\t\t\tif (propSchema.maximum !== undefined) {\n\t\t\t\tchecks.push(`${propAccess} === undefined || ${propAccess} <= ${propSchema.maximum}`);\n\t\t\t}\n\t\t}\n\t}\n\n\treturn checks.length > 0 ? checks.join(\" && \") : \"true\";\n}\n\n/**\n * Generate if/then/else conditional validation with better error messages\n * Uses superRefine with detailed error messages for complex cases\n */\nexport function generateIfThenElse(schema: OpenAPISchema): string {\n\tif (!schema.if || (!schema.then && !schema.else)) {\n\t\treturn \"\";\n\t}\n\n\tconst ifCondition = generateConditionalCheck(schema.if);\n\n\tif (schema.then && schema.else) {\n\t\t// Both then and else - provide detailed error messages\n\t\tconst thenValidation = generateConditionalValidation(schema.then);\n\t\tconst elseValidation = generateConditionalValidation(schema.else);\n\n\t\t// Try to detect which specific validations failed\n\t\tconst thenRequiredProps = schema.then.required || [];\n\t\tconst elseRequiredProps = schema.else.required || [];\n\n\t\treturn `.superRefine((obj, ctx) => {\n\t\t\tconst ifConditionMet = ${ifCondition};\n\t\t\tif (ifConditionMet) {\n\t\t\t\t// Then branch\n\t\t\t\tconst thenValid = ${thenValidation};\n\t\t\t\tif (!thenValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\tthenRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingThenProps = ${JSON.stringify(thenRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingThenProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is met, required properties are missing: \\${missingThenProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// Else branch\n\t\t\t\tconst elseValid = ${elseValidation};\n\t\t\t\tif (!elseValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\telseRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingElseProps = ${JSON.stringify(elseRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingElseProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is not met, required properties are missing: \\${missingElseProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is not met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is not met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\tif (schema.then) {\n\t\t// Only then - provide detailed error message\n\t\tconst thenValidation = generateConditionalValidation(schema.then);\n\t\tconst thenRequiredProps = schema.then.required || [];\n\n\t\treturn `.superRefine((obj, ctx) => {\n\t\t\tconst ifConditionMet = ${ifCondition};\n\t\t\tif (ifConditionMet) {\n\t\t\t\tconst thenValid = ${thenValidation};\n\t\t\t\tif (!thenValid) {\n\t\t\t\t\t${\n\t\t\t\t\t\tthenRequiredProps.length > 0\n\t\t\t\t\t\t\t? `\n\t\t\t\t\tconst missingProps = ${JSON.stringify(thenRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\t\tconst message = missingProps.length > 0 \n\t\t\t\t\t\t? \\`When condition is met, required properties are missing: \\${missingProps.join(', ')}\\`\n\t\t\t\t\t\t: \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t\t\t: `\n\t\t\t\t\tconst message = \"When condition is met, validation constraints failed\";\n\t\t\t\t\t`\n\t\t\t\t\t}\n\t\t\t\t\tctx.addIssue({\n\t\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\t\tmessage: message,\n\t\t\t\t\t\tpath: []\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t})`;\n\t}\n\n\t// Only else - provide detailed error message\n\tif (!schema.else) return \"\";\n\tconst elseValidation = generateConditionalValidation(schema.else);\n\tconst elseRequiredProps = schema.else.required || [];\n\n\treturn `.superRefine((obj, ctx) => {\n\t\tconst ifConditionMet = ${ifCondition};\n\t\tif (!ifConditionMet) {\n\t\t\tconst elseValid = ${elseValidation};\n\t\t\tif (!elseValid) {\n\t\t\t\t${\n\t\t\t\t\telseRequiredProps.length > 0\n\t\t\t\t\t\t? `\n\t\t\t\tconst missingProps = ${JSON.stringify(elseRequiredProps)}.filter(p => obj[p] === undefined);\n\t\t\t\tconst message = missingProps.length > 0 \n\t\t\t\t\t? \\`When condition is not met, required properties are missing: \\${missingProps.join(', ')}\\`\n\t\t\t\t\t: \"When condition is not met, validation constraints failed\";\n\t\t\t\t`\n\t\t\t\t\t\t: `\n\t\t\t\tconst message = \"When condition is not met, validation constraints failed\";\n\t\t\t\t`\n\t\t\t\t}\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: message,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t})`;\n}\n\n/**\n * Generate dependent required validation (OpenAPI 3.1)\n * Generates detailed error messages showing which specific fields are missing\n */\nexport function generateDependentRequired(schema: OpenAPISchema): string {\n\tif (!schema.dependentRequired) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, requiredProps] of Object.entries(schema.dependentRequired)) {\n\t\t// Skip empty required arrays (no dependencies to enforce)\n\t\tif (requiredProps.length === 0) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tconst propAccess = generatePropertyAccess(prop);\n\t\tconst checkLogic = requiredProps\n\t\t\t.map(rp => {\n\t\t\t\tconst rpAccess = generatePropertyAccess(rp);\n\t\t\t\treturn `if (${rpAccess} === undefined) missing.push('${rp}');`;\n\t\t\t})\n\t\t\t.join(\"\\n\\t\\t\");\n\n\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\tif (${propAccess} === undefined) return;\n\t\t\tconst missing: string[] = [];\n\t\t\t${checkLogic}\n\t\t\tif (missing.length > 0) {\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: \\`When '${prop}' is present, the following properties are required: \\${missing.join(', ')}\\`,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t})`;\n\t}\n\n\treturn result;\n}\n\n/**\n * Generate dependent schemas validation (JSON Schema 2019-09 / OpenAPI 3.1)\n * This is the modern replacement for schema-based dependencies\n * Generates detailed error messages showing validation failures\n */\nexport function generateDependentSchemas(\n\tschema: OpenAPISchema & { dependentSchemas?: Record<string, OpenAPISchema> },\n\tgeneratePropertySchema?: (schema: OpenAPISchema, currentSchema?: string) => string,\n\tcurrentSchema?: string\n): string {\n\tif (!schema.dependentSchemas || !generatePropertySchema) {\n\t\treturn \"\";\n\t}\n\n\tlet result = \"\";\n\tfor (const [prop, depSchema] of Object.entries(schema.dependentSchemas)) {\n\t\tconst depSchemaValidation = generatePropertySchema(depSchema, currentSchema);\n\t\tconst propAccess = generatePropertyAccess(prop);\n\n\t\tresult += `.superRefine((obj, ctx) => {\n\t\t\tif (${propAccess} === undefined) return;\n\t\t\tconst validation = ${depSchemaValidation}.safeParse(obj);\n\t\t\tif (!validation.success) {\n\t\t\t\tconst errors = validation.error.issues.map(i => \\` - \\${i.path.join('.')}: \\${i.message}\\`).join('\\\\n');\n\t\t\t\tctx.addIssue({\n\t\t\t\t\tcode: \"custom\",\n\t\t\t\t\tmessage: \\`When '${prop}' is present, dependent schema validation failed:\\\\n\\${errors}\\`,\n\t\t\t\t\tpath: []\n\t\t\t\t});\n\t\t\t}\n\t\t})`;\n\t}\n\treturn result;\n}\n\n/**\n * Validate dependency graph for circular dependencies\n * Returns validation result with any detected circular dependency errors\n */\nexport function validateDependencyGraph(\n\tschema: OpenAPISchema,\n\tschemaName: string\n): { valid: boolean; errors: string[] } {\n\tconst errors: string[] = [];\n\n\tif (!schema.dependencies && !schema.dependentRequired) {\n\t\treturn { valid: true, errors: [] };\n\t}\n\n\t// Build dependency graph\n\tconst graph = new Map<string, Set<string>>();\n\n\t// Add dependentRequired edges\n\tif (schema.dependentRequired) {\n\t\tfor (const [prop, deps] of Object.entries(schema.dependentRequired)) {\n\t\t\tif (!graph.has(prop)) {\n\t\t\t\tgraph.set(prop, new Set());\n\t\t\t}\n\t\t\tconst propDeps = graph.get(prop);\n\t\t\tif (propDeps) {\n\t\t\t\tfor (const dep of deps) {\n\t\t\t\t\tpropDeps.add(dep);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Add dependencies (array type) edges\n\tif (schema.dependencies) {\n\t\tfor (const [prop, dep] of Object.entries(schema.dependencies)) {\n\t\t\tif (Array.isArray(dep)) {\n\t\t\t\tif (!graph.has(prop)) {\n\t\t\t\t\tgraph.set(prop, new Set());\n\t\t\t\t}\n\t\t\t\tconst propDeps = graph.get(prop);\n\t\t\t\tif (propDeps) {\n\t\t\t\t\tfor (const d of dep) {\n\t\t\t\t\t\tpropDeps.add(d);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Detect cycles using DFS\n\tconst visited = new Set<string>();\n\tconst recStack = new Set<string>();\n\tconst path: string[] = [];\n\n\tfunction detectCycle(prop: string): boolean {\n\t\tvisited.add(prop);\n\t\trecStack.add(prop);\n\t\tpath.push(prop);\n\n\t\tconst deps = graph.get(prop) || new Set();\n\t\tfor (const dep of deps) {\n\t\t\tif (!visited.has(dep)) {\n\t\t\t\tif (detectCycle(dep)) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t} else if (recStack.has(dep)) {\n\t\t\t\t// Cycle detected\n\t\t\t\tconst cycleStart = path.indexOf(dep);\n\t\t\t\tconst cycle = [...path.slice(cycleStart), dep];\n\t\t\t\terrors.push(`Circular dependency detected in schema '${schemaName}': ${cycle.join(\" -> \")}`);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\n\t\trecStack.delete(prop);\n\t\tpath.pop();\n\t\treturn false;\n\t}\n\n\t// Check all roots\n\tfor (const prop of graph.keys()) {\n\t\tif (!visited.has(prop)) {\n\t\t\tdetectCycle(prop);\n\t\t}\n\t}\n\n\treturn { valid: errors.length === 0, errors };\n}\n\n/**\n * Extract schema dependencies as reusable schemas\n * Useful for code generation and schema reuse\n */\nexport function extractSchemaDependencies(schema: OpenAPISchema, schemaName: string): Map<string, OpenAPISchema> {\n\tconst extracted = new Map<string, OpenAPISchema>();\n\n\tif (!schema.dependencies) {\n\t\treturn extracted;\n\t}\n\n\tfor (const [prop, dependency] of Object.entries(schema.dependencies)) {\n\t\tif (!Array.isArray(dependency)) {\n\t\t\t// This is a schema dependency\n\t\t\tconst depSchemaName = `${schemaName}_${prop}_Dependency`;\n\t\t\tconst depSchema: OpenAPISchema = {\n\t\t\t\t...dependency,\n\t\t\t\ttype: dependency.type || \"object\",\n\t\t\t};\n\t\t\textracted.set(depSchemaName, depSchema);\n\t\t}\n\t}\n\n\treturn extracted;\n}\n","import type { OpenAPISchema } from \"../types\";\nimport { LRUCache } from \"../utils/lru-cache\";\nimport { addDescription, escapePattern } from \"../utils/string-utils\";\n\n// Performance optimization: Cache compiled regex patterns with configurable size limit\n// Cache is shared across all generators for performance, but size can be configured per generator\nlet PATTERN_CACHE = new LRUCache<string, string>(1000);\n\n/**\n * Configure the pattern cache size\n * Should be called before generating schemas for large specifications\n */\nexport function configurePatternCache(size: number): void {\n\tif (size > 0 && size !== PATTERN_CACHE.capacity) {\n\t\tPATTERN_CACHE = new LRUCache<string, string>(size);\n\t}\n}\n\n// Default format map (without date-time, which can be customized)\nconst DEFAULT_FORMAT_MAP: Record<string, string> = {\n\tuuid: \"z.uuid()\",\n\temail: \"z.email()\",\n\turi: \"z.url()\",\n\turl: \"z.url()\",\n\t\"uri-reference\": 'z.string().refine((val) => !/\\\\s/.test(val), { message: \"Must be a valid URI reference\" })',\n\thostname:\n\t\t'z.string().refine((val) => /^(?=.{1,253}$)(?:(?!-)[A-Za-z0-9-]{1,63}(?<!-)\\\\.)*(?!-)[A-Za-z0-9-]{1,63}(?<!-)$/.test(val), { message: \"Must be a valid hostname\" })',\n\tbyte: \"z.base64()\",\n\tbinary: \"z.string()\",\n\tdate: \"z.iso.date()\",\n\ttime: \"z.iso.time()\",\n\tduration:\n\t\t'z.string().refine((val) => /^P(?:(?:\\\\d+Y)?(?:\\\\d+M)?(?:\\\\d+D)?(?:T(?:\\\\d+H)?(?:\\\\d+M)?(?:\\\\d+(?:\\\\.\\\\d+)?S)?)?|\\\\d+W)$/.test(val) && !/^PT?$/.test(val), { message: \"Must be a valid ISO 8601 duration\" })',\n\tipv4: \"z.ipv4()\",\n\tipv6: \"z.ipv6()\",\n\temoji: \"z.emoji()\",\n\tbase64: \"z.base64()\",\n\tbase64url: \"z.base64url()\",\n\tnanoid: \"z.nanoid()\",\n\tcuid: \"z.cuid()\",\n\tcuid2: \"z.cuid2()\",\n\tulid: \"z.ulid()\",\n\tcidr: \"z.cidrv4()\", // Default to v4\n\tcidrv4: \"z.cidrv4()\",\n\tcidrv6: \"z.cidrv6()\",\n\t\"json-pointer\":\n\t\t'z.string().refine((val) => val === \"\" || /^(\\\\/([^~/]|~0|~1)+)+$/.test(val), { message: \"Must be a valid JSON Pointer (RFC 6901)\" })',\n\t\"relative-json-pointer\":\n\t\t'z.string().refine((val) => /^(0|[1-9]\\\\d*)(#|(\\\\/([^~/]|~0|~1)+)*)$/.test(val), { message: \"Must be a valid relative JSON Pointer\" })',\n};\n\n// Mutable format map that includes date-time and can be configured\nlet FORMAT_MAP: Record<string, string> = {\n\t...DEFAULT_FORMAT_MAP,\n\t\"date-time\": \"z.iso.datetime()\",\n};\n\n/**\n * Configure custom date-time format validation\n * Overrides the default z.iso.datetime() with a custom regex pattern\n *\n * @param pattern - Regex pattern (string or RegExp) for date-time validation\n * @throws {Error} If the provided pattern is not a valid regular expression\n * @example\n * // String pattern (required for JSON/YAML configs)\n * configureDateTimeFormat('^\\\\d{4}-\\\\d{2}-\\\\d{2}T\\\\d{2}:\\\\d{2}:\\\\d{2}$')\n *\n * @example\n * // RegExp literal (TypeScript configs only)\n * configureDateTimeFormat(/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}$/)\n */\nexport function configureDateTimeFormat(pattern?: string | RegExp): void {\n\tif (!pattern) {\n\t\t// Reset to default\n\t\tFORMAT_MAP[\"date-time\"] = \"z.iso.datetime()\";\n\t\treturn;\n\t}\n\n\t// Convert RegExp to string if needed\n\tconst patternStr = pattern instanceof RegExp ? pattern.source : pattern;\n\n\t// Empty string resets to default\n\tif (patternStr === \"\") {\n\t\tFORMAT_MAP[\"date-time\"] = \"z.iso.datetime()\";\n\t\treturn;\n\t}\n\n\t// Validate the regex pattern\n\ttry {\n\t\tnew RegExp(patternStr);\n\t} catch (error) {\n\t\tthrow new Error(\n\t\t\t`Invalid regular expression pattern for customDateTimeFormatRegex: ${patternStr}. ${\n\t\t\t\terror instanceof Error ? error.message : \"Pattern is malformed\"\n\t\t\t}`\n\t\t);\n\t}\n\n\t// Escape the pattern for use in generated code\n\tconst escapedPattern = escapePattern(patternStr);\n\n\t// Update the format map with the custom regex\n\tFORMAT_MAP[\"date-time\"] = `z.string().regex(/${escapedPattern}/)`;\n}\n\n/**\n * Reset format map to defaults (useful for testing)\n */\nexport function resetFormatMap(): void {\n\tFORMAT_MAP = {\n\t\t...DEFAULT_FORMAT_MAP,\n\t\t\"date-time\": \"z.iso.datetime()\",\n\t};\n}\n\n/**\n * Generate Zod validation for string with format (Zod v4 compatible)\n */\nexport function generateStringValidation(schema: OpenAPISchema, useDescribe: boolean): string {\n\t// Handle format with Zod v4 top-level functions (performance optimized with map)\n\tlet validation = FORMAT_MAP[schema.format || \"\"] || \"z.string()\";\n\n\t// Add length constraints\n\tif (schema.minLength !== undefined) {\n\t\tvalidation += `.min(${schema.minLength})`;\n\t}\n\tif (schema.maxLength !== undefined) {\n\t\tvalidation += `.max(${schema.maxLength})`;\n\t}\n\n\t// Add pattern (with cached escaping for performance)\n\tif (schema.pattern) {\n\t\tlet escapedPattern = PATTERN_CACHE.get(schema.pattern);\n\t\tif (escapedPattern === undefined) {\n\t\t\tescapedPattern = escapePattern(schema.pattern);\n\t\t\tPATTERN_CACHE.set(schema.pattern, escapedPattern);\n\t\t}\n\t\tvalidation += `.regex(/${escapedPattern}/)`;\n\t}\n\n\t// Handle content encoding (OpenAPI 3.1)\n\tif (schema.contentEncoding && !schema.format) {\n\t\tswitch (schema.contentEncoding) {\n\t\t\tcase \"base64\":\n\t\t\t\tvalidation = \"z.base64()\";\n\t\t\t\tbreak;\n\t\t\tcase \"base64url\":\n\t\t\t\tvalidation = \"z.base64url()\";\n\t\t\t\tbreak;\n\t\t\tcase \"quoted-printable\":\n\t\t\t\t// Quoted-printable validation\n\t\t\t\tvalidation =\n\t\t\t\t\t'z.string().refine((val) => /^[\\\\x20-\\\\x7E\\\\r\\\\n=]*$/.test(val), { message: \"Must be valid quoted-printable encoding\" })';\n\t\t\t\tbreak;\n\t\t\tcase \"7bit\":\n\t\t\tcase \"8bit\":\n\t\t\tcase \"binary\":\n\t\t\t\t// Basic string validation for these encodings\n\t\t\t\tvalidation = \"z.string()\";\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// Unknown encoding, use string with refinement note\n\t\t\t\tvalidation = `z.string().describe(\"Content encoding: ${schema.contentEncoding}\")`;\n\t\t}\n\n\t\t// Re-apply constraints after encoding\n\t\tif (schema.minLength !== undefined) {\n\t\t\tvalidation += `.min(${schema.minLength})`;\n\t\t}\n\t\tif (schema.maxLength !== undefined) {\n\t\t\tvalidation += `.max(${schema.maxLength})`;\n\t\t}\n\t\tif (schema.pattern) {\n\t\t\tlet escapedPattern = PATTERN_CACHE.get(schema.pattern);\n\t\t\tif (escapedPattern === undefined) {\n\t\t\t\tescapedPattern = escapePattern(schema.pattern);\n\t\t\t\tPATTERN_CACHE.set(schema.pattern, escapedPattern);\n\t\t\t}\n\t\t\tvalidation += `.regex(/${escapedPattern}/)`;\n\t\t}\n\t} else if (schema.contentMediaType) {\n\t\t// Add refinement for media type validation\n\t\tconst mediaType = schema.contentMediaType;\n\t\tif (mediaType === \"application/json\") {\n\t\t\tvalidation += `.refine((val) => { try { JSON.parse(val); return true; } catch { return false; } }, { message: \"Must be valid JSON\" })`;\n\t\t} else if (mediaType === \"application/xml\" || mediaType === \"text/xml\") {\n\t\t\t// Basic XML validation - check for well-formed XML structure\n\t\t\tvalidation += `.refine((val) => { try { if (typeof DOMParser !== \"undefined\") { const parser = new DOMParser(); const doc = parser.parseFromString(val, \"text/xml\"); return !doc.querySelector(\"parsererror\"); } return /^\\\\s*<[^>]+>/.test(val); } catch { return false; } }, { message: \"Must be valid XML\" })`;\n\t\t} else if (mediaType === \"application/yaml\" || mediaType === \"application/x-yaml\" || mediaType === \"text/yaml\") {\n\t\t\t// Basic YAML validation - check for basic YAML structure\n\t\t\tvalidation += `.refine((val) => { try { return val.trim().length > 0 && !/^[[{]/.test(val.trim()); } catch { return false; } }, { message: \"Must be valid YAML\" })`;\n\t\t} else if (mediaType === \"text/html\") {\n\t\t\t// Basic HTML validation - check for HTML tags\n\t\t\tvalidation += `.refine((val) => /<[^>]+>/.test(val), { message: \"Must contain HTML tags\" })`;\n\t\t} else if (mediaType === \"text/plain\") {\n\t\t\t// Plain text - no special validation needed, but mark it\n\t\t\tvalidation += `.refine(() => true, { message: \"Plain text content\" })`;\n\t\t}\n\t\t// Other media types default to no validation beyond string\n\t}\n\n\t// Add description if useDescribe is enabled\n\treturn addDescription(validation, schema.description, useDescribe);\n}\n","import { minimatch } from \"minimatch\";\nimport type { OperationFilters } from \"../types\";\n\n/**\n * Filter statistics to track which operations were included/excluded\n */\nexport interface FilterStatistics {\n\ttotalOperations: number;\n\tincludedOperations: number;\n\tfilteredByTags: number;\n\tfilteredByPaths: number;\n\tfilteredByMethods: number;\n\tfilteredByOperationIds: number;\n\tfilteredByDeprecated: number;\n}\n\n/**\n * Create a new filter statistics object with all counters initialized to zero\n */\nexport function createFilterStatistics(): FilterStatistics {\n\treturn {\n\t\ttotalOperations: 0,\n\t\tincludedOperations: 0,\n\t\tfilteredByTags: 0,\n\t\tfilteredByPaths: 0,\n\t\tfilteredByMethods: 0,\n\t\tfilteredByOperationIds: 0,\n\t\tfilteredByDeprecated: 0,\n\t};\n}\n\n/**\n * Check if a value matches any of the patterns (supports glob patterns)\n * Empty patterns array = no constraint (returns true)\n */\nfunction matchesAnyPattern(value: string | undefined, patterns: string[] | undefined): boolean {\n\tif (!patterns || patterns.length === 0) {\n\t\treturn false; // No constraint means \"don't use this filter\"\n\t}\n\tif (!value) {\n\t\treturn false;\n\t}\n\treturn patterns.some(pattern => minimatch(value, pattern));\n}\n\n/**\n * Check if an array contains any of the specified values\n * Empty values array = no constraint (returns false)\n */\nfunction containsAny(arr: string[] | undefined, values: string[] | undefined): boolean {\n\tif (!values || values.length === 0) {\n\t\treturn false; // No constraint means \"don't use this filter\"\n\t}\n\tif (!arr || arr.length === 0) {\n\t\treturn false;\n\t}\n\treturn values.some(value => arr.includes(value));\n}\n\n/**\n * Determine if an operation should be included based on filter criteria\n *\n * Filter logic:\n * 1. If no filters specified, include all operations\n * 2. Empty arrays are treated as \"no constraint\" (not as \"exclude all\")\n * 3. Include filters are applied first (allowlist)\n * 4. Exclude filters are applied second (blocklist)\n * 5. Exclude rules always win over include rules\n *\n * @param operation - The OpenAPI operation object\n * @param path - The operation path (e.g., \"/users/{id}\")\n * @param method - The HTTP method (e.g., \"get\", \"post\")\n * @param filters - Optional filter configuration\n * @param stats - Optional statistics object to track filtering reasons\n * @returns true if the operation should be included, false otherwise\n */\nexport function shouldIncludeOperation(\n\toperation: any,\n\tpath: string,\n\tmethod: string,\n\tfilters?: OperationFilters,\n\tstats?: FilterStatistics\n): boolean {\n\t// If no filters specified, include all operations\n\tif (!filters) {\n\t\treturn true;\n\t}\n\n\tconst methodLower = method.toLowerCase();\n\tconst operationId = operation?.operationId;\n\tconst tags = operation?.tags || [];\n\tconst deprecated = operation?.deprecated === true;\n\n\t// Apply include filters first (allowlist)\n\t// If any include filter is specified and the operation doesn't match, exclude it\n\n\t// Check includeTags\n\tif (filters.includeTags && filters.includeTags.length > 0) {\n\t\tif (!containsAny(tags, filters.includeTags)) {\n\t\t\tif (stats) stats.filteredByTags++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includePaths\n\tif (filters.includePaths && filters.includePaths.length > 0) {\n\t\tif (!matchesAnyPattern(path, filters.includePaths)) {\n\t\t\tif (stats) stats.filteredByPaths++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includeMethods\n\tif (filters.includeMethods && filters.includeMethods.length > 0) {\n\t\tconst methodsLower = filters.includeMethods.map(m => m.toLowerCase());\n\t\tif (!methodsLower.includes(methodLower)) {\n\t\t\tif (stats) stats.filteredByMethods++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check includeOperationIds\n\tif (filters.includeOperationIds && filters.includeOperationIds.length > 0) {\n\t\tif (!matchesAnyPattern(operationId, filters.includeOperationIds)) {\n\t\t\tif (stats) stats.filteredByOperationIds++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Apply exclude filters second (blocklist)\n\t// If the operation matches any exclude filter, exclude it\n\n\t// Check excludeDeprecated\n\tif (filters.excludeDeprecated === true && deprecated) {\n\t\tif (stats) stats.filteredByDeprecated++;\n\t\treturn false;\n\t}\n\n\t// Check excludeTags\n\tif (filters.excludeTags && filters.excludeTags.length > 0) {\n\t\tif (containsAny(tags, filters.excludeTags)) {\n\t\t\tif (stats) stats.filteredByTags++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludePaths\n\tif (filters.excludePaths && filters.excludePaths.length > 0) {\n\t\tif (matchesAnyPattern(path, filters.excludePaths)) {\n\t\t\tif (stats) stats.filteredByPaths++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludeMethods\n\tif (filters.excludeMethods && filters.excludeMethods.length > 0) {\n\t\tconst methodsLower = filters.excludeMethods.map(m => m.toLowerCase());\n\t\tif (methodsLower.includes(methodLower)) {\n\t\t\tif (stats) stats.filteredByMethods++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Check excludeOperationIds\n\tif (filters.excludeOperationIds && filters.excludeOperationIds.length > 0) {\n\t\tif (matchesAnyPattern(operationId, filters.excludeOperationIds)) {\n\t\t\tif (stats) stats.filteredByOperationIds++;\n\t\t\treturn false;\n\t\t}\n\t}\n\n\t// Operation passed all filters\n\treturn true;\n}\n\n/**\n * Validate filter statistics and emit warnings for filters that matched nothing\n * Helps users debug filter configurations that might be too restrictive or contain typos\n *\n * @param stats - Filter statistics object\n * @param filters - The filter configuration to validate\n */\nexport function validateFilters(stats: FilterStatistics, filters?: OperationFilters): void {\n\tif (!filters || stats.totalOperations === 0) {\n\t\treturn;\n\t}\n\n\t// If all operations were filtered out, emit a warning\n\tif (stats.includedOperations === 0) {\n\t\tconsole.warn(\n\t\t\t`⚠️ Warning: All ${stats.totalOperations} operations were filtered out. Check your operationFilters configuration.`\n\t\t);\n\n\t\t// Provide specific guidance about which filters might be the issue\n\t\tconst filterBreakdown: string[] = [];\n\t\tif (stats.filteredByTags > 0) filterBreakdown.push(`${stats.filteredByTags} by tags`);\n\t\tif (stats.filteredByPaths > 0) filterBreakdown.push(`${stats.filteredByPaths} by paths`);\n\t\tif (stats.filteredByMethods > 0) filterBreakdown.push(`${stats.filteredByMethods} by methods`);\n\t\tif (stats.filteredByOperationIds > 0) filterBreakdown.push(`${stats.filteredByOperationIds} by operationIds`);\n\t\tif (stats.filteredByDeprecated > 0) filterBreakdown.push(`${stats.filteredByDeprecated} by deprecated flag`);\n\n\t\tif (filterBreakdown.length > 0) {\n\t\t\tconsole.warn(` Filtered: ${filterBreakdown.join(\", \")}`);\n\t\t}\n\t}\n}\n\n/**\n * Format filter statistics for display in generated output\n * Returns a formatted string suitable for inclusion in comments\n *\n * @param stats - Filter statistics object\n * @returns Formatted statistics string\n */\nexport function formatFilterStatistics(stats: FilterStatistics): string {\n\tif (stats.totalOperations === 0) {\n\t\treturn \"\";\n\t}\n\n\tconst lines: string[] = [];\n\tlines.push(\"Operation Filtering:\");\n\tlines.push(` Total operations: ${stats.totalOperations}`);\n\tlines.push(` Included operations: ${stats.includedOperations}`);\n\n\tconst filteredCount =\n\t\tstats.filteredByTags +\n\t\tstats.filteredByPaths +\n\t\tstats.filteredByMethods +\n\t\tstats.filteredByOperationIds +\n\t\tstats.filteredByDeprecated;\n\n\tif (filteredCount > 0) {\n\t\tlines.push(` Filtered operations: ${filteredCount}`);\n\t\tif (stats.filteredByTags > 0) lines.push(` - By tags: ${stats.filteredByTags}`);\n\t\tif (stats.filteredByPaths > 0) lines.push(` - By paths: ${stats.filteredByPaths}`);\n\t\tif (stats.filteredByMethods > 0) lines.push(` - By methods: ${stats.filteredByMethods}`);\n\t\tif (stats.filteredByOperationIds > 0) lines.push(` - By operationIds: ${stats.filteredByOperationIds}`);\n\t\tif (stats.filteredByDeprecated > 0) lines.push(` - By deprecated: ${stats.filteredByDeprecated}`);\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n","/**\n * OpenAPI $ref resolution utilities\n *\n * Provides functions to resolve $ref references to component definitions\n * Supports: parameters, requestBodies, responses, schemas\n *\n * @internal Used by core and playwright packages\n */\n\nimport type { OpenAPIParameter, OpenAPIRequestBody, OpenAPIResponse, OpenAPISchema, OpenAPISpec } from \"../types\";\n\n/**\n * Type for any resolvable component\n */\ntype ResolvableComponent = OpenAPIParameter | OpenAPIRequestBody | OpenAPIResponse | OpenAPISchema | any;\n\n/**\n * Resolve a $ref to a component definition\n * Handles nested $refs by recursively resolving until no more refs found\n *\n * @param obj - Object that may contain a $ref\n * @param spec - The OpenAPI specification\n * @param maxDepth - Maximum recursion depth to prevent infinite loops (default: 10)\n * @returns The resolved component, or the original object if not a reference\n */\nexport function resolveRef<T extends ResolvableComponent>(obj: T | any, spec: OpenAPISpec, maxDepth = 10): T {\n\tif (!obj || typeof obj !== \"object\" || maxDepth <= 0) return obj;\n\tif (!obj.$ref) return obj;\n\n\tconst ref = obj.$ref as string;\n\tlet resolved: any = null;\n\n\t// Match different component types\n\tconst paramMatch = ref.match(/^#\\/components\\/parameters\\/(.+)$/);\n\tconst requestBodyMatch = ref.match(/^#\\/components\\/requestBodies\\/(.+)$/);\n\tconst responseMatch = ref.match(/^#\\/components\\/responses\\/(.+)$/);\n\tconst schemaMatch = ref.match(/^#\\/components\\/schemas\\/(.+)$/);\n\n\tif (paramMatch && spec.components?.parameters) {\n\t\tconst name = paramMatch[1];\n\t\tresolved = spec.components.parameters[name];\n\t} else if (requestBodyMatch && spec.components?.requestBodies) {\n\t\tconst name = requestBodyMatch[1];\n\t\tresolved = spec.components.requestBodies[name];\n\t} else if (responseMatch && spec.components?.responses) {\n\t\tconst name = responseMatch[1];\n\t\tresolved = spec.components.responses[name];\n\t} else if (schemaMatch && spec.components?.schemas) {\n\t\tconst name = schemaMatch[1];\n\t\tresolved = spec.components.schemas[name];\n\t}\n\n\tif (resolved) {\n\t\t// Recursively resolve nested $refs\n\t\tif (resolved.$ref) {\n\t\t\treturn resolveRef(resolved, spec, maxDepth - 1);\n\t\t}\n\t\treturn resolved;\n\t}\n\n\t// Return original if can't resolve\n\treturn obj;\n}\n\n/**\n * Resolve a parameter reference\n * Convenience wrapper for resolveRef with parameter type\n */\nexport function resolveParameterRef(param: any, spec: OpenAPISpec): OpenAPIParameter | any {\n\treturn resolveRef<OpenAPIParameter>(param, spec);\n}\n\n/**\n * Resolve a request body reference\n * Convenience wrapper for resolveRef with request body type\n */\nexport function resolveRequestBodyRef(requestBody: any, spec: OpenAPISpec): OpenAPIRequestBody | any {\n\treturn resolveRef<OpenAPIRequestBody>(requestBody, spec);\n}\n\n/**\n * Resolve a response reference\n * Convenience wrapper for resolveRef with response type\n */\nexport function resolveResponseRef(response: any, spec: OpenAPISpec): OpenAPIResponse | any {\n\treturn resolveRef<OpenAPIResponse>(response, spec);\n}\n\n/**\n * Merge path-level parameters with operation-level parameters\n * Operation parameters override path-level parameters with the same name and location\n *\n * @param pathParams - Parameters defined at the path level\n * @param operationParams - Parameters defined at the operation level\n * @param spec - The OpenAPI specification for resolving $refs\n * @returns Merged array of resolved parameters\n */\nexport function mergeParameters(\n\tpathParams: any[] | undefined,\n\toperationParams: any[] | undefined,\n\tspec: OpenAPISpec\n): any[] {\n\tconst resolvedPathParams = (pathParams || []).map(p => resolveParameterRef(p, spec));\n\tconst resolvedOperationParams = (operationParams || []).map(p => resolveParameterRef(p, spec));\n\n\t// Start with path-level params\n\tconst merged = [...resolvedPathParams];\n\n\t// Operation params override path params by name + in\n\tfor (const opParam of resolvedOperationParams) {\n\t\tif (!opParam || typeof opParam !== \"object\") continue;\n\n\t\tconst existingIndex = merged.findIndex(\n\t\t\tp => p && typeof p === \"object\" && p.name === opParam.name && p.in === opParam.in\n\t\t);\n\n\t\tif (existingIndex >= 0) {\n\t\t\t// Override existing param\n\t\t\tmerged[existingIndex] = opParam;\n\t\t} else {\n\t\t\t// Add new param\n\t\t\tmerged.push(opParam);\n\t\t}\n\t}\n\n\treturn merged;\n}\n","import { cosmiconfig } from \"cosmiconfig\";\nimport { z } from \"zod\";\nimport type { ConfigFile, OpenApiGeneratorOptions } from \"../types\";\nimport { OperationFiltersSchema, RequestResponseOptionsSchema } from \"./config-schemas\";\nimport { formatConfigValidationError } from \"./config-validation\";\nimport { createTypeScriptLoader } from \"./typescript-loader\";\n\nconst OpenApiGeneratorOptionsSchema = z.strictObject({\n\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\tinput: z.string(),\n\toutput: z.string(),\n\tincludeDescriptions: z.boolean().optional(),\n\tuseDescribe: z.boolean().optional(),\n\tdefaultNullable: z.boolean().optional(),\n\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n\tschemaType: z.enum([\"all\", \"request\", \"response\"]).optional(),\n\tprefix: z.string().optional(),\n\tsuffix: z.string().optional(),\n\tstripSchemaPrefix: z.string().optional(),\n\tshowStats: z.boolean().optional(),\n\trequest: RequestResponseOptionsSchema.optional(),\n\tresponse: RequestResponseOptionsSchema.optional(),\n\tname: z.string().optional(),\n\toperationFilters: OperationFiltersSchema.optional(),\n\tcacheSize: z.number().positive().optional(),\n\tbatchSize: z.number().positive().optional(),\n\tcustomDateTimeFormatRegex: z\n\t\t.union([\n\t\t\tz.string().refine(\n\t\t\t\tpattern => {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tnew RegExp(pattern);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t} catch {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{ message: \"Must be a valid regular expression pattern\" }\n\t\t\t),\n\t\t\tz.instanceof(RegExp),\n\t\t])\n\t\t.optional(),\n});\n\nconst ConfigFileSchema = z.strictObject({\n\tdefaults: z\n\t\t.strictObject({\n\t\t\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\t\t\tincludeDescriptions: z.boolean().optional(),\n\t\t\tuseDescribe: z.boolean().optional(),\n\t\t\tdefaultNullable: z.boolean().optional(),\n\t\t\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n\t\t\tschemaType: z.enum([\"all\", \"request\", \"response\"]).optional(),\n\t\t\tprefix: z.string().optional(),\n\t\t\tsuffix: z.string().optional(),\n\t\t\tstripSchemaPrefix: z.string().optional(),\n\t\t\tshowStats: z.boolean().optional(),\n\t\t\trequest: RequestResponseOptionsSchema.optional(),\n\t\t\tresponse: RequestResponseOptionsSchema.optional(),\n\t\t\toperationFilters: OperationFiltersSchema.optional(),\n\t\t\tcacheSize: z.number().positive().optional(),\n\t\t\tbatchSize: z.number().positive().optional(),\n\t\t\tcustomDateTimeFormatRegex: z\n\t\t\t\t.union([\n\t\t\t\t\tz.string().refine(\n\t\t\t\t\t\tpattern => {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\tnew RegExp(pattern);\n\t\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t\t} catch {\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ message: \"Must be a valid regular expression pattern\" }\n\t\t\t\t\t),\n\t\t\t\t\tz.instanceof(RegExp),\n\t\t\t\t])\n\t\t\t\t.optional(),\n\t\t})\n\t\t.optional(),\n\tspecs: z\n\t\t.array(OpenApiGeneratorOptionsSchema)\n\t\t.min(1, {\n\t\t\tmessage:\n\t\t\t\t\"Configuration must include at least one specification. Each specification should have 'input' and 'output' paths.\",\n\t\t})\n\t\t.refine(specs => specs.every(spec => spec.input && spec.output), {\n\t\t\tmessage: \"Each specification must have both 'input' and 'output' paths defined\",\n\t\t}),\n\texecutionMode: z.enum([\"parallel\", \"sequential\"]).optional(),\n});\n\n/**\n * Load and validate configuration file\n * Supports: openapi-to-zod.config.{ts,json}, package.json under \"openapi-to-zod\" key\n *\n * @param configPath - Optional explicit path to config file. If not provided, searches automatically\n * @returns Validated ConfigFile object\n * @throws Error if config file not found, invalid, or contains unknown properties\n */\nexport async function loadConfig(configPath?: string): Promise<ConfigFile> {\n\tconst explorer = cosmiconfig(\"openapi-to-zod\", {\n\t\tsearchPlaces: [\"openapi-to-zod.config.ts\", \"openapi-to-zod.config.json\", \"package.json\"],\n\t\tloaders: {\n\t\t\t\".ts\": createTypeScriptLoader(),\n\t\t},\n\t});\n\n\tlet result: Awaited<ReturnType<typeof explorer.load>> | Awaited<ReturnType<typeof explorer.search>>;\n\n\tif (configPath) {\n\t\t// Load from explicit path (overrides auto-discovery)\n\t\tresult = await explorer.load(configPath);\n\t} else {\n\t\t// Auto-discover config file starting from cwd\n\t\tresult = await explorer.search();\n\t}\n\n\tif (!result || !result.config) {\n\t\tthrow new Error(\n\t\t\tconfigPath\n\t\t\t\t? `Config file not found at: ${configPath}`\n\t\t\t\t: \"No config file found. Searched for: openapi-to-zod.config.ts, openapi-to-zod.config.json, package.json (openapi-to-zod key)\\nRun 'openapi-to-zod init' to create a new config file.\"\n\t\t);\n\t}\n\n\t// Strict validation using Zod schema\n\ttry {\n\t\tconst validatedConfig = ConfigFileSchema.parse(result.config);\n\t\treturn validatedConfig;\n\t} catch (error) {\n\t\tif (error instanceof z.ZodError) {\n\t\t\tconst errorMessage = formatConfigValidationError(error, result.filepath, configPath);\n\t\t\tthrow new Error(errorMessage);\n\t\t}\n\t\tthrow error;\n\t}\n}\n\n/**\n * Merge global defaults with per-spec configuration\n * CLI arguments have highest precedence and are merged separately in CLI layer\n *\n * @param config - Validated configuration file\n * @returns Array of fully resolved OpenApiGeneratorOptions objects\n */\nexport function mergeConfigWithDefaults(config: ConfigFile): OpenApiGeneratorOptions[] {\n\tif (!config?.specs || !Array.isArray(config.specs)) {\n\t\tthrow new Error(\"Invalid config: specs array is required\");\n\t}\n\n\tconst defaults = config.defaults || {};\n\n\treturn config.specs.map(spec => {\n\t\t// Deep merge: spec options override defaults\n\t\tconst merged: OpenApiGeneratorOptions = {\n\t\t\t// Apply defaults first\n\t\t\tmode: defaults.mode,\n\t\t\tincludeDescriptions: defaults.includeDescriptions,\n\t\t\tuseDescribe: defaults.useDescribe,\n\t\t\tdefaultNullable: defaults.defaultNullable,\n\t\t\temptyObjectBehavior: defaults.emptyObjectBehavior,\n\t\t\tschemaType: defaults.schemaType,\n\t\t\tprefix: defaults.prefix,\n\t\t\tsuffix: defaults.suffix,\n\t\t\tshowStats: defaults.showStats,\n\t\t\tcustomDateTimeFormatRegex: defaults.customDateTimeFormatRegex,\n\n\t\t\t// Override with spec-specific values (including required input/output)\n\t\t\t...spec,\n\t\t};\n\t\treturn merged;\n\t});\n}\n\n/**\n * Merge CLI options with config options\n * CLI options have highest precedence and override both spec and default config\n *\n * @param specConfig - Configuration from config file (with defaults already applied)\n * @param cliOptions - Options provided via CLI arguments\n * @returns Merged OpenApiGeneratorOptions with CLI taking precedence\n */\nexport function mergeCliWithConfig(\n\tspecConfig: OpenApiGeneratorOptions,\n\tcliOptions: Partial<OpenApiGeneratorOptions>\n): OpenApiGeneratorOptions {\n\t// CLI options override everything\n\treturn {\n\t\t...specConfig,\n\t\t...Object.fromEntries(Object.entries(cliOptions).filter(([_, v]) => v !== undefined)),\n\t} as OpenApiGeneratorOptions;\n}\n","import { z } from \"zod\";\n\n/**\n * @shared Zod schema for request/response options validation\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport const RequestResponseOptionsSchema = z.strictObject({\n\tmode: z.enum([\"strict\", \"normal\", \"loose\"]).optional(),\n\tuseDescribe: z.boolean().optional(),\n\tincludeDescriptions: z.boolean().optional(),\n\tdefaultNullable: z.boolean().optional(),\n\temptyObjectBehavior: z.enum([\"strict\", \"loose\", \"record\"]).optional(),\n});\n\n/**\n * @shared Base Zod schema for operation filters (without status codes)\n * @since 1.0.0\n * Utility used by core and playwright packages\n */\nexport const OperationFiltersSchema = z.strictObject({\n\tincludeTags: z.array(z.string()).optional(),\n\texcludeTags: z.array(z.string()).optional(),\n\tincludePaths: z.array(z.string()).optional(),\n\texcludePaths: z.array(z.string()).optional(),\n\tincludeMethods: z.array(z.string()).optional(),\n\texcludeMethods: z.array(z.string()).optional(),\n\tincludeOperationIds: z.array(z.string()).optional(),\n\texcludeOperationIds: z.array(z.string()).optional(),\n\texcludeDeprecated: z.boolean().optional(),\n});\n\n/**\n * Inferred TypeScript type for request/response options\n */\nexport type RequestResponseOptions = z.infer<typeof RequestResponseOptionsSchema>;\n\n/**\n * Inferred TypeScript type for base operation filters\n */\nexport type BaseOperationFilters = z.infer<typeof OperationFiltersSchema>;\n","import { z } from \"zod\";\n\n/**\n * @shared Format Zod validation errors into user-friendly error messages\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * @param error - The Zod validation error\n * @param filepath - Path to the config file that was being validated\n * @param configPath - Optional explicit config path provided by user\n * @param additionalNotes - Optional array of additional notes to append to the error message\n * @returns Formatted error message string\n */\nexport function formatConfigValidationError(\n\terror: z.ZodError,\n\tfilepath: string | undefined,\n\tconfigPath: string | undefined,\n\tadditionalNotes?: string[]\n): string {\n\tconst formattedErrors =\n\t\terror.issues\n\t\t\t?.map(err => {\n\t\t\t\tconst path = err.path.length > 0 ? err.path.join(\".\") : \"root\";\n\t\t\t\treturn ` - ${path}: ${err.message}`;\n\t\t\t})\n\t\t\t.join(\"\\n\") || \"Unknown validation error\";\n\n\tconst configSource = filepath || configPath || \"config file\";\n\tconst lines = [\n\t\t`Invalid configuration file at: ${configSource}`,\n\t\t\"\",\n\t\t\"Validation errors:\",\n\t\tformattedErrors,\n\t\t\"\",\n\t\t\"Please check your configuration file and ensure:\",\n\t\t\" - All required fields are present (specs array with input/output)\",\n\t\t\" - Field names are spelled correctly (no typos)\",\n\t\t\" - Values match the expected types (e.g., mode: 'strict' | 'normal' | 'loose')\",\n\t\t\" - No unknown/extra properties are included\",\n\t];\n\n\tif (additionalNotes && additionalNotes.length > 0) {\n\t\tlines.push(...additionalNotes.map(note => ` - ${note}`));\n\t}\n\n\treturn lines.join(\"\\n\");\n}\n","import type { Loader } from \"cosmiconfig\";\n\n/**\n * @shared Create a TypeScript loader for cosmiconfig using esbuild\n * @since 1.0.0\n * Utility used by core and playwright packages\n *\n * Creates a loader that transpiles TypeScript config files to JavaScript\n * using esbuild, then executes them to load the configuration.\n *\n * @returns A cosmiconfig Loader function\n */\nexport function createTypeScriptLoader(): Loader {\n\treturn async (filepath: string) => {\n\t\ttry {\n\t\t\t// Use esbuild to transpile TypeScript to JavaScript\n\t\t\tconst esbuild = await import(\"esbuild\");\n\t\t\tconst fs = await import(\"node:fs\");\n\t\t\tconst path = await import(\"node:path\");\n\n\t\t\tconst tsCode = fs.readFileSync(filepath, \"utf-8\");\n\t\t\tconst result = await esbuild.build({\n\t\t\t\tstdin: {\n\t\t\t\t\tcontents: tsCode,\n\t\t\t\t\tloader: \"ts\",\n\t\t\t\t\tresolveDir: path.dirname(filepath),\n\t\t\t\t\tsourcefile: filepath,\n\t\t\t\t},\n\t\t\t\tformat: \"cjs\",\n\t\t\t\tplatform: \"node\",\n\t\t\t\ttarget: \"node18\",\n\t\t\t\tbundle: false,\n\t\t\t\twrite: false,\n\t\t\t});\n\n\t\t\tconst jsCode = result.outputFiles[0].text;\n\n\t\t\t// Create a module and execute it\n\t\t\tconst module = { exports: {} } as any;\n\t\t\tconst func = new Function(\"exports\", \"module\", \"require\", \"__filename\", \"__dirname\", jsCode);\n\t\t\tfunc(module.exports, module, require, filepath, path.dirname(filepath));\n\n\t\t\treturn module.exports.default || module.exports;\n\t\t} catch (error) {\n\t\t\tthrow new Error(\n\t\t\t\t`Failed to load TypeScript config from ${filepath}: ${error instanceof Error ? error.message : String(error)}`\n\t\t\t);\n\t\t}\n\t};\n}\n"],"mappings":"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","names":["exports","module","exports","module","exports","module","exports","module","exports","module","F","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","exports","module","cursor","exports","module","exports","module","cursor","exports","module","exports","module","exports","exports","module","F","prompts","override","question","answer","getFormattedAnswer","require_action","exports","module","require_strip","exports","module","require_clear","exports","module","require_figures","exports","module","require_style","exports","module","require_lines","exports","module","require_wrap","exports","module","require_entriesToDisplay","exports","module","require_util","exports","module","require_prompt","exports","module","require_text","exports","module","require_select","exports","module","require_toggle","exports","module","require_datepart","exports","module","require_meridiem","exports","module","require_day","exports","module","require_hours","exports","module","require_milliseconds","exports","module","require_minutes","exports","module","require_month","exports","module","require_seconds","exports","module","require_year","exports","module","require_dateparts","exports","module","require_date","exports","module","require_number","exports","module","require_multiselect","exports","module","cursor","require_autocomplete","exports","module","require_autocompleteMultiselect","exports","module","cursor","require_confirm","exports","module","require_elements","exports","module","require_prompts","exports","exports","module","prompts","override","question","answer","require_prompts","exports","module","import_node_fs","import_node_path","import_minimatch","schemaCode","typeCode","isNullable","isNullable","schemaStrings","union","elseValidation","elseRequiredProps","generatePropertyAccess","definedProps","import_minimatch","resolveRef","_a","jsdoc","strippedName","zodType","import_zod","module","prompts"]}