clack-kit 0.0.1-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["path","fs","figlet","n","a","r","s","i","o","t","x","enUsLocale","zhCnLocale","process","i18next","process","path","os","path","util","path","path","path","path","PassThrough","fs","fs","path","stream_1","path","path","stream_1","path","path","picocolors","path","process","picocolors","process","path","process"],"sources":["../node_modules/figlet/dist/figlet-C8Ns3Vyn.js","../node_modules/figlet/dist/node-figlet.mjs","../src/shared/helpers.ts","../src/authoring/cli.ts","../src/authoring/templates.ts","../src/authoring/step-builders.ts","../src/authoring/workflow.ts","../src/runtime/clack.ts","../node_modules/tinyexec/dist/main.mjs","../src/runtime/command.ts","../src/shared/errors.ts","../node_modules/i18next/dist/esm/i18next.js","../src/shared/locales/en-US.json","../src/shared/locales/zh-CN.json","../src/shared/i18n.ts","../src/shared/timezone.ts","../src/storage/file-document.ts","../src/storage/checkpoint.ts","../src/storage/history.ts","../src/storage/log.ts","../src/shared/resolvers.ts","../src/nodes/display/handlers.ts","../node_modules/picocolors/picocolors.js","../node_modules/fast-glob/out/utils/array.js","../node_modules/fast-glob/out/utils/errno.js","../node_modules/fast-glob/out/utils/fs.js","../node_modules/fast-glob/out/utils/path.js","../node_modules/is-extglob/index.js","../node_modules/is-glob/index.js","../node_modules/glob-parent/index.js","../node_modules/braces/lib/utils.js","../node_modules/braces/lib/stringify.js","../node_modules/is-number/index.js","../node_modules/to-regex-range/index.js","../node_modules/fill-range/index.js","../node_modules/braces/lib/compile.js","../node_modules/braces/lib/expand.js","../node_modules/braces/lib/constants.js","../node_modules/braces/lib/parse.js","../node_modules/braces/index.js","../node_modules/micromatch/node_modules/picomatch/lib/constants.js","../node_modules/micromatch/node_modules/picomatch/lib/utils.js","../node_modules/micromatch/node_modules/picomatch/lib/scan.js","../node_modules/micromatch/node_modules/picomatch/lib/parse.js","../node_modules/micromatch/node_modules/picomatch/lib/picomatch.js","../node_modules/micromatch/node_modules/picomatch/index.js","../node_modules/micromatch/index.js","../node_modules/fast-glob/out/utils/pattern.js","../node_modules/merge2/index.js","../node_modules/fast-glob/out/utils/stream.js","../node_modules/fast-glob/out/utils/string.js","../node_modules/fast-glob/out/utils/index.js","../node_modules/fast-glob/out/managers/tasks.js","../node_modules/@nodelib/fs.stat/out/providers/async.js","../node_modules/@nodelib/fs.stat/out/providers/sync.js","../node_modules/@nodelib/fs.stat/out/adapters/fs.js","../node_modules/@nodelib/fs.stat/out/settings.js","../node_modules/@nodelib/fs.stat/out/index.js","../node_modules/queue-microtask/index.js","../node_modules/run-parallel/index.js","../node_modules/@nodelib/fs.scandir/out/constants.js","../node_modules/@nodelib/fs.scandir/out/utils/fs.js","../node_modules/@nodelib/fs.scandir/out/utils/index.js","../node_modules/@nodelib/fs.scandir/out/providers/common.js","../node_modules/@nodelib/fs.scandir/out/providers/async.js","../node_modules/@nodelib/fs.scandir/out/providers/sync.js","../node_modules/@nodelib/fs.scandir/out/adapters/fs.js","../node_modules/@nodelib/fs.scandir/out/settings.js","../node_modules/@nodelib/fs.scandir/out/index.js","../node_modules/reusify/reusify.js","../node_modules/fastq/queue.js","../node_modules/@nodelib/fs.walk/out/readers/common.js","../node_modules/@nodelib/fs.walk/out/readers/reader.js","../node_modules/@nodelib/fs.walk/out/readers/async.js","../node_modules/@nodelib/fs.walk/out/providers/async.js","../node_modules/@nodelib/fs.walk/out/providers/stream.js","../node_modules/@nodelib/fs.walk/out/readers/sync.js","../node_modules/@nodelib/fs.walk/out/providers/sync.js","../node_modules/@nodelib/fs.walk/out/settings.js","../node_modules/@nodelib/fs.walk/out/index.js","../node_modules/fast-glob/out/readers/reader.js","../node_modules/fast-glob/out/readers/stream.js","../node_modules/fast-glob/out/readers/async.js","../node_modules/fast-glob/out/providers/matchers/matcher.js","../node_modules/fast-glob/out/providers/matchers/partial.js","../node_modules/fast-glob/out/providers/filters/deep.js","../node_modules/fast-glob/out/providers/filters/entry.js","../node_modules/fast-glob/out/providers/filters/error.js","../node_modules/fast-glob/out/providers/transformers/entry.js","../node_modules/fast-glob/out/providers/provider.js","../node_modules/fast-glob/out/providers/async.js","../node_modules/fast-glob/out/providers/stream.js","../node_modules/fast-glob/out/readers/sync.js","../node_modules/fast-glob/out/providers/sync.js","../node_modules/fast-glob/out/settings.js","../node_modules/fast-glob/out/index.js","../src/shared/files.ts","../src/session/run-session.ts","../src/shared/prompt.ts","../src/nodes/input/handlers.ts","../src/runtime/console.ts","../src/nodes/task/command-handler.ts","../src/graph/scheduler.ts","../src/runtime/time.ts","../src/runtime/checkpoint-state.ts","../src/runtime/summary.ts","../src/runtime/history-state.ts","../src/runtime/intro.ts","../src/runtime/engine.ts","../src/runtime/renderer.ts","../src/runtime/kit.ts"],"sourcesContent":["const LAYOUT = {\n FULL_WIDTH: 0,\n FITTING: 1,\n SMUSHING: 2,\n CONTROLLED_SMUSHING: 3\n};\nclass FigletFont {\n constructor() {\n this.comment = \"\";\n this.numChars = 0;\n this.options = {};\n }\n}\nconst fontList = [\n \"1Row\",\n \"3-D\",\n \"3D Diagonal\",\n \"3D-ASCII\",\n \"3x5\",\n \"4Max\",\n \"5 Line Oblique\",\n \"AMC 3 Line\",\n \"AMC 3 Liv1\",\n \"AMC AAA01\",\n \"AMC Neko\",\n \"AMC Razor\",\n \"AMC Razor2\",\n \"AMC Slash\",\n \"AMC Slider\",\n \"AMC Thin\",\n \"AMC Tubes\",\n \"AMC Untitled\",\n \"ANSI Compact\",\n \"ANSI Regular\",\n \"ANSI Shadow\",\n \"ASCII 12\",\n \"ASCII 9\",\n \"ASCII New Roman\",\n \"Acrobatic\",\n \"Alligator\",\n \"Alligator2\",\n \"Alpha\",\n \"Alphabet\",\n \"Arrows\",\n \"Avatar\",\n \"B1FF\",\n \"Babyface Lame\",\n \"Babyface Leet\",\n \"Banner\",\n \"Banner3-D\",\n \"Banner3\",\n \"Banner4\",\n \"Barbwire\",\n \"Basic\",\n \"Bear\",\n \"Bell\",\n \"Benjamin\",\n \"Big ASCII 12\",\n \"Big ASCII 9\",\n \"Big Chief\",\n \"Big Money-ne\",\n \"Big Money-nw\",\n \"Big Money-se\",\n \"Big Money-sw\",\n \"Big Mono 12\",\n \"Big Mono 9\",\n \"Big\",\n \"Bigfig\",\n \"Binary\",\n \"Block\",\n \"Blocks\",\n \"Bloody\",\n \"BlurVision ASCII\",\n \"Bolger\",\n \"Braced\",\n \"Bright\",\n \"Broadway KB\",\n \"Broadway\",\n \"Bubble\",\n \"Bulbhead\",\n \"Caligraphy\",\n \"Caligraphy2\",\n \"Calvin S\",\n \"Cards\",\n \"Catwalk\",\n \"Chiseled\",\n \"Chunky\",\n \"Circle\",\n \"Classy\",\n \"Coder Mini\",\n \"Coinstak\",\n \"Cola\",\n \"Colossal\",\n \"Computer\",\n \"Contessa\",\n \"Contrast\",\n \"Cosmike\",\n \"Cosmike2\",\n \"Crawford\",\n \"Crawford2\",\n \"Crazy\",\n \"Cricket\",\n \"Cursive\",\n \"Cyberlarge\",\n \"Cybermedium\",\n \"Cybersmall\",\n \"Cygnet\",\n \"DANC4\",\n \"DOS Rebel\",\n \"DWhistled\",\n \"Dancing Font\",\n \"Decimal\",\n \"Def Leppard\",\n \"Delta Corps Priest 1\",\n \"DiamFont\",\n \"Diamond\",\n \"Diet Cola\",\n \"Digital\",\n \"Doh\",\n \"Doom\",\n \"Dot Matrix\",\n \"Double Shorts\",\n \"Double\",\n \"Dr Pepper\",\n \"Efti Chess\",\n \"Efti Font\",\n \"Efti Italic\",\n \"Efti Piti\",\n \"Efti Robot\",\n \"Efti Wall\",\n \"Efti Water\",\n \"Electronic\",\n \"Elite\",\n \"Emboss 2\",\n \"Emboss\",\n \"Epic\",\n \"Fender\",\n \"Filter\",\n \"Fire Font-k\",\n \"Fire Font-s\",\n \"Flipped\",\n \"Flower Power\",\n \"Font Font\",\n \"Four Tops\",\n \"Fraktur\",\n \"Fun Face\",\n \"Fun Faces\",\n \"Future Smooth\",\n \"Future Thin\",\n \"Future\",\n \"Fuzzy\",\n \"Georgi16\",\n \"Georgia11\",\n \"Ghost\",\n \"Ghoulish\",\n \"Glenyn\",\n \"Goofy\",\n \"Gothic\",\n \"Graceful\",\n \"Gradient\",\n \"Graffiti\",\n \"Greek\",\n \"Heart Left\",\n \"Heart Right\",\n \"Henry 3D\",\n \"Hex\",\n \"Hieroglyphs\",\n \"Hollywood\",\n \"Horizontal Left\",\n \"Horizontal Right\",\n \"ICL-1900\",\n \"Impossible\",\n \"Invita\",\n \"Isometric1\",\n \"Isometric2\",\n \"Isometric3\",\n \"Isometric4\",\n \"Italic\",\n \"Ivrit\",\n \"JS Block Letters\",\n \"JS Bracket Letters\",\n \"JS Capital Curves\",\n \"JS Cursive\",\n \"JS Stick Letters\",\n \"Jacky\",\n \"Jazmine\",\n \"Jerusalem\",\n \"Katakana\",\n \"Kban\",\n \"Keyboard\",\n \"Knob\",\n \"Konto Slant\",\n \"Konto\",\n \"LCD\",\n \"Larry 3D 2\",\n \"Larry 3D\",\n \"Lean\",\n \"Letter\",\n \"Letters\",\n \"Lil Devil\",\n \"Line Blocks\",\n \"Linux\",\n \"Lockergnome\",\n \"Madrid\",\n \"Marquee\",\n \"Maxfour\",\n \"Merlin1\",\n \"Merlin2\",\n \"Mike\",\n \"Mini\",\n \"Mirror\",\n \"Mnemonic\",\n \"Modular\",\n \"Mono 12\",\n \"Mono 9\",\n \"Morse\",\n \"Morse2\",\n \"Moscow\",\n \"Mshebrew210\",\n \"Muzzle\",\n \"NScript\",\n \"NT Greek\",\n \"NV Script\",\n \"Nancyj-Fancy\",\n \"Nancyj-Improved\",\n \"Nancyj-Underlined\",\n \"Nancyj\",\n \"Nipples\",\n \"O8\",\n \"OS2\",\n \"Octal\",\n \"Ogre\",\n \"Old Banner\",\n \"Pagga\",\n \"Patorjk's Cheese\",\n \"Patorjk-HeX\",\n \"Pawp\",\n \"Peaks Slant\",\n \"Peaks\",\n \"Pebbles\",\n \"Pepper\",\n \"Poison\",\n \"Puffy\",\n \"Puzzle\",\n \"Pyramid\",\n \"Rammstein\",\n \"Rebel\",\n \"Rectangles\",\n \"Red Phoenix\",\n \"Relief\",\n \"Relief2\",\n \"Reverse\",\n \"Roman\",\n \"Rot13\",\n \"Rotated\",\n \"Rounded\",\n \"Rowan Cap\",\n \"Rozzo\",\n \"RubiFont\",\n \"Runic\",\n \"Runyc\",\n \"S Blood\",\n \"SL Script\",\n \"Santa Clara\",\n \"Script\",\n \"Serifcap\",\n \"Shaded Blocky\",\n \"Shadow\",\n \"Shimrod\",\n \"Short\",\n \"Slant Relief\",\n \"Slant\",\n \"Slide\",\n \"Small ASCII 12\",\n \"Small ASCII 9\",\n \"Small Block\",\n \"Small Braille\",\n \"Small Caps\",\n \"Small Isometric1\",\n \"Small Keyboard\",\n \"Small Mono 12\",\n \"Small Mono 9\",\n \"Small Poison\",\n \"Small Script\",\n \"Small Shadow\",\n \"Small Slant\",\n \"Small Tengwar\",\n \"Small\",\n \"Soft\",\n \"Speed\",\n \"Spliff\",\n \"Stacey\",\n \"Stampate\",\n \"Stampatello\",\n \"Standard\",\n \"Star Strips\",\n \"Star Wars\",\n \"Stellar\",\n \"Stforek\",\n \"Stick Letters\",\n \"Stop\",\n \"Straight\",\n \"Stronger Than All\",\n \"Sub-Zero\",\n \"Swamp Land\",\n \"Swan\",\n \"Sweet\",\n \"THIS\",\n \"Tanja\",\n \"Tengwar\",\n \"Term\",\n \"Terrace\",\n \"Test1\",\n \"The Edge\",\n \"Thick\",\n \"Thin\",\n \"Thorned\",\n \"Three Point\",\n \"Ticks Slant\",\n \"Ticks\",\n \"Tiles\",\n \"Tinker-Toy\",\n \"Tmplr\",\n \"Tombstone\",\n \"Train\",\n \"Trek\",\n \"Tsalagi\",\n \"Tubular\",\n \"Twisted\",\n \"Two Point\",\n \"USA Flag\",\n \"Univers\",\n \"Upside Down Text\",\n \"Varsity\",\n \"Wavescape\",\n \"Wavy\",\n \"Weird\",\n \"Wet Letter\",\n \"Whimsy\",\n \"WideTerm\",\n \"Wow\",\n \"miniwi\"\n];\nconst renamedFonts = {\n \"ANSI-Compact\": \"ANSI Compact\"\n};\nconst getFontName = (name) => {\n return renamedFonts[name] ? renamedFonts[name] : name;\n};\nfunction escapeRegExpChar(char) {\n const specialChars = /[.*+?^${}()|[\\]\\\\]/;\n return specialChars.test(char) ? \"\\\\\" + char : char;\n}\nconst figlet = (() => {\n const { FULL_WIDTH = 0, FITTING, SMUSHING, CONTROLLED_SMUSHING } = LAYOUT;\n const figFonts = {};\n const figDefaults = {\n font: \"Standard\",\n fontPath: \"./fonts\",\n fetchFontIfMissing: true\n };\n function removeEndChar(line, lineNum, fontHeight) {\n const endChar = escapeRegExpChar(line.trim().slice(-1)) || \"@\";\n const endCharRegEx = lineNum === fontHeight - 1 ? new RegExp(endChar + endChar + \"?\\\\s*$\") : new RegExp(endChar + \"\\\\s*$\");\n return line.replace(endCharRegEx, \"\");\n }\n function getSmushingRules(oldLayout = -1, newLayout = null) {\n let rules = {};\n let val;\n let codes = [\n [16384, \"vLayout\", SMUSHING],\n [8192, \"vLayout\", FITTING],\n [4096, \"vRule5\", true],\n [2048, \"vRule4\", true],\n [1024, \"vRule3\", true],\n [512, \"vRule2\", true],\n [256, \"vRule1\", true],\n [128, \"hLayout\", SMUSHING],\n [64, \"hLayout\", FITTING],\n [32, \"hRule6\", true],\n [16, \"hRule5\", true],\n [8, \"hRule4\", true],\n [4, \"hRule3\", true],\n [2, \"hRule2\", true],\n [1, \"hRule1\", true]\n ];\n val = newLayout !== null ? newLayout : oldLayout;\n for (const [code, rule, value] of codes) {\n if (val >= code) {\n val -= code;\n if (rules[rule] === void 0) {\n rules[rule] = value;\n }\n } else if (rule !== \"vLayout\" && rule !== \"hLayout\") {\n rules[rule] = false;\n }\n }\n if (typeof rules[\"hLayout\"] === \"undefined\") {\n if (oldLayout === 0) {\n rules[\"hLayout\"] = FITTING;\n } else if (oldLayout === -1) {\n rules[\"hLayout\"] = FULL_WIDTH;\n } else {\n if (rules[\"hRule1\"] || rules[\"hRule2\"] || rules[\"hRule3\"] || rules[\"hRule4\"] || rules[\"hRule5\"] || rules[\"hRule6\"]) {\n rules[\"hLayout\"] = CONTROLLED_SMUSHING;\n } else {\n rules[\"hLayout\"] = SMUSHING;\n }\n }\n } else if (rules[\"hLayout\"] === SMUSHING) {\n if (rules[\"hRule1\"] || rules[\"hRule2\"] || rules[\"hRule3\"] || rules[\"hRule4\"] || rules[\"hRule5\"] || rules[\"hRule6\"]) {\n rules[\"hLayout\"] = CONTROLLED_SMUSHING;\n }\n }\n if (typeof rules[\"vLayout\"] === \"undefined\") {\n if (rules[\"vRule1\"] || rules[\"vRule2\"] || rules[\"vRule3\"] || rules[\"vRule4\"] || rules[\"vRule5\"]) {\n rules[\"vLayout\"] = CONTROLLED_SMUSHING;\n } else {\n rules[\"vLayout\"] = FULL_WIDTH;\n }\n } else if (rules[\"vLayout\"] === SMUSHING) {\n if (rules[\"vRule1\"] || rules[\"vRule2\"] || rules[\"vRule3\"] || rules[\"vRule4\"] || rules[\"vRule5\"]) {\n rules[\"vLayout\"] = CONTROLLED_SMUSHING;\n }\n }\n return rules;\n }\n function hRule1_Smush(ch1, ch2, hardBlank = \"\") {\n if (ch1 === ch2 && ch1 !== hardBlank) {\n return ch1;\n }\n return false;\n }\n function hRule2_Smush(ch1, ch2) {\n let rule2Str = \"|/\\\\[]{}()<>\";\n if (ch1 === \"_\") {\n if (rule2Str.indexOf(ch2) !== -1) {\n return ch2;\n }\n } else if (ch2 === \"_\") {\n if (rule2Str.indexOf(ch1) !== -1) {\n return ch1;\n }\n }\n return false;\n }\n function hRule3_Smush(ch1, ch2) {\n let rule3Classes = \"| /\\\\ [] {} () <>\";\n let r3_pos1 = rule3Classes.indexOf(ch1);\n let r3_pos2 = rule3Classes.indexOf(ch2);\n if (r3_pos1 !== -1 && r3_pos2 !== -1) {\n if (r3_pos1 !== r3_pos2 && Math.abs(r3_pos1 - r3_pos2) !== 1) {\n const startPos = Math.max(r3_pos1, r3_pos2);\n const endPos = startPos + 1;\n return rule3Classes.substring(startPos, endPos);\n }\n }\n return false;\n }\n function hRule4_Smush(ch1, ch2) {\n let rule4Str = \"[] {} ()\";\n let r4_pos1 = rule4Str.indexOf(ch1);\n let r4_pos2 = rule4Str.indexOf(ch2);\n if (r4_pos1 !== -1 && r4_pos2 !== -1) {\n if (Math.abs(r4_pos1 - r4_pos2) <= 1) {\n return \"|\";\n }\n }\n return false;\n }\n function hRule5_Smush(ch1, ch2) {\n const patterns = {\n \"/\\\\\": \"|\",\n \"\\\\/\": \"Y\",\n \"><\": \"X\"\n };\n return patterns[ch1 + ch2] || false;\n }\n function hRule6_Smush(ch1, ch2, hardBlank = \"\") {\n if (ch1 === hardBlank && ch2 === hardBlank) {\n return hardBlank;\n }\n return false;\n }\n function vRule1_Smush(ch1, ch2) {\n if (ch1 === ch2) {\n return ch1;\n }\n return false;\n }\n function vRule2_Smush(ch1, ch2) {\n return hRule2_Smush(ch1, ch2);\n }\n function vRule3_Smush(ch1, ch2) {\n return hRule3_Smush(ch1, ch2);\n }\n function vRule4_Smush(ch1, ch2) {\n if (ch1 === \"-\" && ch2 === \"_\" || ch1 === \"_\" && ch2 === \"-\") {\n return \"=\";\n }\n return false;\n }\n function vRule5_Smush(ch1, ch2) {\n if (ch1 === \"|\" && ch2 === \"|\") {\n return \"|\";\n }\n return false;\n }\n function uni_Smush(ch1, ch2, hardBlank) {\n if (ch2 === \" \" || ch2 === \"\") {\n return ch1;\n } else if (ch2 === hardBlank && ch1 !== \" \") {\n return ch1;\n } else {\n return ch2;\n }\n }\n function canVerticalSmush(txt1, txt2, opts) {\n if (opts.fittingRules && opts.fittingRules.vLayout === FULL_WIDTH) {\n return \"invalid\";\n }\n let ii, len = Math.min(txt1.length, txt2.length), ch1, ch2, endSmush = false, validSmush;\n if (len === 0) {\n return \"invalid\";\n }\n for (ii = 0; ii < len; ii++) {\n ch1 = txt1.substring(ii, ii + 1);\n ch2 = txt2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (opts.fittingRules && opts.fittingRules.vLayout === FITTING) {\n return \"invalid\";\n } else if (opts.fittingRules && opts.fittingRules.vLayout === SMUSHING) {\n return \"end\";\n } else {\n if (vRule5_Smush(ch1, ch2)) {\n endSmush = endSmush || false;\n continue;\n }\n validSmush = false;\n validSmush = opts.fittingRules && opts.fittingRules.vRule1 ? vRule1_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && opts.fittingRules && opts.fittingRules.vRule2 ? vRule2_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && opts.fittingRules && opts.fittingRules.vRule3 ? vRule3_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && opts.fittingRules && opts.fittingRules.vRule4 ? vRule4_Smush(ch1, ch2) : validSmush;\n endSmush = true;\n if (!validSmush) {\n return \"invalid\";\n }\n }\n }\n }\n if (endSmush) {\n return \"end\";\n } else {\n return \"valid\";\n }\n }\n function getVerticalSmushDist(lines1, lines2, opts) {\n let maxDist = lines1.length;\n let len1 = lines1.length;\n let subLines1, subLines2, slen;\n let curDist = 1;\n let ii, ret, result;\n while (curDist <= maxDist) {\n subLines1 = lines1.slice(Math.max(0, len1 - curDist), len1);\n subLines2 = lines2.slice(0, Math.min(maxDist, curDist));\n slen = subLines2.length;\n result = \"\";\n for (ii = 0; ii < slen; ii++) {\n ret = canVerticalSmush(subLines1[ii], subLines2[ii], opts);\n if (ret === \"end\") {\n result = ret;\n } else if (ret === \"invalid\") {\n result = ret;\n break;\n } else {\n if (result === \"\") {\n result = \"valid\";\n }\n }\n }\n if (result === \"invalid\") {\n curDist--;\n break;\n }\n if (result === \"end\") {\n break;\n }\n if (result === \"valid\") {\n curDist++;\n }\n }\n return Math.min(maxDist, curDist);\n }\n function verticallySmushLines(line1, line2, opts) {\n let ii, len = Math.min(line1.length, line2.length);\n let ch1, ch2, result = \"\", validSmush;\n const fittingRules = opts.fittingRules || {};\n for (ii = 0; ii < len; ii++) {\n ch1 = line1.substring(ii, ii + 1);\n ch2 = line2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (fittingRules.vLayout === FITTING) {\n result += uni_Smush(ch1, ch2);\n } else if (fittingRules.vLayout === SMUSHING) {\n result += uni_Smush(ch1, ch2);\n } else {\n validSmush = false;\n validSmush = fittingRules.vRule5 ? vRule5_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && fittingRules.vRule1 ? vRule1_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && fittingRules.vRule2 ? vRule2_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && fittingRules.vRule3 ? vRule3_Smush(ch1, ch2) : validSmush;\n validSmush = !validSmush && fittingRules.vRule4 ? vRule4_Smush(ch1, ch2) : validSmush;\n result += validSmush;\n }\n } else {\n result += uni_Smush(ch1, ch2);\n }\n }\n return result;\n }\n function verticalSmush(lines1, lines2, overlap, opts) {\n let len1 = lines1.length;\n let len2 = lines2.length;\n let piece1 = lines1.slice(0, Math.max(0, len1 - overlap));\n let piece2_1 = lines1.slice(Math.max(0, len1 - overlap), len1);\n let piece2_2 = lines2.slice(0, Math.min(overlap, len2));\n let ii, len, line, piece2 = [], piece3;\n len = piece2_1.length;\n for (ii = 0; ii < len; ii++) {\n if (ii >= len2) {\n line = piece2_1[ii];\n } else {\n line = verticallySmushLines(piece2_1[ii], piece2_2[ii], opts);\n }\n piece2.push(line);\n }\n piece3 = lines2.slice(Math.min(overlap, len2), len2);\n return [...piece1, ...piece2, ...piece3];\n }\n function padLines(lines, numSpaces) {\n const padding = \" \".repeat(numSpaces);\n return lines.map((line) => line + padding);\n }\n function smushVerticalFigLines(output, lines, opts) {\n let len1 = output[0].length;\n let len2 = lines[0].length;\n let overlap;\n if (len1 > len2) {\n lines = padLines(lines, len1 - len2);\n } else if (len2 > len1) {\n output = padLines(output, len2 - len1);\n }\n overlap = getVerticalSmushDist(output, lines, opts);\n return verticalSmush(output, lines, overlap, opts);\n }\n function getHorizontalSmushLength(txt1, txt2, opts) {\n const fittingRules = opts.fittingRules || {};\n if (fittingRules.hLayout === FULL_WIDTH) {\n return 0;\n }\n let ii, len1 = txt1.length, len2 = txt2.length;\n let maxDist = len1;\n let curDist = 1;\n let breakAfter = false;\n let seg1, seg2, ch1, ch2;\n if (len1 === 0) {\n return 0;\n }\n distCal: while (curDist <= maxDist) {\n const seg1StartPos = len1 - curDist;\n seg1 = txt1.substring(seg1StartPos, seg1StartPos + curDist);\n seg2 = txt2.substring(0, Math.min(curDist, len2));\n for (ii = 0; ii < Math.min(curDist, len2); ii++) {\n ch1 = seg1.substring(ii, ii + 1);\n ch2 = seg2.substring(ii, ii + 1);\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (fittingRules.hLayout === FITTING) {\n curDist = curDist - 1;\n break distCal;\n } else if (fittingRules.hLayout === SMUSHING) {\n if (ch1 === opts.hardBlank || ch2 === opts.hardBlank) {\n curDist = curDist - 1;\n }\n break distCal;\n } else {\n breakAfter = true;\n const validSmush = fittingRules.hRule1 && hRule1_Smush(ch1, ch2, opts.hardBlank) || fittingRules.hRule2 && hRule2_Smush(ch1, ch2) || fittingRules.hRule3 && hRule3_Smush(ch1, ch2) || fittingRules.hRule4 && hRule4_Smush(ch1, ch2) || fittingRules.hRule5 && hRule5_Smush(ch1, ch2) || fittingRules.hRule6 && hRule6_Smush(ch1, ch2, opts.hardBlank);\n if (!validSmush) {\n curDist = curDist - 1;\n break distCal;\n }\n }\n }\n }\n if (breakAfter) {\n break;\n }\n curDist++;\n }\n return Math.min(maxDist, curDist);\n }\n function horizontalSmush(textBlock1, textBlock2, overlap, opts) {\n let ii, jj, outputFig = [], overlapStart, piece1, piece2, piece3, len1, len2, txt1, txt2;\n const fittingRules = opts.fittingRules || {};\n if (typeof opts.height !== \"number\") {\n throw new Error(\"height is not defined.\");\n }\n for (ii = 0; ii < opts.height; ii++) {\n txt1 = textBlock1[ii];\n txt2 = textBlock2[ii];\n len1 = txt1.length;\n len2 = txt2.length;\n overlapStart = len1 - overlap;\n piece1 = txt1.slice(0, Math.max(0, overlapStart));\n piece2 = \"\";\n const seg1StartPos = Math.max(0, len1 - overlap);\n let seg1 = txt1.substring(seg1StartPos, seg1StartPos + overlap);\n let seg2 = txt2.substring(0, Math.min(overlap, len2));\n for (jj = 0; jj < overlap; jj++) {\n let ch1 = jj < len1 ? seg1.substring(jj, jj + 1) : \" \";\n let ch2 = jj < len2 ? seg2.substring(jj, jj + 1) : \" \";\n if (ch1 !== \" \" && ch2 !== \" \") {\n if (fittingRules.hLayout === FITTING || fittingRules.hLayout === SMUSHING) {\n piece2 += uni_Smush(ch1, ch2, opts.hardBlank);\n } else {\n const nextCh = fittingRules.hRule1 && hRule1_Smush(ch1, ch2, opts.hardBlank) || fittingRules.hRule2 && hRule2_Smush(ch1, ch2) || fittingRules.hRule3 && hRule3_Smush(ch1, ch2) || fittingRules.hRule4 && hRule4_Smush(ch1, ch2) || fittingRules.hRule5 && hRule5_Smush(ch1, ch2) || fittingRules.hRule6 && hRule6_Smush(ch1, ch2, opts.hardBlank) || uni_Smush(ch1, ch2, opts.hardBlank);\n piece2 += nextCh;\n }\n } else {\n piece2 += uni_Smush(ch1, ch2, opts.hardBlank);\n }\n }\n if (overlap >= len2) {\n piece3 = \"\";\n } else {\n piece3 = txt2.substring(overlap, overlap + Math.max(0, len2 - overlap));\n }\n outputFig[ii] = piece1 + piece2 + piece3;\n }\n return outputFig;\n }\n function newFigChar(len) {\n return new Array(len).fill(\"\");\n }\n const figLinesWidth = function(textLines) {\n return Math.max(...textLines.map((line) => line.length));\n };\n function joinFigArray(array, len, opts) {\n return array.reduce(function(acc, data) {\n return horizontalSmush(acc, data.fig, data.overlap || 0, opts);\n }, newFigChar(len));\n }\n function breakWord(figChars, len, opts) {\n for (let i = figChars.length - 1; i > 0; i--) {\n const w = joinFigArray(figChars.slice(0, i), len, opts);\n if (figLinesWidth(w) <= opts.width) {\n return {\n outputFigText: w,\n chars: figChars.slice(i)\n };\n }\n }\n return { outputFigText: newFigChar(len), chars: figChars };\n }\n function generateFigTextLines(txt, figChars, opts) {\n let charIndex, figChar, overlap = 0, row, outputFigText, len, height = opts.height, outputFigLines = [], maxWidth, nextFigChars = {\n chars: [],\n // list of characters is used to break in the middle of the word when word is longer\n overlap\n // chars is array of characters with {fig, overlap} and overlap is for whole word\n }, figWords = [], char, isSpace, textFigWord, textFigLine, tmpBreak;\n if (typeof height !== \"number\") {\n throw new Error(\"height is not defined.\");\n }\n outputFigText = newFigChar(height);\n const fittingRules = opts.fittingRules || {};\n if (opts.printDirection === 1) {\n txt = txt.split(\"\").reverse().join(\"\");\n }\n len = txt.length;\n for (charIndex = 0; charIndex < len; charIndex++) {\n char = txt.substring(charIndex, charIndex + 1);\n isSpace = char.match(/\\s/);\n figChar = figChars[char.charCodeAt(0)];\n textFigLine = null;\n if (figChar) {\n if (fittingRules.hLayout !== FULL_WIDTH) {\n overlap = 1e4;\n for (row = 0; row < height; row++) {\n overlap = Math.min(\n overlap,\n getHorizontalSmushLength(outputFigText[row], figChar[row], opts)\n );\n }\n overlap = overlap === 1e4 ? 0 : overlap;\n }\n if (opts.width > 0) {\n if (opts.whitespaceBreak) {\n textFigWord = joinFigArray(\n nextFigChars.chars.concat([\n {\n fig: figChar,\n overlap\n }\n ]),\n height,\n opts\n );\n textFigLine = joinFigArray(\n figWords.concat([\n {\n fig: textFigWord,\n overlap: nextFigChars.overlap\n }\n ]),\n height,\n opts\n );\n maxWidth = figLinesWidth(textFigLine);\n } else {\n textFigLine = horizontalSmush(\n outputFigText,\n figChar,\n overlap,\n opts\n );\n maxWidth = figLinesWidth(textFigLine);\n }\n if (maxWidth >= opts.width && charIndex > 0) {\n if (opts.whitespaceBreak) {\n outputFigText = joinFigArray(figWords.slice(0, -1), height, opts);\n if (figWords.length > 1) {\n outputFigLines.push(outputFigText);\n outputFigText = newFigChar(height);\n }\n figWords = [];\n } else {\n outputFigLines.push(outputFigText);\n outputFigText = newFigChar(height);\n }\n }\n }\n if (opts.width > 0 && opts.whitespaceBreak) {\n if (!isSpace || charIndex === len - 1) {\n nextFigChars.chars.push({ fig: figChar, overlap });\n }\n if (isSpace || charIndex === len - 1) {\n tmpBreak = null;\n while (true) {\n textFigLine = joinFigArray(nextFigChars.chars, height, opts);\n maxWidth = figLinesWidth(textFigLine);\n if (maxWidth >= opts.width) {\n tmpBreak = breakWord(nextFigChars.chars, height, opts);\n nextFigChars = { chars: tmpBreak.chars };\n outputFigLines.push(tmpBreak.outputFigText);\n } else {\n break;\n }\n }\n if (maxWidth > 0) {\n if (tmpBreak) {\n figWords.push({ fig: textFigLine, overlap: 1 });\n } else {\n figWords.push({\n fig: textFigLine,\n overlap: nextFigChars.overlap\n });\n }\n }\n if (isSpace) {\n figWords.push({ fig: figChar, overlap });\n outputFigText = newFigChar(height);\n }\n if (charIndex === len - 1) {\n outputFigText = joinFigArray(figWords, height, opts);\n }\n nextFigChars = {\n chars: [],\n overlap\n };\n continue;\n }\n }\n outputFigText = horizontalSmush(outputFigText, figChar, overlap, opts);\n }\n }\n if (figLinesWidth(outputFigText) > 0) {\n outputFigLines.push(outputFigText);\n }\n if (!opts.showHardBlanks) {\n outputFigLines.forEach(function(outputFigText2) {\n len = outputFigText2.length;\n for (row = 0; row < len; row++) {\n outputFigText2[row] = outputFigText2[row].replace(\n new RegExp(\"\\\\\" + opts.hardBlank, \"g\"),\n \" \"\n );\n }\n });\n }\n if (txt === \"\" && outputFigLines.length === 0) {\n outputFigLines.push(new Array(height).fill(\"\"));\n }\n return outputFigLines;\n }\n const getHorizontalFittingRules = function(layout, options) {\n let params;\n const fittingRules = options.fittingRules || {};\n if (layout === \"default\") {\n params = {\n hLayout: fittingRules.hLayout,\n hRule1: fittingRules.hRule1,\n hRule2: fittingRules.hRule2,\n hRule3: fittingRules.hRule3,\n hRule4: fittingRules.hRule4,\n hRule5: fittingRules.hRule5,\n hRule6: fittingRules.hRule6\n };\n } else if (layout === \"full\") {\n params = {\n hLayout: FULL_WIDTH,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false\n };\n } else if (layout === \"fitted\") {\n params = {\n hLayout: FITTING,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false\n };\n } else if (layout === \"controlled smushing\") {\n params = {\n hLayout: CONTROLLED_SMUSHING,\n hRule1: true,\n hRule2: true,\n hRule3: true,\n hRule4: true,\n hRule5: true,\n hRule6: true\n };\n } else if (layout === \"universal smushing\") {\n params = {\n hLayout: SMUSHING,\n hRule1: false,\n hRule2: false,\n hRule3: false,\n hRule4: false,\n hRule5: false,\n hRule6: false\n };\n } else {\n return;\n }\n return params;\n };\n const getVerticalFittingRules = function(layout, options) {\n let params = {};\n const fittingRules = options.fittingRules || {};\n if (layout === \"default\") {\n params = {\n vLayout: fittingRules.vLayout,\n vRule1: fittingRules.vRule1,\n vRule2: fittingRules.vRule2,\n vRule3: fittingRules.vRule3,\n vRule4: fittingRules.vRule4,\n vRule5: fittingRules.vRule5\n };\n } else if (layout === \"full\") {\n params = {\n vLayout: FULL_WIDTH,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false\n };\n } else if (layout === \"fitted\") {\n params = {\n vLayout: FITTING,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false\n };\n } else if (layout === \"controlled smushing\") {\n params = {\n vLayout: CONTROLLED_SMUSHING,\n vRule1: true,\n vRule2: true,\n vRule3: true,\n vRule4: true,\n vRule5: true\n };\n } else if (layout === \"universal smushing\") {\n params = {\n vLayout: SMUSHING,\n vRule1: false,\n vRule2: false,\n vRule3: false,\n vRule4: false,\n vRule5: false\n };\n } else {\n return;\n }\n return params;\n };\n const generateText = function(fontName, options, txt) {\n txt = txt.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n const actualFontName = getFontName(fontName);\n let lines = txt.split(\"\\n\");\n let figLines = [];\n let ii, len, output;\n len = lines.length;\n for (ii = 0; ii < len; ii++) {\n figLines = figLines.concat(\n generateFigTextLines(lines[ii], figFonts[actualFontName], options)\n );\n }\n len = figLines.length;\n output = figLines[0];\n for (ii = 1; ii < len; ii++) {\n output = smushVerticalFigLines(output, figLines[ii], options);\n }\n return output ? output.join(\"\\n\") : \"\";\n };\n function _reworkFontOpts(fontMeta, options) {\n let myOpts;\n if (typeof structuredClone !== \"undefined\") {\n myOpts = structuredClone(fontMeta);\n } else {\n myOpts = JSON.parse(JSON.stringify(fontMeta));\n }\n myOpts.showHardBlanks = options.showHardBlanks || false;\n myOpts.width = options.width || -1;\n myOpts.whitespaceBreak = options.whitespaceBreak || false;\n if (options.horizontalLayout) {\n const params = getHorizontalFittingRules(\n options.horizontalLayout,\n fontMeta\n );\n if (params) {\n Object.assign(myOpts.fittingRules, params);\n }\n }\n if (options.verticalLayout) {\n const params = getVerticalFittingRules(options.verticalLayout, fontMeta);\n if (params) {\n Object.assign(myOpts.fittingRules, params);\n }\n }\n myOpts.printDirection = options.printDirection !== null && options.printDirection !== void 0 ? options.printDirection : fontMeta.printDirection;\n return myOpts;\n }\n const me = async function(txt, optionsOrFontOrCallback, callback) {\n return me.text(txt, optionsOrFontOrCallback, callback);\n };\n me.text = async function(txt, optionsOrFontOrCallback, callback) {\n txt = txt + \"\";\n let options, next;\n if (typeof optionsOrFontOrCallback === \"function\") {\n next = optionsOrFontOrCallback;\n options = { font: figDefaults.font };\n } else if (typeof optionsOrFontOrCallback === \"string\") {\n options = { font: optionsOrFontOrCallback };\n next = callback;\n } else if (optionsOrFontOrCallback) {\n options = optionsOrFontOrCallback;\n next = callback;\n } else {\n options = { font: figDefaults.font };\n next = callback;\n }\n const fontName = options.font || figDefaults.font;\n try {\n const fontOpts = await me.loadFont(fontName);\n const generatedTxt = fontOpts ? generateText(fontName, _reworkFontOpts(fontOpts, options), txt) : \"\";\n if (next) {\n next(null, generatedTxt);\n }\n return generatedTxt;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (next) {\n next(error);\n return \"\";\n }\n throw error;\n }\n };\n me.textSync = function(txt, options) {\n txt = txt + \"\";\n if (typeof options === \"string\") {\n options = { font: options };\n } else {\n options = options || {};\n }\n const fontName = options.font || figDefaults.font;\n let fontOpts = _reworkFontOpts(me.loadFontSync(fontName), options);\n return generateText(fontName, fontOpts, txt);\n };\n me.metadata = async function(fontName, callback) {\n fontName = fontName + \"\";\n try {\n const fontOpts = await me.loadFont(fontName);\n if (!fontOpts) {\n throw new Error(\"Error loading font.\");\n }\n const actualFontName = getFontName(fontName);\n const font = figFonts[actualFontName] || {};\n const result = [fontOpts, font.comment || \"\"];\n if (callback) {\n callback(null, fontOpts, font.comment);\n }\n return result;\n } catch (err) {\n const error = err instanceof Error ? err : new Error(String(err));\n if (callback) {\n callback(error);\n return null;\n }\n throw error;\n }\n };\n me.defaults = function(opts) {\n if (opts && typeof opts === \"object\") {\n Object.assign(figDefaults, opts);\n }\n if (typeof structuredClone !== \"undefined\") {\n return structuredClone(figDefaults);\n } else {\n return JSON.parse(JSON.stringify(figDefaults));\n }\n };\n me.parseFont = function(fontName, data, override = true) {\n if (figFonts[fontName] && !override) {\n return figFonts[fontName].options;\n }\n data = data.replace(/\\r\\n/g, \"\\n\").replace(/\\r/g, \"\\n\");\n const font = new FigletFont();\n const lines = data.split(\"\\n\");\n const headerLine = lines.shift();\n if (!headerLine) {\n throw new Error(\"Invalid font file: missing header\");\n }\n const headerData = headerLine.split(\" \");\n const opts = {\n hardBlank: headerData[0].substring(5, 6),\n height: parseInt(headerData[1], 10),\n baseline: parseInt(headerData[2], 10),\n maxLength: parseInt(headerData[3], 10),\n oldLayout: parseInt(headerData[4], 10),\n numCommentLines: parseInt(headerData[5], 10),\n printDirection: headerData[6] ? parseInt(headerData[6], 10) : 0,\n fullLayout: headerData[7] ? parseInt(headerData[7], 10) : null,\n codeTagCount: headerData[8] ? parseInt(headerData[8], 10) : null\n };\n const hardBlank = opts.hardBlank || \"\";\n if (hardBlank.length !== 1 || [\n opts.height,\n opts.baseline,\n opts.maxLength,\n opts.oldLayout,\n opts.numCommentLines\n ].some((val) => val === null || val === void 0 || isNaN(val))) {\n throw new Error(\"FIGlet header contains invalid values.\");\n }\n if (opts.height == null || opts.numCommentLines == null) {\n throw new Error(\"FIGlet header contains invalid values.\");\n }\n opts.fittingRules = getSmushingRules(opts.oldLayout, opts.fullLayout);\n font.options = opts;\n const charNums = [];\n for (let i = 32; i <= 126; i++) {\n charNums.push(i);\n }\n charNums.push(196, 214, 220, 228, 246, 252, 223);\n if (lines.length < opts.numCommentLines + opts.height * charNums.length) {\n throw new Error(\n `FIGlet file is missing data. Line length: ${lines.length}. Comment lines: ${opts.numCommentLines}. Height: ${opts.height}. Num chars: ${charNums.length}.`\n );\n }\n font.comment = lines.splice(0, opts.numCommentLines).join(\"\\n\");\n font.numChars = 0;\n while (lines.length > 0 && font.numChars < charNums.length) {\n const cNum = charNums[font.numChars];\n font[cNum] = lines.splice(0, opts.height);\n for (let i = 0; i < opts.height; i++) {\n if (typeof font[cNum][i] === \"undefined\") {\n font[cNum][i] = \"\";\n } else {\n font[cNum][i] = removeEndChar(font[cNum][i], i, opts.height);\n }\n }\n font.numChars++;\n }\n while (lines.length > 0) {\n const cNumLine = lines.shift();\n if (!cNumLine || cNumLine.trim() === \"\") break;\n let cNum = cNumLine.split(\" \")[0];\n let parsedNum;\n if (/^-?0[xX][0-9a-fA-F]+$/.test(cNum)) {\n parsedNum = parseInt(cNum, 16);\n } else if (/^-?0[0-7]+$/.test(cNum)) {\n parsedNum = parseInt(cNum, 8);\n } else if (/^-?[0-9]+$/.test(cNum)) {\n parsedNum = parseInt(cNum, 10);\n } else {\n throw new Error(`Error parsing data. Invalid data: ${cNum}`);\n }\n if (parsedNum === -1 || parsedNum < -2147483648 || parsedNum > 2147483647) {\n const msg = parsedNum === -1 ? \"The char code -1 is not permitted.\" : `The char code cannot be ${parsedNum < -2147483648 ? \"less than -2147483648\" : \"greater than 2147483647\"}.`;\n throw new Error(`Error parsing data. ${msg}`);\n }\n font[parsedNum] = lines.splice(0, opts.height);\n for (let i = 0; i < opts.height; i++) {\n if (typeof font[parsedNum][i] === \"undefined\") {\n font[parsedNum][i] = \"\";\n } else {\n font[parsedNum][i] = removeEndChar(\n font[parsedNum][i],\n i,\n opts.height\n );\n }\n }\n font.numChars++;\n }\n figFonts[fontName] = font;\n return opts;\n };\n me.loadedFonts = () => {\n return Object.keys(figFonts);\n };\n me.clearLoadedFonts = () => {\n Object.keys(figFonts).forEach((key) => {\n delete figFonts[key];\n });\n };\n me.loadFont = async function(fontName, callback) {\n const actualFontName = getFontName(fontName);\n if (figFonts[actualFontName]) {\n const result = figFonts[actualFontName].options;\n if (callback) {\n callback(null, result);\n }\n return Promise.resolve(result);\n }\n try {\n if (!figDefaults.fetchFontIfMissing) {\n throw new Error(`Font is not loaded: ${actualFontName}`);\n }\n const response = await fetch(\n `${figDefaults.fontPath}/${actualFontName}.flf`\n );\n if (!response.ok) {\n throw new Error(`Network response was not ok: ${response.status}`);\n }\n const text = await response.text();\n const result = me.parseFont(actualFontName, text);\n if (callback) {\n callback(null, result);\n }\n return result;\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (callback) {\n callback(err);\n return null;\n }\n throw err;\n }\n };\n me.loadFontSync = function(name) {\n const actualFontName = getFontName(name);\n if (figFonts[actualFontName]) {\n return figFonts[actualFontName].options;\n }\n throw new Error(\n \"Synchronous font loading is not implemented for the browser, it will only work for fonts already loaded.\"\n );\n };\n me.preloadFonts = async function(fonts, callback) {\n try {\n for (const name of fonts) {\n const actualFontName = getFontName(name);\n const response = await fetch(\n `${figDefaults.fontPath}/${actualFontName}.flf`\n );\n if (!response.ok) {\n throw new Error(\n `Failed to preload fonts. Error fetching font: ${actualFontName}, status code: ${response.statusText}`\n );\n }\n const data = await response.text();\n me.parseFont(actualFontName, data);\n }\n if (callback) {\n callback();\n }\n } catch (error) {\n const err = error instanceof Error ? error : new Error(String(error));\n if (callback) {\n callback(err);\n return;\n }\n throw error;\n }\n };\n me.fonts = function(callback) {\n return new Promise(function(resolve, reject) {\n resolve(fontList);\n if (callback) {\n callback(null, fontList);\n }\n });\n };\n me.fontsSync = function() {\n return fontList;\n };\n me.figFonts = figFonts;\n return me;\n})();\nexport {\n figlet as f,\n getFontName as g\n};\n","import * as fs from \"fs\";\nimport * as path from \"path\";\nimport { f as figlet, g as getFontName } from \"./figlet-C8Ns3Vyn.js\";\nimport { fileURLToPath } from \"url\";\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\nconst fontPath = path.join(__dirname, \"/../fonts/\");\nconst nodeFiglet = figlet;\nnodeFiglet.defaults({ fontPath });\nnodeFiglet.loadFont = function(name, callback) {\n const actualFontName = getFontName(name);\n return new Promise((resolve, reject) => {\n if (nodeFiglet.figFonts[actualFontName]) {\n if (callback) {\n callback(null, nodeFiglet.figFonts[actualFontName].options);\n }\n resolve(nodeFiglet.figFonts[actualFontName].options);\n return;\n }\n fs.readFile(\n path.join(nodeFiglet.defaults().fontPath, actualFontName + \".flf\"),\n { encoding: \"utf-8\" },\n (err, fontData) => {\n if (err) {\n if (callback) {\n callback(err);\n }\n reject(err);\n return;\n }\n fontData = fontData + \"\";\n try {\n const font = nodeFiglet.parseFont(\n actualFontName,\n fontData\n );\n if (callback) {\n callback(null, font);\n }\n resolve(font);\n } catch (error) {\n const typedError = error instanceof Error ? error : new Error(String(error));\n if (callback) {\n callback(typedError);\n }\n reject(typedError);\n }\n }\n );\n });\n};\nnodeFiglet.loadFontSync = function(font) {\n const actualFontName = getFontName(font);\n if (nodeFiglet.figFonts[actualFontName]) {\n return nodeFiglet.figFonts[actualFontName].options;\n }\n const fontData = fs.readFileSync(\n path.join(nodeFiglet.defaults().fontPath, actualFontName + \".flf\"),\n {\n encoding: \"utf-8\"\n }\n ) + \"\";\n return nodeFiglet.parseFont(actualFontName, fontData);\n};\nnodeFiglet.fonts = function(next) {\n return new Promise((resolve, reject) => {\n const fontList = [];\n fs.readdir(\n nodeFiglet.defaults().fontPath,\n (err, files) => {\n if (err) {\n next && next(err);\n reject(err);\n return;\n }\n files.forEach((file) => {\n if (/\\.flf$/.test(file)) {\n fontList.push(file.replace(/\\.flf$/, \"\"));\n }\n });\n next && next(null, fontList);\n resolve(fontList);\n }\n );\n });\n};\nnodeFiglet.fontsSync = function() {\n const fontList = [];\n fs.readdirSync(nodeFiglet.defaults().fontPath).forEach((file) => {\n if (/\\.flf$/.test(file)) {\n fontList.push(file.replace(/\\.flf$/, \"\"));\n }\n });\n return fontList;\n};\nexport {\n nodeFiglet as default\n};\n","import figlet from 'figlet';\n\nconst ILLEGAL_FILENAME_PATTERN = /[\\\\/:\"*?<>|]+/g;\nconst WHITESPACE_PATTERN = /\\s+/g;\nconst DUPLICATE_DASH_PATTERN = /-+/g;\nconst TRIM_DASH_PATTERN = /^-|-$/g;\n\nexport type PromptValidator<TValue> = (value: TValue | undefined) => Error | string | undefined;\n\n/** 按顺序运行多个校验函数,命中第一个错误后立即返回 */\nexport function composeValidators<TValue>(\n ...validators: Array<PromptValidator<TValue> | undefined>\n): PromptValidator<TValue> {\n return (value) => {\n for (const validator of validators) {\n if (!validator) continue;\n\n const result = validator(value);\n if (result !== undefined) return result;\n }\n\n return undefined;\n };\n}\n\n/** 生成一个“非空字符串”校验器 */\nexport function createRequiredTextValidator(\n message = 'This field is required',\n): PromptValidator<string> {\n return (value) => {\n if (!value?.trim()) return message;\n\n return undefined;\n };\n}\n\n/** 把工作流里的任意值转成便于展示和记录的文本 */\nexport function formatPromptValue(value: unknown): string {\n if (typeof value === 'string') return value;\n\n if (Array.isArray(value)) return value.map((item) => formatPromptValue(item)).join(', ');\n\n if (value === null) return 'null';\n\n if (value === undefined) return 'undefined';\n\n if (typeof value === 'object') return JSON.stringify(value);\n\n return String(value);\n}\n\n/** 把 `project-name` 这类 key 转成人看得懂的标题 */\nexport function formatFieldLabel(key: string): string {\n return key\n .replace(/([a-z0-9])([A-Z])/g, '$1 $2')\n .split(/[-_\\s]+/)\n .filter(Boolean)\n .map((segment) => segment.charAt(0).toUpperCase() + segment.slice(1))\n .join(' ');\n}\n\n/** 把任意字符串整理成更适合文件系统的文件名 */\nexport function sanitizeFileName(value: string): string {\n const sanitized = value\n .trim()\n .replace(ILLEGAL_FILENAME_PATTERN, '-')\n .replace(WHITESPACE_PATTERN, '-')\n .replace(DUPLICATE_DASH_PATTERN, '-')\n .replace(TRIM_DASH_PATTERN, '');\n\n if (!sanitized || sanitized === '.' || sanitized === '..' || sanitized.startsWith('.'))\n return 'unnamed';\n\n return sanitized.slice(0, 255);\n}\n\n/** 休眠指定毫秒数 */\nexport async function sleep(milliseconds: number): Promise<void> {\n await new Promise((resolve) => {\n setTimeout(resolve, milliseconds);\n });\n}\n\n/** 用 figlet 生成 ASCII Art;多行输入会直接视为现成内容返回 */\nexport function renderAsciiArt(value: string): string {\n if (value.includes('\\n')) return value.trimEnd();\n return figlet.textSync(value, { font: 'Standard' }).trimEnd();\n}\n\n/** 把原始值列表映射成选择组件能直接用的 options */\nexport function toOptions<TValue>(\n values: readonly TValue[],\n mapper?: (\n value: TValue,\n index: number,\n ) => {\n disabled?: boolean;\n hint?: string;\n label?: string;\n value?: TValue;\n },\n): Array<{ disabled?: boolean; hint?: string; label?: string; value: TValue }> {\n return values.map((value, index) => {\n const mapped = mapper?.(value, index);\n const option: {\n disabled?: boolean;\n hint?: string;\n label?: string;\n value: TValue;\n } = {\n value: mapped?.value ?? value,\n };\n\n if (mapped?.disabled !== undefined) option.disabled = mapped.disabled;\n if (mapped?.hint !== undefined) option.hint = mapped.hint;\n if (mapped?.label !== undefined) option.label = mapped.label;\n\n return option;\n });\n}\n","import { formatFieldLabel } from '../shared/helpers.js';\nimport type { WorkflowExecutableStep, WorkflowStepDefinition } from '../shared/types.js';\n\n/** 只要求实现 `option()` 的最小 CLI 接口 */\nexport interface WorkflowCliOptionRegistrar {\n /** 注册一条 CLI option */\n option: (\n definition: string,\n description: string,\n config?: WorkflowCliOptionConfig,\n ) => WorkflowCliOptionRegistrar;\n}\n\n/** 常见 CLI `option()` 第三个参数的最小兼容类型 */\nexport interface WorkflowCliOptionConfig {\n /** 与常见 CLI 库一致的默认值配置 */\n default?: unknown;\n /** 与常见 CLI 库一致的类型转换配置 */\n type?: unknown[];\n /** 透传给具体 CLI 实现的其他字段 */\n [key: string]: unknown;\n}\n\n/** 单个字段的 CLI 桥接配置 */\nexport interface WorkflowCliFieldOptions<TValue = unknown> {\n /** 覆盖自动生成的说明文案 */\n description?: string;\n /** 自定义完整 option 定义,例如 `--plain-progress [plainProgress]` */\n option?: string;\n /** 透传给 `cli.option()` 的第三个参数 */\n optionConfig?: WorkflowCliOptionConfig;\n /** 当 option 名与 step id 不一致时,指定解析后的 options key */\n optionKey?: string;\n /** 自定义值解析函数 */\n parse?: (value: unknown) => TValue | undefined;\n}\n\n/** workflow / steps 接入 CLI 时的桥接配置 */\nexport interface WorkflowCliBridgeOptions {\n /** 按 step id 定义单字段覆盖规则 */\n fields?: Record<string, WorkflowCliFieldOptions>;\n}\n\n/** workflow / steps 映射到 CLI 后的结果 */\nexport interface WorkflowCliBridge {\n /** 把步骤映射成 CLI options */\n apply: <TRegistrar extends WorkflowCliOptionRegistrar>(cli: TRegistrar) => TRegistrar;\n /** 从解析后的 CLI options 提取 workflow initialValues */\n getInitialValues: (options: Record<string, unknown>) => Partial<Record<string, unknown>>;\n}\n\n/** 解析 CLI 里的布尔值 */\nexport function parseWorkflowCliBoolean(value: unknown): boolean | undefined {\n if (typeof value === 'boolean') return value;\n if (typeof value === 'string') {\n if (value === 'true') return true;\n if (value === 'false') return false;\n }\n return undefined;\n}\n\n/** 解析 CLI 列表值,默认按逗号分隔 */\nexport function parseWorkflowCliList(value: unknown): string[] | undefined {\n if (Array.isArray(value)) {\n const parsed = value.map((item) => String(item)).filter(Boolean);\n return parsed.length > 0 ? parsed : undefined;\n }\n if (typeof value !== 'string') return undefined;\n const parsed = value\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean);\n return parsed.length > 0 ? parsed : undefined;\n}\n\n/** 判断步骤是否适合自动映射成 CLI 选项 */\ntype WorkflowCliBindableStep = Extract<\n WorkflowExecutableStep,\n {\n kind:\n | 'autocomplete-multiselect'\n | 'autocomplete'\n | 'confirm'\n | 'group-multiselect'\n | 'multiselect'\n | 'password'\n | 'path'\n | 'select'\n | 'select-key'\n | 'text';\n }\n>;\n\n/** 判断步骤是否适合自动映射成 CLI 选项 */\nfunction isCliBindableStep(step: WorkflowStepDefinition): step is WorkflowCliBindableStep {\n return (\n step.kind === 'autocomplete-multiselect' ||\n step.kind === 'autocomplete' ||\n step.kind === 'confirm' ||\n step.kind === 'group-multiselect' ||\n step.kind === 'multiselect' ||\n step.kind === 'password' ||\n step.kind === 'path' ||\n step.kind === 'select' ||\n step.kind === 'select-key' ||\n step.kind === 'text'\n );\n}\n\n/** 判断输入是否为 workflow 对象 */\nfunction isWorkflowCliSource(\n source: WorkflowCliBridgeSource,\n): source is { steps: readonly WorkflowStepDefinition[] } {\n return !Array.isArray(source);\n}\n\n/** 把 camelCase / snake_case / kebab-case 统一转成 kebab-case */\nfunction toCliFlagName(value: string): string {\n return value\n .replace(/([a-z0-9])([A-Z])/g, '$1-$2')\n .replace(/[_\\s]+/g, '-')\n .toLowerCase();\n}\n\n/** 把 kebab-case / snake_case 选项名转成常见 CLI 解析器使用的 camelCase key */\nfunction toCliOptionKey(value: string): string {\n return value.replace(/[-_]+([a-zA-Z0-9])/g, (_, char: string) => char.toUpperCase());\n}\n\n/** 从 option 定义中提取解析结果里会使用的 key */\nfunction inferOptionKeyFromDefinition(definition: string): string | undefined {\n const aliases = definition\n .split(',')\n .map((item) => item.trim())\n .filter(Boolean)\n .map((item) => item.split(/\\s+/u)[0]?.trim())\n .filter((item): item is string => Boolean(item));\n const namedAlias = aliases.find((item) => item.startsWith('--')) ?? aliases.at(-1);\n if (!namedAlias) return undefined;\n\n const normalized = namedAlias.replace(/^-{1,2}/u, '');\n const rawKey = normalized.startsWith('no-') ? normalized.slice(3) : normalized;\n return rawKey ? toCliOptionKey(rawKey) : undefined;\n}\n\n/** 判断步骤是否声明了必填值语义 */\nfunction hasRequiredOptionValue(step: WorkflowCliBindableStep): boolean {\n return 'required' in step && Boolean(step.required);\n}\n\n/** 从 workflow / steps 中提取可绑定到 CLI 的步骤,并按 id 去重 */\nfunction collectCliBindableSteps(source: WorkflowCliBridgeSource): WorkflowCliBindableStep[] {\n const sourceSteps = isWorkflowCliSource(source) ? source.steps : source;\n const steps: WorkflowCliBindableStep[] = [];\n const seenIds = new Set<string>();\n\n for (const current of sourceSteps) {\n if (!isCliBindableStep(current) || seenIds.has(current.id)) continue;\n\n seenIds.add(current.id);\n steps.push(current);\n }\n\n return steps;\n}\n\n/** 推断单个步骤默认应该注册成哪条 CLI option */\nfunction getDefaultOptionDefinition(step: WorkflowCliBindableStep): string {\n const flagName = toCliFlagName(step.id);\n if (step.kind === 'confirm') return `--${flagName}`;\n return hasRequiredOptionValue(step) ? `--${flagName} <${step.id}>` : `--${flagName} [${step.id}]`;\n}\n\n/** 推断单个步骤默认的 CLI 说明文案 */\nfunction getDefaultOptionDescription(step: WorkflowCliBindableStep): string {\n if ('message' in step && typeof step.message === 'string') return step.message;\n return formatFieldLabel(step.id);\n}\n\n/** 推断单个步骤默认的 CLI 值解析方式 */\nfunction parseCliValueForStep(step: WorkflowCliBindableStep, value: unknown): unknown {\n if (step.kind === 'confirm') return parseWorkflowCliBoolean(value);\n if (typeof value === 'boolean') return undefined;\n if (\n step.kind === 'autocomplete-multiselect' ||\n step.kind === 'group-multiselect' ||\n step.kind === 'multiselect'\n ) {\n return parseWorkflowCliList(value);\n }\n if (typeof value === 'string') return value;\n return value;\n}\n\ntype WorkflowCliBridgeSource =\n | readonly WorkflowStepDefinition[]\n | { steps: readonly WorkflowStepDefinition[] };\n\n/** 创建 workflow / steps 到 CLI 的 bridge */\nexport function createWorkflowCliBridge(\n source: WorkflowCliBridgeSource,\n options: WorkflowCliBridgeOptions = {},\n): WorkflowCliBridge {\n const steps = collectCliBindableSteps(source);\n\n return {\n apply<TRegistrar extends WorkflowCliOptionRegistrar>(cli: TRegistrar): TRegistrar {\n for (const step of steps) {\n const fieldOptions = options.fields?.[step.id];\n cli.option(\n fieldOptions?.option ?? getDefaultOptionDefinition(step),\n fieldOptions?.description ?? getDefaultOptionDescription(step),\n fieldOptions?.optionConfig,\n );\n }\n return cli;\n },\n getInitialValues(parsedOptions: Record<string, unknown>): Partial<Record<string, unknown>> {\n const initialValues: Partial<Record<string, unknown>> = {};\n\n for (const step of steps) {\n const fieldOptions = options.fields?.[step.id];\n const optionKey =\n fieldOptions?.optionKey ??\n inferOptionKeyFromDefinition(fieldOptions?.option ?? getDefaultOptionDefinition(step)) ??\n step.id;\n const rawValue = parsedOptions[optionKey];\n if (rawValue === undefined) continue;\n\n const value = fieldOptions?.parse?.(rawValue) ?? parseCliValueForStep(step, rawValue);\n if (value !== undefined) initialValues[step.id] = value;\n }\n\n return initialValues;\n },\n };\n}\n","import type { WorkflowTemplate, WorkflowTemplateCatalog } from '../shared/types.js';\n\n/** 显式声明一个工作流模板,便于复用和类型推导 */\nexport function defineWorkflowTemplate<const TTemplate extends WorkflowTemplate>(\n template: TTemplate,\n): TTemplate {\n return template;\n}\n\n/** 创建一个按模板 ID 检索的目录 */\nexport function createWorkflowTemplateCatalog<const TTemplates extends readonly WorkflowTemplate[]>(\n templates: TTemplates,\n): WorkflowTemplateCatalog<TTemplates> {\n const templateMap = new Map(templates.map((template) => [template.id, template]));\n\n return {\n has(id) {\n return templateMap.has(id);\n },\n get(id) {\n return (templateMap.get(id) as TTemplates[number] | undefined) ?? null;\n },\n list() {\n return templates;\n },\n };\n}\n","import type {\n WorkflowAutocompleteMultiSelectStep,\n WorkflowAutocompleteStep,\n WorkflowBoxStep,\n WorkflowCommandStep,\n WorkflowConfirmStep,\n WorkflowExternalCommandStep,\n WorkflowGroupMultiSelectStep,\n WorkflowInlineCommandStep,\n WorkflowLogStep,\n WorkflowMultiSelectStep,\n WorkflowNoteStep,\n WorkflowPasswordStep,\n WorkflowPathStep,\n WorkflowScriptFileCommandStep,\n WorkflowSelectKeyStep,\n WorkflowSelectStep,\n WorkflowStepDefinition,\n WorkflowTextStep,\n} from '../shared/types.js';\nimport type {\n WorkflowAutocompleteMultiSelectStepConfig,\n WorkflowAutocompleteStepConfig,\n WorkflowBoxStepConfig,\n WorkflowCommandStepConfig,\n WorkflowConfirmStepConfig,\n WorkflowGroupMultiSelectStepConfig,\n WorkflowLogStepConfig,\n WorkflowMultiSelectStepConfig,\n WorkflowNoteStepConfig,\n WorkflowPasswordStepConfig,\n WorkflowPathStepConfig,\n WorkflowSelectKeyStepConfig,\n WorkflowSelectStepConfig,\n WorkflowStepAuthoringDefinition,\n WorkflowStepConfigDefinition,\n WorkflowStepConfigInput,\n WorkflowTextStepConfig,\n} from './workflow-types.js';\n\n/** 创建文本输入步骤 */\nexport function createTextStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowTextStep<TKey>, 'id' | 'kind'>,\n): WorkflowTextStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'text',\n };\n}\n\n/** 创建单选步骤 */\nexport function createSelectStep<TKey extends string, TValue>(\n key: TKey,\n step: Omit<WorkflowSelectStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowSelectStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'select',\n };\n}\n\n/** 创建自动补全步骤 */\nexport function createAutocompleteStep<TKey extends string, TValue>(\n key: TKey,\n step: Omit<WorkflowAutocompleteStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowAutocompleteStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'autocomplete',\n };\n}\n\n/** 创建多选步骤 */\nexport function createMultiSelectStep<TKey extends string, TValue>(\n key: TKey,\n step: Omit<WorkflowMultiSelectStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowMultiSelectStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'multiselect',\n };\n}\n\n/** 创建自动补全多选步骤 */\nexport function createAutocompleteMultiSelectStep<TKey extends string, TValue>(\n key: TKey,\n step: Omit<WorkflowAutocompleteMultiSelectStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowAutocompleteMultiSelectStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'autocomplete-multiselect',\n };\n}\n\n/** 创建分组多选步骤 */\nexport function createGroupMultiSelectStep<TKey extends string, TValue>(\n key: TKey,\n step: Omit<WorkflowGroupMultiSelectStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowGroupMultiSelectStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'group-multiselect',\n };\n}\n\n/** 创建确认步骤 */\nexport function createConfirmStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowConfirmStep<TKey>, 'id' | 'kind'>,\n): WorkflowConfirmStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'confirm',\n };\n}\n\n/** 创建 note 步骤 */\nexport function createNoteStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowNoteStep<TKey>, 'id' | 'kind'>,\n): WorkflowNoteStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'note',\n };\n}\n\n/** 创建 box 步骤 */\nexport function createBoxStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowBoxStep<TKey>, 'id' | 'kind'>,\n): WorkflowBoxStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'box',\n };\n}\n\n/** 创建 log 步骤 */\nexport function createLogStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowLogStep<TKey>, 'id' | 'kind'>,\n): WorkflowLogStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'log',\n };\n}\n\n/** 创建密码输入步骤 */\nexport function createPasswordStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowPasswordStep<TKey>, 'id' | 'kind'>,\n): WorkflowPasswordStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'password',\n };\n}\n\n/** 创建路径输入步骤 */\nexport function createPathStep<TKey extends string>(\n key: TKey,\n step: Omit<WorkflowPathStep<TKey>, 'id' | 'kind'>,\n): WorkflowPathStep<TKey> {\n return {\n ...step,\n id: key,\n kind: 'path',\n };\n}\n\n/** 创建带快捷键的单选步骤 */\nexport function createSelectKeyStep<TKey extends string, TValue extends string>(\n key: TKey,\n step: Omit<WorkflowSelectKeyStep<TKey, TValue>, 'id' | 'kind'>,\n): WorkflowSelectKeyStep<TKey, TValue> {\n return {\n ...step,\n id: key,\n kind: 'select-key',\n };\n}\n\n/** 创建命令步骤 */\nexport function createCommandStep<TKey extends string, TResult = unknown>(\n key: TKey,\n step:\n | Omit<WorkflowExternalCommandStep<TKey, TResult>, 'id' | 'kind'>\n | Omit<WorkflowScriptFileCommandStep<TKey, TResult>, 'id' | 'kind'>\n | Omit<WorkflowInlineCommandStep<TKey, TResult>, 'id' | 'kind'>,\n): WorkflowCommandStep<TKey, TResult> {\n return {\n ...step,\n id: key,\n kind: 'command',\n };\n}\n\n/** 判断一个步骤是否已经是内部标准化结构 */\nfunction isNormalizedStep(step: WorkflowStepAuthoringDefinition): step is WorkflowStepDefinition {\n return 'kind' in step;\n}\n\n/** 将声明式 DSL 步骤转换成内部标准结构 */\nfunction normalizeStep(step: WorkflowStepAuthoringDefinition): WorkflowStepDefinition {\n if (isNormalizedStep(step)) return step;\n\n switch (step.type) {\n case 'text': {\n const { id, type, ...definition } = step;\n return createTextStep(id, definition);\n }\n case 'select': {\n const { id, type, ...definition } = step;\n return createSelectStep(id, definition);\n }\n case 'autocomplete': {\n const { id, type, ...definition } = step;\n return createAutocompleteStep(id, definition);\n }\n case 'multiselect': {\n const { id, type, ...definition } = step;\n return createMultiSelectStep(id, definition);\n }\n case 'autocompleteMultiselect': {\n const { id, type, ...definition } = step;\n return createAutocompleteMultiSelectStep(id, definition);\n }\n case 'groupMultiselect': {\n const { id, type, ...definition } = step;\n return createGroupMultiSelectStep(id, definition);\n }\n case 'confirm': {\n const { id, type, ...definition } = step;\n return createConfirmStep(id, definition);\n }\n case 'note': {\n const { id, type, ...definition } = step;\n return createNoteStep(id, definition);\n }\n case 'box': {\n const { id, type, ...definition } = step;\n return createBoxStep(id, definition);\n }\n case 'log': {\n const { id, type, ...definition } = step;\n return createLogStep(id, definition);\n }\n case 'password': {\n const { id, type, ...definition } = step;\n return createPasswordStep(id, definition);\n }\n case 'path': {\n const { id, type, ...definition } = step;\n return createPathStep(id, definition);\n }\n case 'selectKey': {\n const { id, type, ...definition } = step;\n return createSelectKeyStep(id, definition);\n }\n case 'command': {\n const { id, type, ...definition } = step;\n return createCommandStep(id, definition);\n }\n }\n}\n\n/** `defineStep` 的可调用接口,同时暴露按类型分发的方法 */\nexport interface DefineStep {\n /** 显式定义单个 DSL 步骤 */\n <const TStep extends WorkflowStepConfigDefinition>(step: TStep): WorkflowStepDefinition;\n /** 透传已经标准化过的步骤 */\n <const TStep extends WorkflowStepDefinition>(step: TStep): WorkflowStepDefinition;\n /** 定义自动补全步骤 */\n autocomplete: <TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowAutocompleteStepConfig<TKey, TValue>>,\n ) => WorkflowAutocompleteStep<TKey, TValue>;\n /** 定义自动补全多选步骤 */\n autocompleteMultiselect: <TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowAutocompleteMultiSelectStepConfig<TKey, TValue>>,\n ) => WorkflowAutocompleteMultiSelectStep<TKey, TValue>;\n /** 定义 box 步骤 */\n box: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowBoxStepConfig<TKey>>,\n ) => WorkflowBoxStep<TKey>;\n /** 定义命令步骤 */\n command: <TKey extends string, TResult = unknown>(\n step: WorkflowStepConfigInput<WorkflowCommandStepConfig<TKey, TResult>>,\n ) => WorkflowCommandStep<TKey, TResult>;\n /** 定义确认步骤 */\n confirm: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowConfirmStepConfig<TKey>>,\n ) => WorkflowConfirmStep<TKey>;\n /** 定义分组多选步骤 */\n groupMultiselect: <TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowGroupMultiSelectStepConfig<TKey, TValue>>,\n ) => WorkflowGroupMultiSelectStep<TKey, TValue>;\n /** 定义 log 步骤 */\n log: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowLogStepConfig<TKey>>,\n ) => WorkflowLogStep<TKey>;\n /** 定义多选步骤 */\n multiselect: <TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowMultiSelectStepConfig<TKey, TValue>>,\n ) => WorkflowMultiSelectStep<TKey, TValue>;\n /** 定义 note 步骤 */\n note: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowNoteStepConfig<TKey>>,\n ) => WorkflowNoteStep<TKey>;\n /** 定义密码步骤 */\n password: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowPasswordStepConfig<TKey>>,\n ) => WorkflowPasswordStep<TKey>;\n /** 定义路径步骤 */\n path: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowPathStepConfig<TKey>>,\n ) => WorkflowPathStep<TKey>;\n /** 定义快捷键单选步骤 */\n selectKey: <TKey extends string, TValue extends string>(\n step: WorkflowStepConfigInput<WorkflowSelectKeyStepConfig<TKey, TValue>>,\n ) => WorkflowSelectKeyStep<TKey, TValue>;\n /** 定义单选步骤 */\n select: <TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowSelectStepConfig<TKey, TValue>>,\n ) => WorkflowSelectStep<TKey, TValue>;\n /** 定义文本步骤 */\n text: <TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowTextStepConfig<TKey>>,\n ) => WorkflowTextStep<TKey>;\n}\n\nconst defineStepBase = ((step: WorkflowStepAuthoringDefinition) =>\n normalizeStep(step)) as DefineStep;\n\ndefineStepBase.autocomplete = function defineAutocompleteStep<TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowAutocompleteStepConfig<TKey, TValue>>,\n): WorkflowAutocompleteStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createAutocompleteStep(id, definition);\n};\n\ndefineStepBase.autocompleteMultiselect = function defineAutocompleteMultiselectStep<\n TKey extends string,\n TValue,\n>(\n step: WorkflowStepConfigInput<WorkflowAutocompleteMultiSelectStepConfig<TKey, TValue>>,\n): WorkflowAutocompleteMultiSelectStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createAutocompleteMultiSelectStep(id, definition);\n};\n\ndefineStepBase.box = function defineBoxStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowBoxStepConfig<TKey>>,\n): WorkflowBoxStep<TKey> {\n const { id, ...definition } = step;\n return createBoxStep(id, definition);\n};\n\ndefineStepBase.command = function defineCommandStep<TKey extends string, TResult = unknown>(\n step: WorkflowStepConfigInput<WorkflowCommandStepConfig<TKey, TResult>>,\n): WorkflowCommandStep<TKey, TResult> {\n const { id, ...definition } = step;\n return createCommandStep(id, definition);\n};\n\ndefineStepBase.confirm = function defineConfirmStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowConfirmStepConfig<TKey>>,\n): WorkflowConfirmStep<TKey> {\n const { id, ...definition } = step;\n return createConfirmStep(id, definition);\n};\n\ndefineStepBase.groupMultiselect = function defineGroupMultiselectStep<TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowGroupMultiSelectStepConfig<TKey, TValue>>,\n): WorkflowGroupMultiSelectStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createGroupMultiSelectStep(id, definition);\n};\n\ndefineStepBase.log = function defineLogStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowLogStepConfig<TKey>>,\n): WorkflowLogStep<TKey> {\n const { id, ...definition } = step;\n return createLogStep(id, definition);\n};\n\ndefineStepBase.multiselect = function defineMultiselectStep<TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowMultiSelectStepConfig<TKey, TValue>>,\n): WorkflowMultiSelectStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createMultiSelectStep(id, definition);\n};\n\ndefineStepBase.note = function defineNoteStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowNoteStepConfig<TKey>>,\n): WorkflowNoteStep<TKey> {\n const { id, ...definition } = step;\n return createNoteStep(id, definition);\n};\n\ndefineStepBase.password = function definePasswordStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowPasswordStepConfig<TKey>>,\n): WorkflowPasswordStep<TKey> {\n const { id, ...definition } = step;\n return createPasswordStep(id, definition);\n};\n\ndefineStepBase.path = function definePathStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowPathStepConfig<TKey>>,\n): WorkflowPathStep<TKey> {\n const { id, ...definition } = step;\n return createPathStep(id, definition);\n};\n\ndefineStepBase.select = function defineSelectStep<TKey extends string, TValue>(\n step: WorkflowStepConfigInput<WorkflowSelectStepConfig<TKey, TValue>>,\n): WorkflowSelectStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createSelectStep(id, definition);\n};\n\ndefineStepBase.selectKey = function defineSelectKeyStep<TKey extends string, TValue extends string>(\n step: WorkflowStepConfigInput<WorkflowSelectKeyStepConfig<TKey, TValue>>,\n): WorkflowSelectKeyStep<TKey, TValue> {\n const { id, ...definition } = step;\n return createSelectKeyStep(id, definition);\n};\n\ndefineStepBase.text = function defineTextStep<TKey extends string>(\n step: WorkflowStepConfigInput<WorkflowTextStepConfig<TKey>>,\n): WorkflowTextStep<TKey> {\n const { id, ...definition } = step;\n return createTextStep(id, definition);\n};\n\n/** 显式定义单个步骤;当编辑器对数组字面量提示不稳定时可用它拿到精确类型 */\nexport const defineStep = defineStepBase;\n\n/** 显式定义纯 DSL 步骤数组,优先保留编辑器字段提示 */\nexport function defineSteps<const TSteps extends readonly WorkflowStepConfigDefinition[]>(\n steps: TSteps,\n): readonly WorkflowStepDefinition[];\n\n/** 显式定义纯标准化步骤数组 */\nexport function defineSteps<const TSteps extends readonly WorkflowStepDefinition[]>(\n steps: TSteps,\n): readonly WorkflowStepDefinition[];\n\n/** 显式定义混合步骤数组;同时接受标准化步骤和声明式 DSL */\nexport function defineSteps<const TSteps extends readonly WorkflowStepAuthoringDefinition[]>(\n steps: TSteps,\n): readonly WorkflowStepDefinition[];\n\n/** 显式定义步骤数组,是当前推荐的声明式作者入口 */\nexport function defineSteps(\n steps: readonly WorkflowStepAuthoringDefinition[],\n): readonly WorkflowStepDefinition[] {\n return steps.map((step) => normalizeStep(step));\n}\n","import type {\n WorkflowCommandExecutionResult,\n WorkflowCommandResult,\n WorkflowDefinition,\n WorkflowStepDefinition,\n} from '../shared/types.js';\nimport type { WorkflowAuthoringDefinition } from './workflow-types.js';\n\nexport * from './step-builders.js';\nexport * from './workflow-types.js';\n\n/** 定义一个工作流,并保留步骤元数据给后续类型推导使用 */\nexport function defineWorkflow(\n workflow: WorkflowAuthoringDefinition,\n): WorkflowDefinition<readonly WorkflowStepDefinition[]> {\n return workflow as unknown as WorkflowDefinition<readonly WorkflowStepDefinition[]>;\n}\n\n/** 方便调用方显式引用命令步骤结果类型 */\nexport type { WorkflowCommandExecutionResult, WorkflowCommandResult };\n","import {\n autocomplete,\n autocompleteMultiselect,\n box,\n cancel,\n confirm,\n group,\n groupMultiselect,\n intro,\n isCancel,\n isCI,\n isTTY,\n limitOptions,\n log,\n multiselect,\n note,\n outro,\n password,\n path,\n progress,\n select,\n selectKey,\n spinner,\n stream,\n symbol,\n symbolBar,\n taskLog,\n tasks,\n text,\n unicode,\n unicodeOr,\n} from '@clack/prompts';\n\nexport type {\n AutocompleteMultiSelectOptions,\n AutocompleteOptions,\n BoxAlignment,\n BoxOptions,\n CommonOptions,\n ConfirmOptions,\n GroupMultiSelectOptions,\n LimitOptionsParams,\n LogMessageOptions,\n MultiSelectOptions,\n NoteOptions,\n PasswordOptions,\n PathOptions,\n ProgressOptions,\n ProgressResult,\n SelectKeyOptions,\n SelectOptions,\n SpinnerOptions,\n SpinnerResult,\n Task,\n TaskLogOptions,\n TextOptions,\n} from '@clack/prompts';\nexport {\n autocomplete,\n autocompleteMultiselect,\n box,\n cancel,\n confirm,\n group,\n groupMultiselect,\n intro,\n isCancel,\n isCI,\n isTTY,\n limitOptions,\n log,\n multiselect,\n note,\n outro,\n password,\n path,\n progress,\n select,\n selectKey,\n spinner,\n stream,\n symbol,\n symbolBar,\n taskLog,\n tasks,\n text,\n unicode,\n unicodeOr,\n};\n\n/** 默认的 Clack runtime,供渲染器复用 */\nexport const defaultPromptRuntime = {\n autocomplete,\n autocompleteMultiselect,\n box,\n cancel,\n confirm,\n group,\n groupMultiselect,\n intro,\n isCancel,\n isCI,\n isTTY,\n limitOptions,\n log,\n multiselect,\n note,\n outro,\n password,\n path,\n progress,\n select,\n selectKey,\n spinner,\n stream,\n symbol,\n symbolBar,\n taskLog,\n tasks,\n text,\n unicode,\n unicodeOr,\n};\n\n/** Clack runtime 的形状定义 */\nexport type PromptRuntime = typeof defaultPromptRuntime;\n","import { createRequire as e } from \"node:module\";\nimport { spawn as t } from \"node:child_process\";\nimport { delimiter as n, dirname as r, normalize as i, resolve as a } from \"node:path\";\nimport { cwd as o } from \"node:process\";\nimport { PassThrough as s } from \"node:stream\";\nimport c from \"node:readline\";\n//#region \\0rolldown/runtime.js\nvar l = (e, t) => () => (t || e((t = { exports: {} }).exports, t), t.exports);\nvar u = /* @__PURE__ */ e(import.meta.url);\n//#endregion\n//#region src/env.ts\nconst d = /^path$/i;\nconst f = {\n\tkey: \"PATH\",\n\tvalue: \"\"\n};\nfunction p(e) {\n\tfor (const t in e) {\n\t\tif (!Object.prototype.hasOwnProperty.call(e, t) || !d.test(t)) continue;\n\t\tconst n = e[t];\n\t\tif (!n) return f;\n\t\treturn {\n\t\t\tkey: t,\n\t\t\tvalue: n\n\t\t};\n\t}\n\treturn f;\n}\nfunction m(e, t) {\n\tconst i = t.value.split(n);\n\tconst o = [];\n\tlet s = e;\n\tlet c;\n\tdo {\n\t\to.push(a(s, \"node_modules\", \".bin\"));\n\t\tc = s;\n\t\ts = r(s);\n\t} while (s !== c);\n\tconst l = o.concat(i).join(n);\n\treturn {\n\t\tkey: t.key,\n\t\tvalue: l\n\t};\n}\nfunction h(e, t) {\n\tconst n = {\n\t\t...process.env,\n\t\t...t\n\t};\n\tconst r = m(e, p(n));\n\tn[r.key] = r.value;\n\treturn n;\n}\n//#endregion\n//#region src/stream.ts\nconst g = (e) => {\n\tlet t = e.length;\n\tconst n = new s();\n\tconst r = () => {\n\t\tif (--t === 0) n.emit(\"end\");\n\t};\n\tfor (const t of e) {\n\t\tt.pipe(n, { end: false });\n\t\tt.on(\"end\", r);\n\t}\n\treturn n;\n};\n//#endregion\n//#region node_modules/isexe/windows.js\nvar _ = /* @__PURE__ */ l(((e, t) => {\n\tt.exports = a;\n\ta.sync = o;\n\tvar n = u(\"fs\");\n\tfunction r(e, t) {\n\t\tvar n = t.pathExt !== void 0 ? t.pathExt : process.env.PATHEXT;\n\t\tif (!n) return true;\n\t\tn = n.split(\";\");\n\t\tif (n.indexOf(\"\") !== -1) return true;\n\t\tfor (var r = 0; r < n.length; r++) {\n\t\t\tvar i = n[r].toLowerCase();\n\t\t\tif (i && e.substr(-i.length).toLowerCase() === i) return true;\n\t\t}\n\t\treturn false;\n\t}\n\tfunction i(e, t, n) {\n\t\tif (!e.isSymbolicLink() && !e.isFile()) return false;\n\t\treturn r(t, n);\n\t}\n\tfunction a(e, t, r) {\n\t\tn.stat(e, function(n, a) {\n\t\t\tr(n, n ? false : i(a, e, t));\n\t\t});\n\t}\n\tfunction o(e, t) {\n\t\treturn i(n.statSync(e), e, t);\n\t}\n}));\n//#endregion\n//#region node_modules/isexe/mode.js\nvar v = /* @__PURE__ */ l(((e, t) => {\n\tt.exports = r;\n\tr.sync = i;\n\tvar n = u(\"fs\");\n\tfunction r(e, t, r) {\n\t\tn.stat(e, function(e, n) {\n\t\t\tr(e, e ? false : a(n, t));\n\t\t});\n\t}\n\tfunction i(e, t) {\n\t\treturn a(n.statSync(e), t);\n\t}\n\tfunction a(e, t) {\n\t\treturn e.isFile() && o(e, t);\n\t}\n\tfunction o(e, t) {\n\t\tvar n = e.mode;\n\t\tvar r = e.uid;\n\t\tvar i = e.gid;\n\t\tvar a = t.uid !== void 0 ? t.uid : process.getuid && process.getuid();\n\t\tvar o = t.gid !== void 0 ? t.gid : process.getgid && process.getgid();\n\t\tvar s = parseInt(\"100\", 8);\n\t\tvar c = parseInt(\"010\", 8);\n\t\tvar l = parseInt(\"001\", 8);\n\t\tvar u = s | c;\n\t\treturn n & l || n & c && i === o || n & s && r === a || n & u && a === 0;\n\t}\n}));\n//#endregion\n//#region node_modules/isexe/index.js\nvar y = /* @__PURE__ */ l(((e, t) => {\n\tu(\"fs\");\n\tvar n;\n\tif (process.platform === \"win32\" || global.TESTING_WINDOWS) n = _();\n\telse n = v();\n\tt.exports = r;\n\tr.sync = i;\n\tfunction r(e, t, i) {\n\t\tif (typeof t === \"function\") {\n\t\t\ti = t;\n\t\t\tt = {};\n\t\t}\n\t\tif (!i) {\n\t\t\tif (typeof Promise !== \"function\") throw new TypeError(\"callback not provided\");\n\t\t\treturn new Promise(function(n, i) {\n\t\t\t\tr(e, t || {}, function(e, t) {\n\t\t\t\t\tif (e) i(e);\n\t\t\t\t\telse n(t);\n\t\t\t\t});\n\t\t\t});\n\t\t}\n\t\tn(e, t || {}, function(e, n) {\n\t\t\tif (e) {\n\t\t\t\tif (e.code === \"EACCES\" || t && t.ignoreErrors) {\n\t\t\t\t\te = null;\n\t\t\t\t\tn = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\ti(e, n);\n\t\t});\n\t}\n\tfunction i(e, t) {\n\t\ttry {\n\t\t\treturn n.sync(e, t || {});\n\t\t} catch (e) {\n\t\t\tif (t && t.ignoreErrors || e.code === \"EACCES\") return false;\n\t\t\telse throw e;\n\t\t}\n\t}\n}));\n//#endregion\n//#region node_modules/which/which.js\nvar b = /* @__PURE__ */ l(((e, t) => {\n\tconst n = process.platform === \"win32\" || process.env.OSTYPE === \"cygwin\" || process.env.OSTYPE === \"msys\";\n\tconst r = u(\"path\");\n\tconst i = n ? \";\" : \":\";\n\tconst a = y();\n\tconst o = (e) => Object.assign(/* @__PURE__ */ new Error(`not found: ${e}`), { code: \"ENOENT\" });\n\tconst s = (e, t) => {\n\t\tconst r = t.colon || i;\n\t\tconst a = e.match(/\\//) || n && e.match(/\\\\/) ? [\"\"] : [...n ? [process.cwd()] : [], ...(t.path || process.env.PATH || \"\").split(r)];\n\t\tconst o = n ? t.pathExt || process.env.PATHEXT || \".EXE;.CMD;.BAT;.COM\" : \"\";\n\t\tconst s = n ? o.split(r) : [\"\"];\n\t\tif (n) {\n\t\t\tif (e.indexOf(\".\") !== -1 && s[0] !== \"\") s.unshift(\"\");\n\t\t}\n\t\treturn {\n\t\t\tpathEnv: a,\n\t\t\tpathExt: s,\n\t\t\tpathExtExe: o\n\t\t};\n\t};\n\tconst c = (e, t, n) => {\n\t\tif (typeof t === \"function\") {\n\t\t\tn = t;\n\t\t\tt = {};\n\t\t}\n\t\tif (!t) t = {};\n\t\tconst { pathEnv: i, pathExt: c, pathExtExe: l } = s(e, t);\n\t\tconst u = [];\n\t\tconst d = (n) => new Promise((a, s) => {\n\t\t\tif (n === i.length) return t.all && u.length ? a(u) : s(o(e));\n\t\t\tconst c = i[n];\n\t\t\tconst l = /^\".*\"$/.test(c) ? c.slice(1, -1) : c;\n\t\t\tconst d = r.join(l, e);\n\t\t\ta(f(!l && /^\\.[\\\\\\/]/.test(e) ? e.slice(0, 2) + d : d, n, 0));\n\t\t});\n\t\tconst f = (e, n, r) => new Promise((i, o) => {\n\t\t\tif (r === c.length) return i(d(n + 1));\n\t\t\tconst s = c[r];\n\t\t\ta(e + s, { pathExt: l }, (a, o) => {\n\t\t\t\tif (!a && o) if (t.all) u.push(e + s);\n\t\t\t\telse return i(e + s);\n\t\t\t\treturn i(f(e, n, r + 1));\n\t\t\t});\n\t\t});\n\t\treturn n ? d(0).then((e) => n(null, e), n) : d(0);\n\t};\n\tconst l = (e, t) => {\n\t\tt = t || {};\n\t\tconst { pathEnv: n, pathExt: i, pathExtExe: c } = s(e, t);\n\t\tconst l = [];\n\t\tfor (let o = 0; o < n.length; o++) {\n\t\t\tconst s = n[o];\n\t\t\tconst u = /^\".*\"$/.test(s) ? s.slice(1, -1) : s;\n\t\t\tconst d = r.join(u, e);\n\t\t\tconst f = !u && /^\\.[\\\\\\/]/.test(e) ? e.slice(0, 2) + d : d;\n\t\t\tfor (let e = 0; e < i.length; e++) {\n\t\t\t\tconst n = f + i[e];\n\t\t\t\ttry {\n\t\t\t\t\tif (a.sync(n, { pathExt: c })) if (t.all) l.push(n);\n\t\t\t\t\telse return n;\n\t\t\t\t} catch (e) {}\n\t\t\t}\n\t\t}\n\t\tif (t.all && l.length) return l;\n\t\tif (t.nothrow) return null;\n\t\tthrow o(e);\n\t};\n\tt.exports = c;\n\tc.sync = l;\n}));\n//#endregion\n//#region node_modules/path-key/index.js\nvar x = /* @__PURE__ */ l(((e, t) => {\n\tconst n = (e = {}) => {\n\t\tconst t = e.env || process.env;\n\t\tif ((e.platform || process.platform) !== \"win32\") return \"PATH\";\n\t\treturn Object.keys(t).reverse().find((e) => e.toUpperCase() === \"PATH\") || \"Path\";\n\t};\n\tt.exports = n;\n\tt.exports.default = n;\n}));\n//#endregion\n//#region node_modules/cross-spawn/lib/util/resolveCommand.js\nvar S = /* @__PURE__ */ l(((e, t) => {\n\tconst n = u(\"path\");\n\tconst r = b();\n\tconst i = x();\n\tfunction a(e, t) {\n\t\tconst a = e.options.env || process.env;\n\t\tconst o = process.cwd();\n\t\tconst s = e.options.cwd != null;\n\t\tconst c = s && process.chdir !== void 0 && !process.chdir.disabled;\n\t\tif (c) try {\n\t\t\tprocess.chdir(e.options.cwd);\n\t\t} catch (e) {}\n\t\tlet l;\n\t\ttry {\n\t\t\tl = r.sync(e.command, {\n\t\t\t\tpath: a[i({ env: a })],\n\t\t\t\tpathExt: t ? n.delimiter : void 0\n\t\t\t});\n\t\t} catch (e) {} finally {\n\t\t\tif (c) process.chdir(o);\n\t\t}\n\t\tif (l) l = n.resolve(s ? e.options.cwd : \"\", l);\n\t\treturn l;\n\t}\n\tfunction o(e) {\n\t\treturn a(e) || a(e, true);\n\t}\n\tt.exports = o;\n}));\n//#endregion\n//#region node_modules/cross-spawn/lib/util/escape.js\nvar C = /* @__PURE__ */ l(((e, t) => {\n\tconst n = /([()\\][%!^\"`<>&|;, *?])/g;\n\tfunction r(e) {\n\t\te = e.replace(n, \"^$1\");\n\t\treturn e;\n\t}\n\tfunction i(e, t) {\n\t\te = `${e}`;\n\t\te = e.replace(/(?=(\\\\+?)?)\\1\"/g, \"$1$1\\\\\\\"\");\n\t\te = e.replace(/(?=(\\\\+?)?)\\1$/, \"$1$1\");\n\t\te = `\"${e}\"`;\n\t\te = e.replace(n, \"^$1\");\n\t\tif (t) e = e.replace(n, \"^$1\");\n\t\treturn e;\n\t}\n\tt.exports.command = r;\n\tt.exports.argument = i;\n}));\n//#endregion\n//#region node_modules/shebang-regex/index.js\nvar w = /* @__PURE__ */ l(((e, t) => {\n\tt.exports = /^#!(.*)/;\n}));\n//#endregion\n//#region node_modules/shebang-command/index.js\nvar T = /* @__PURE__ */ l(((e, t) => {\n\tconst n = w();\n\tt.exports = (e = \"\") => {\n\t\tconst t = e.match(n);\n\t\tif (!t) return null;\n\t\tconst [r, i] = t[0].replace(/#! ?/, \"\").split(\" \");\n\t\tconst a = r.split(\"/\").pop();\n\t\tif (a === \"env\") return i;\n\t\treturn i ? `${a} ${i}` : a;\n\t};\n}));\n//#endregion\n//#region node_modules/cross-spawn/lib/util/readShebang.js\nvar E = /* @__PURE__ */ l(((e, t) => {\n\tconst n = u(\"fs\");\n\tconst r = T();\n\tfunction i(e) {\n\t\tconst t = 150;\n\t\tconst i = Buffer.alloc(t);\n\t\tlet a;\n\t\ttry {\n\t\t\ta = n.openSync(e, \"r\");\n\t\t\tn.readSync(a, i, 0, t, 0);\n\t\t\tn.closeSync(a);\n\t\t} catch (e) {}\n\t\treturn r(i.toString());\n\t}\n\tt.exports = i;\n}));\n//#endregion\n//#region node_modules/cross-spawn/lib/parse.js\nvar D = /* @__PURE__ */ l(((e, t) => {\n\tconst n = u(\"path\");\n\tconst r = S();\n\tconst i = C();\n\tconst a = E();\n\tconst o = process.platform === \"win32\";\n\tconst s = /\\.(?:com|exe)$/i;\n\tconst c = /node_modules[\\\\/].bin[\\\\/][^\\\\/]+\\.cmd$/i;\n\tfunction l(e) {\n\t\te.file = r(e);\n\t\tconst t = e.file && a(e.file);\n\t\tif (t) {\n\t\t\te.args.unshift(e.file);\n\t\t\te.command = t;\n\t\t\treturn r(e);\n\t\t}\n\t\treturn e.file;\n\t}\n\tfunction d(e) {\n\t\tif (!o) return e;\n\t\tconst t = l(e);\n\t\tconst r = !s.test(t);\n\t\tif (e.options.forceShell || r) {\n\t\t\tconst r = c.test(t);\n\t\t\te.command = n.normalize(e.command);\n\t\t\te.command = i.command(e.command);\n\t\t\te.args = e.args.map((e) => i.argument(e, r));\n\t\t\te.args = [\n\t\t\t\t\"/d\",\n\t\t\t\t\"/s\",\n\t\t\t\t\"/c\",\n\t\t\t\t`\"${[e.command].concat(e.args).join(\" \")}\"`\n\t\t\t];\n\t\t\te.command = process.env.comspec || \"cmd.exe\";\n\t\t\te.options.windowsVerbatimArguments = true;\n\t\t}\n\t\treturn e;\n\t}\n\tfunction f(e, t, n) {\n\t\tif (t && !Array.isArray(t)) {\n\t\t\tn = t;\n\t\t\tt = null;\n\t\t}\n\t\tt = t ? t.slice(0) : [];\n\t\tn = Object.assign({}, n);\n\t\tconst r = {\n\t\t\tcommand: e,\n\t\t\targs: t,\n\t\t\toptions: n,\n\t\t\tfile: void 0,\n\t\t\toriginal: {\n\t\t\t\tcommand: e,\n\t\t\t\targs: t\n\t\t\t}\n\t\t};\n\t\treturn n.shell ? r : d(r);\n\t}\n\tt.exports = f;\n}));\n//#endregion\n//#region node_modules/cross-spawn/lib/enoent.js\nvar O = /* @__PURE__ */ l(((e, t) => {\n\tconst n = process.platform === \"win32\";\n\tfunction r(e, t) {\n\t\treturn Object.assign(/* @__PURE__ */ new Error(`${t} ${e.command} ENOENT`), {\n\t\t\tcode: \"ENOENT\",\n\t\t\terrno: \"ENOENT\",\n\t\t\tsyscall: `${t} ${e.command}`,\n\t\t\tpath: e.command,\n\t\t\tspawnargs: e.args\n\t\t});\n\t}\n\tfunction i(e, t) {\n\t\tif (!n) return;\n\t\tconst r = e.emit;\n\t\te.emit = function(n, i) {\n\t\t\tif (n === \"exit\") {\n\t\t\t\tconst n = a(i, t);\n\t\t\t\tif (n) return r.call(e, \"error\", n);\n\t\t\t}\n\t\t\treturn r.apply(e, arguments);\n\t\t};\n\t}\n\tfunction a(e, t) {\n\t\tif (n && e === 1 && !t.file) return r(t.original, \"spawn\");\n\t\treturn null;\n\t}\n\tfunction o(e, t) {\n\t\tif (n && e === 1 && !t.file) return r(t.original, \"spawnSync\");\n\t\treturn null;\n\t}\n\tt.exports = {\n\t\thookChildProcess: i,\n\t\tverifyENOENT: a,\n\t\tverifyENOENTSync: o,\n\t\tnotFoundError: r\n\t};\n}));\n//#endregion\n//#region node_modules/cross-spawn/index.js\nvar k = /* @__PURE__ */ l(((e, t) => {\n\tconst n = u(\"child_process\");\n\tconst r = D();\n\tconst i = O();\n\tfunction a(e, t, a) {\n\t\tconst o = r(e, t, a);\n\t\tconst s = n.spawn(o.command, o.args, o.options);\n\t\ti.hookChildProcess(s, o);\n\t\treturn s;\n\t}\n\tfunction o(e, t, a) {\n\t\tconst o = r(e, t, a);\n\t\tconst s = n.spawnSync(o.command, o.args, o.options);\n\t\ts.error = s.error || i.verifyENOENTSync(s.status, o);\n\t\treturn s;\n\t}\n\tt.exports = a;\n\tt.exports.spawn = a;\n\tt.exports.sync = o;\n\tt.exports._parse = r;\n\tt.exports._enoent = i;\n}));\n//#endregion\n//#region src/non-zero-exit-error.ts\nvar A = k();\nvar j = class extends Error {\n\tresult;\n\toutput;\n\tget exitCode() {\n\t\tif (this.result.exitCode !== null) return this.result.exitCode;\n\t}\n\tconstructor(e, t) {\n\t\tsuper(`Process exited with non-zero status (${e.exitCode})`);\n\t\tthis.result = e;\n\t\tthis.output = t;\n\t}\n};\n//#endregion\n//#region src/main.ts\nconst M = {\n\ttimeout: void 0,\n\tpersist: false\n};\nconst N = { windowsHide: true };\nfunction P(e, t) {\n\treturn {\n\t\tcommand: i(e),\n\t\targs: t ?? []\n\t};\n}\nfunction F(e) {\n\tconst t = new AbortController();\n\tfor (const n of e) {\n\t\tif (n.aborted) {\n\t\t\tt.abort();\n\t\t\treturn n;\n\t\t}\n\t\tconst e = () => {\n\t\t\tt.abort(n.reason);\n\t\t};\n\t\tn.addEventListener(\"abort\", e, { signal: t.signal });\n\t}\n\treturn t.signal;\n}\nasync function I(e) {\n\tlet t = \"\";\n\tfor await (const n of e) t += n.toString();\n\treturn t;\n}\nvar L = class {\n\t_process;\n\t_aborted = false;\n\t_options;\n\t_command;\n\t_args;\n\t_resolveClose;\n\t_processClosed;\n\t_thrownError;\n\tget process() {\n\t\treturn this._process;\n\t}\n\tget pid() {\n\t\treturn this._process?.pid;\n\t}\n\tget exitCode() {\n\t\tif (this._process && this._process.exitCode !== null) return this._process.exitCode;\n\t}\n\tconstructor(e, t, n) {\n\t\tthis._options = {\n\t\t\t...M,\n\t\t\t...n\n\t\t};\n\t\tthis._command = e;\n\t\tthis._args = t ?? [];\n\t\tthis._processClosed = new Promise((e) => {\n\t\t\tthis._resolveClose = e;\n\t\t});\n\t}\n\tkill(e) {\n\t\treturn this._process?.kill(e) === true;\n\t}\n\tget aborted() {\n\t\treturn this._aborted;\n\t}\n\tget killed() {\n\t\treturn this._process?.killed === true;\n\t}\n\tpipe(e, t, n) {\n\t\treturn z(e, t, {\n\t\t\t...n,\n\t\t\tstdin: this\n\t\t});\n\t}\n\tasync *[Symbol.asyncIterator]() {\n\t\tconst e = this._process;\n\t\tif (!e) return;\n\t\tconst t = [];\n\t\tif (this._streamErr) t.push(this._streamErr);\n\t\tif (this._streamOut) t.push(this._streamOut);\n\t\tconst n = g(t);\n\t\tconst r = c.createInterface({ input: n });\n\t\tfor await (const e of r) yield e.toString();\n\t\tawait this._processClosed;\n\t\te.removeAllListeners();\n\t\tif (this._thrownError) throw this._thrownError;\n\t\tif (this._options?.throwOnError && this.exitCode !== 0 && this.exitCode !== void 0) throw new j(this);\n\t}\n\tasync _waitForOutput() {\n\t\tconst e = this._process;\n\t\tif (!e) throw new Error(\"No process was started\");\n\t\tconst [t, n] = await Promise.all([this._streamOut ? I(this._streamOut) : \"\", this._streamErr ? I(this._streamErr) : \"\"]);\n\t\tawait this._processClosed;\n\t\tif (this._options?.stdin) await this._options.stdin;\n\t\te.removeAllListeners();\n\t\tif (this._thrownError) throw this._thrownError;\n\t\tconst r = {\n\t\t\tstderr: n,\n\t\t\tstdout: t,\n\t\t\texitCode: this.exitCode\n\t\t};\n\t\tif (this._options.throwOnError && this.exitCode !== 0 && this.exitCode !== void 0) throw new j(this, r);\n\t\treturn r;\n\t}\n\tthen(e, t) {\n\t\treturn this._waitForOutput().then(e, t);\n\t}\n\t_streamOut;\n\t_streamErr;\n\tspawn() {\n\t\tconst e = o();\n\t\tconst n = this._options;\n\t\tconst r = {\n\t\t\t...N,\n\t\t\t...n.nodeOptions\n\t\t};\n\t\tconst i = [];\n\t\tthis._resetState();\n\t\tif (n.timeout !== void 0) i.push(AbortSignal.timeout(n.timeout));\n\t\tif (n.signal !== void 0) i.push(n.signal);\n\t\tif (n.persist === true) r.detached = true;\n\t\tif (i.length > 0) r.signal = F(i);\n\t\tr.env = h(e, r.env);\n\t\tconst { command: a, args: s } = P(this._command, this._args);\n\t\tconst c = (0, A._parse)(a, s, r);\n\t\tconst l = t(c.command, c.args, c.options);\n\t\tif (l.stderr) this._streamErr = l.stderr;\n\t\tif (l.stdout) this._streamOut = l.stdout;\n\t\tthis._process = l;\n\t\tl.once(\"error\", this._onError);\n\t\tl.once(\"close\", this._onClose);\n\t\tif (n.stdin !== void 0 && l.stdin && n.stdin.process) {\n\t\t\tconst { stdout: e } = n.stdin.process;\n\t\t\tif (e) e.pipe(l.stdin);\n\t\t}\n\t}\n\t_resetState() {\n\t\tthis._aborted = false;\n\t\tthis._processClosed = new Promise((e) => {\n\t\t\tthis._resolveClose = e;\n\t\t});\n\t\tthis._thrownError = void 0;\n\t}\n\t_onError = (e) => {\n\t\tif (e.name === \"AbortError\" && (!(e.cause instanceof Error) || e.cause.name !== \"TimeoutError\")) {\n\t\t\tthis._aborted = true;\n\t\t\treturn;\n\t\t}\n\t\tthis._thrownError = e;\n\t};\n\t_onClose = () => {\n\t\tif (this._resolveClose) this._resolveClose();\n\t};\n};\nconst R = (e, t, n) => {\n\tconst r = new L(e, t, n);\n\tr.spawn();\n\treturn r;\n};\nconst z = R;\n//#endregion\nexport { L as ExecProcess, j as NonZeroExitError, z as exec, R as x };\n","import type { Buffer } from 'node:buffer';\nimport { spawn } from 'node:child_process';\nimport process from 'node:process';\nimport { x } from 'tinyexec';\nimport type {\n WorkflowCommandExecutionOptions,\n WorkflowCommandExecutionResult,\n WorkflowCommandExecutor,\n WorkflowCommandExecutorType,\n WorkflowRunCommandOptions,\n} from '../shared/types.js';\n\n/** 创建默认的 Node 子进程命令执行器 */\nexport function createNodeCommandExecutor(): WorkflowCommandExecutor {\n return {\n execute: executeCommand,\n };\n}\n\n/** 创建基于 tinyexec 的命令执行器 */\nexport function createTinyexecCommandExecutor(): WorkflowCommandExecutor {\n return {\n execute: executeCommandWithTinyexec,\n };\n}\n\n/** 直接执行一条外部命令,适合作为底层工具函数单独使用 */\nexport async function runCommand(\n options: WorkflowRunCommandOptions,\n): Promise<WorkflowCommandExecutionResult> {\n const { executorType, ...executionOptions } = options;\n return createCommandExecutor(executorType).execute(executionOptions);\n}\n\n/** 将 Buffer 或 string 统一转成文本,并透传给上游监听器 */\nfunction consumeChunk(\n chunk: Buffer | string,\n stream: 'stderr' | 'stdout',\n handlers: {\n onStderr?: (chunk: string) => void;\n onStdout?: (chunk: string) => void;\n renderer?: 'inherit' | 'quiet' | 'task-log';\n },\n state: {\n combined: string[];\n stderr: string[];\n stdout: string[];\n },\n): void {\n const text = String(chunk);\n state.combined.push(text);\n\n if (stream === 'stdout') {\n state.stdout.push(text);\n handlers.onStdout?.(text);\n if (handlers.renderer === 'inherit') process.stdout.write(text);\n return;\n }\n\n state.stderr.push(text);\n handlers.onStderr?.(text);\n if (handlers.renderer === 'inherit') process.stderr.write(text);\n}\n\n/** 初始化命令输出缓冲区 */\nfunction createCommandChunks(): {\n combined: string[];\n stderr: string[];\n stdout: string[];\n} {\n return {\n combined: [],\n stderr: [],\n stdout: [],\n };\n}\n\n/** 将命令输出缓冲区整理成统一结果 */\nfunction toCommandResult(\n chunks: {\n combined: string[];\n stderr: string[];\n stdout: string[];\n },\n code: number | null | undefined,\n): WorkflowCommandExecutionResult {\n return {\n code: code ?? 1,\n combined: chunks.combined.join(''),\n stderr: chunks.stderr.join(''),\n stdout: chunks.stdout.join(''),\n };\n}\n\n/** 将进程 stdout 和 stderr 绑定到统一的输出消费逻辑 */\nfunction bindProcessStreams(\n child: {\n stderr?: NodeJS.ReadableStream | null;\n stdout?: NodeJS.ReadableStream | null;\n },\n options: WorkflowCommandExecutionOptions,\n chunks: {\n combined: string[];\n stderr: string[];\n stdout: string[];\n },\n): void {\n child.stdout?.on('data', (chunk) => {\n consumeChunk(chunk as Buffer | string, 'stdout', options, chunks);\n });\n child.stderr?.on('data', (chunk) => {\n consumeChunk(chunk as Buffer | string, 'stderr', options, chunks);\n });\n}\n\n/** 根据类型选择内置命令执行器 */\nexport function createCommandExecutor(\n executorType: WorkflowCommandExecutorType = 'node',\n): WorkflowCommandExecutor {\n return executorType === 'tinyexec'\n ? createTinyexecCommandExecutor()\n : createNodeCommandExecutor();\n}\n\n/** 使用子进程执行命令,并收集 stdout / stderr / combined 执行记录 */\nasync function executeCommand(\n options: WorkflowCommandExecutionOptions,\n): Promise<WorkflowCommandExecutionResult> {\n return new Promise((resolve, reject) => {\n const child = spawn(options.command, options.args ?? [], {\n cwd: options.cwd,\n env: options.env,\n stdio: [options.stdin ?? 'ignore', 'pipe', 'pipe'],\n });\n const chunks = createCommandChunks();\n\n bindProcessStreams(child, options, chunks);\n\n child.on('error', (error) => {\n reject(error);\n });\n\n child.on('close', (code) => {\n resolve(toCommandResult(chunks, code));\n });\n });\n}\n\n/** 使用 tinyexec 执行命令,并收集 stdout / stderr / combined 执行记录 */\nasync function executeCommandWithTinyexec(\n options: WorkflowCommandExecutionOptions,\n): Promise<WorkflowCommandExecutionResult> {\n return new Promise((resolve, reject) => {\n const child = x(options.command, options.args ?? [], {\n nodeOptions: {\n cwd: options.cwd,\n env: options.env,\n stdio: [options.stdin ?? 'ignore', 'pipe', 'pipe'],\n },\n });\n const processHandle = child.process;\n\n if (!processHandle) {\n reject(new Error('tinyexec 未能创建子进程'));\n return;\n }\n\n const chunks = createCommandChunks();\n\n bindProcessStreams(processHandle, options, chunks);\n processHandle.once('error', (error) => {\n reject(error);\n });\n processHandle.once('close', (code) => {\n resolve(toCommandResult(chunks, code));\n });\n });\n}\n","/** 用户主动取消交互时抛出的错误 */\nexport class PromptCancelledError extends Error {\n readonly key?: string;\n readonly scope?: string;\n\n constructor(message = 'Prompt cancelled', options: { key?: string; scope?: string } = {}) {\n super(message);\n this.name = 'PromptCancelledError';\n if (options.key !== undefined) this.key = options.key;\n if (options.scope !== undefined) this.scope = options.scope;\n }\n}\n\n/** 标识工作流执行过程中出现的业务级失败 */\nexport class WorkflowExecutionError extends Error {\n readonly stepId: string;\n readonly workflowId: string;\n\n constructor(\n message: string,\n options: {\n cause?: unknown;\n stepId: string;\n workflowId: string;\n },\n ) {\n super(message, options.cause === undefined ? undefined : { cause: options.cause });\n this.name = 'WorkflowExecutionError';\n this.stepId = options.stepId;\n this.workflowId = options.workflowId;\n }\n}\n\n/** 判断未知错误是否来自用户取消 */\nexport function isPromptCancelledError(error: unknown): error is PromptCancelledError {\n return (\n error instanceof PromptCancelledError ||\n (typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'PromptCancelledError')\n );\n}\n\n/** 判断未知错误是否是工作流执行错误 */\nexport function isWorkflowExecutionError(error: unknown): error is WorkflowExecutionError {\n return (\n error instanceof WorkflowExecutionError ||\n (typeof error === 'object' &&\n error !== null &&\n 'name' in error &&\n error.name === 'WorkflowExecutionError')\n );\n}\n","const isString = obj => typeof obj === 'string';\nconst defer = () => {\n let res;\n let rej;\n const promise = new Promise((resolve, reject) => {\n res = resolve;\n rej = reject;\n });\n promise.resolve = res;\n promise.reject = rej;\n return promise;\n};\nconst makeString = object => {\n if (object == null) return '';\n return String(object);\n};\nconst copy = (a, s, t) => {\n a.forEach(m => {\n if (s[m]) t[m] = s[m];\n });\n};\nconst lastOfPathSeparatorRegExp = /###/g;\nconst cleanKey = key => key && key.includes('###') ? key.replace(lastOfPathSeparatorRegExp, '.') : key;\nconst canNotTraverseDeeper = object => !object || isString(object);\nconst getLastOfPath = (object, path, Empty) => {\n const stack = !isString(path) ? path : path.split('.');\n let stackIndex = 0;\n while (stackIndex < stack.length - 1) {\n if (canNotTraverseDeeper(object)) return {};\n const key = cleanKey(stack[stackIndex]);\n if (!object[key] && Empty) object[key] = new Empty();\n if (Object.prototype.hasOwnProperty.call(object, key)) {\n object = object[key];\n } else {\n object = {};\n }\n ++stackIndex;\n }\n if (canNotTraverseDeeper(object)) return {};\n return {\n obj: object,\n k: cleanKey(stack[stackIndex])\n };\n};\nconst setPath = (object, path, newValue) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n if (obj !== undefined || path.length === 1) {\n obj[k] = newValue;\n return;\n }\n let e = path[path.length - 1];\n let p = path.slice(0, path.length - 1);\n let last = getLastOfPath(object, p, Object);\n while (last.obj === undefined && p.length) {\n e = `${p[p.length - 1]}.${e}`;\n p = p.slice(0, p.length - 1);\n last = getLastOfPath(object, p, Object);\n if (last?.obj && typeof last.obj[`${last.k}.${e}`] !== 'undefined') {\n last.obj = undefined;\n }\n }\n last.obj[`${last.k}.${e}`] = newValue;\n};\nconst pushPath = (object, path, newValue, concat) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path, Object);\n obj[k] = obj[k] || [];\n obj[k].push(newValue);\n};\nconst getPath = (object, path) => {\n const {\n obj,\n k\n } = getLastOfPath(object, path);\n if (!obj) return undefined;\n if (!Object.prototype.hasOwnProperty.call(obj, k)) return undefined;\n return obj[k];\n};\nconst getPathWithDefaults = (data, defaultData, key) => {\n const value = getPath(data, key);\n if (value !== undefined) {\n return value;\n }\n return getPath(defaultData, key);\n};\nconst deepExtend = (target, source, overwrite) => {\n for (const prop in source) {\n if (prop !== '__proto__' && prop !== 'constructor') {\n if (prop in target) {\n if (isString(target[prop]) || target[prop] instanceof String || isString(source[prop]) || source[prop] instanceof String) {\n if (overwrite) target[prop] = source[prop];\n } else {\n deepExtend(target[prop], source[prop], overwrite);\n }\n } else {\n target[prop] = source[prop];\n }\n }\n }\n return target;\n};\nconst regexEscape = str => str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\nconst _entityMap = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;',\n '/': '&#x2F;'\n};\nconst escape = data => {\n if (isString(data)) {\n return data.replace(/[&<>\"'\\/]/g, s => _entityMap[s]);\n }\n return data;\n};\nclass RegExpCache {\n constructor(capacity) {\n this.capacity = capacity;\n this.regExpMap = new Map();\n this.regExpQueue = [];\n }\n getRegExp(pattern) {\n const regExpFromCache = this.regExpMap.get(pattern);\n if (regExpFromCache !== undefined) {\n return regExpFromCache;\n }\n const regExpNew = new RegExp(pattern);\n if (this.regExpQueue.length === this.capacity) {\n this.regExpMap.delete(this.regExpQueue.shift());\n }\n this.regExpMap.set(pattern, regExpNew);\n this.regExpQueue.push(pattern);\n return regExpNew;\n }\n}\nconst chars = [' ', ',', '?', '!', ';'];\nconst looksLikeObjectPathRegExpCache = new RegExpCache(20);\nconst looksLikeObjectPath = (key, nsSeparator, keySeparator) => {\n nsSeparator = nsSeparator || '';\n keySeparator = keySeparator || '';\n const possibleChars = chars.filter(c => !nsSeparator.includes(c) && !keySeparator.includes(c));\n if (possibleChars.length === 0) return true;\n const r = looksLikeObjectPathRegExpCache.getRegExp(`(${possibleChars.map(c => c === '?' ? '\\\\?' : c).join('|')})`);\n let matched = !r.test(key);\n if (!matched) {\n const ki = key.indexOf(keySeparator);\n if (ki > 0 && !r.test(key.substring(0, ki))) {\n matched = true;\n }\n }\n return matched;\n};\nconst deepFind = (obj, path, keySeparator = '.') => {\n if (!obj) return undefined;\n if (obj[path]) {\n if (!Object.prototype.hasOwnProperty.call(obj, path)) return undefined;\n return obj[path];\n }\n const tokens = path.split(keySeparator);\n let current = obj;\n for (let i = 0; i < tokens.length;) {\n if (!current || typeof current !== 'object') {\n return undefined;\n }\n let next;\n let nextPath = '';\n for (let j = i; j < tokens.length; ++j) {\n if (j !== i) {\n nextPath += keySeparator;\n }\n nextPath += tokens[j];\n next = current[nextPath];\n if (next !== undefined) {\n if (['string', 'number', 'boolean'].includes(typeof next) && j < tokens.length - 1) {\n continue;\n }\n i += j - i + 1;\n break;\n }\n }\n current = next;\n }\n return current;\n};\nconst getCleanedCode = code => code?.replace(/_/g, '-');\n\nconst consoleLogger = {\n type: 'logger',\n log(args) {\n this.output('log', args);\n },\n warn(args) {\n this.output('warn', args);\n },\n error(args) {\n this.output('error', args);\n },\n output(type, args) {\n console?.[type]?.apply?.(console, args);\n }\n};\nclass Logger {\n constructor(concreteLogger, options = {}) {\n this.init(concreteLogger, options);\n }\n init(concreteLogger, options = {}) {\n this.prefix = options.prefix || 'i18next:';\n this.logger = concreteLogger || consoleLogger;\n this.options = options;\n this.debug = options.debug;\n }\n log(...args) {\n return this.forward(args, 'log', '', true);\n }\n warn(...args) {\n return this.forward(args, 'warn', '', true);\n }\n error(...args) {\n return this.forward(args, 'error', '');\n }\n deprecate(...args) {\n return this.forward(args, 'warn', 'WARNING DEPRECATED: ', true);\n }\n forward(args, lvl, prefix, debugOnly) {\n if (debugOnly && !this.debug) return null;\n if (isString(args[0])) args[0] = `${prefix}${this.prefix} ${args[0]}`;\n return this.logger[lvl](args);\n }\n create(moduleName) {\n return new Logger(this.logger, {\n ...{\n prefix: `${this.prefix}:${moduleName}:`\n },\n ...this.options\n });\n }\n clone(options) {\n options = options || this.options;\n options.prefix = options.prefix || this.prefix;\n return new Logger(this.logger, options);\n }\n}\nvar baseLogger = new Logger();\n\nclass EventEmitter {\n constructor() {\n this.observers = {};\n }\n on(events, listener) {\n events.split(' ').forEach(event => {\n if (!this.observers[event]) this.observers[event] = new Map();\n const numListeners = this.observers[event].get(listener) || 0;\n this.observers[event].set(listener, numListeners + 1);\n });\n return this;\n }\n off(event, listener) {\n if (!this.observers[event]) return;\n if (!listener) {\n delete this.observers[event];\n return;\n }\n this.observers[event].delete(listener);\n }\n once(event, listener) {\n const wrapper = (...args) => {\n listener(...args);\n this.off(event, wrapper);\n };\n this.on(event, wrapper);\n return this;\n }\n emit(event, ...args) {\n if (this.observers[event]) {\n const cloned = Array.from(this.observers[event].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(...args);\n }\n });\n }\n if (this.observers['*']) {\n const cloned = Array.from(this.observers['*'].entries());\n cloned.forEach(([observer, numTimesAdded]) => {\n for (let i = 0; i < numTimesAdded; i++) {\n observer(event, ...args);\n }\n });\n }\n }\n}\n\nclass ResourceStore extends EventEmitter {\n constructor(data, options = {\n ns: ['translation'],\n defaultNS: 'translation'\n }) {\n super();\n this.data = data || {};\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n if (this.options.ignoreJSONStructure === undefined) {\n this.options.ignoreJSONStructure = true;\n }\n }\n addNamespaces(ns) {\n if (!this.options.ns.includes(ns)) {\n this.options.ns.push(ns);\n }\n }\n removeNamespaces(ns) {\n const index = this.options.ns.indexOf(ns);\n if (index > -1) {\n this.options.ns.splice(index, 1);\n }\n }\n getResource(lng, ns, key, options = {}) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n const ignoreJSONStructure = options.ignoreJSONStructure !== undefined ? options.ignoreJSONStructure : this.options.ignoreJSONStructure;\n let path;\n if (lng.includes('.')) {\n path = lng.split('.');\n } else {\n path = [lng, ns];\n if (key) {\n if (Array.isArray(key)) {\n path.push(...key);\n } else if (isString(key) && keySeparator) {\n path.push(...key.split(keySeparator));\n } else {\n path.push(key);\n }\n }\n }\n const result = getPath(this.data, path);\n if (!result && !ns && !key && lng.includes('.')) {\n lng = path[0];\n ns = path[1];\n key = path.slice(2).join('.');\n }\n if (result || !ignoreJSONStructure || !isString(key)) return result;\n return deepFind(this.data?.[lng]?.[ns], key, keySeparator);\n }\n addResource(lng, ns, key, value, options = {\n silent: false\n }) {\n const keySeparator = options.keySeparator !== undefined ? options.keySeparator : this.options.keySeparator;\n let path = [lng, ns];\n if (key) path = path.concat(keySeparator ? key.split(keySeparator) : key);\n if (lng.includes('.')) {\n path = lng.split('.');\n value = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n setPath(this.data, path, value);\n if (!options.silent) this.emit('added', lng, ns, key, value);\n }\n addResources(lng, ns, resources, options = {\n silent: false\n }) {\n for (const m in resources) {\n if (isString(resources[m]) || Array.isArray(resources[m])) this.addResource(lng, ns, m, resources[m], {\n silent: true\n });\n }\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n addResourceBundle(lng, ns, resources, deep, overwrite, options = {\n silent: false,\n skipCopy: false\n }) {\n let path = [lng, ns];\n if (lng.includes('.')) {\n path = lng.split('.');\n deep = resources;\n resources = ns;\n ns = path[1];\n }\n this.addNamespaces(ns);\n let pack = getPath(this.data, path) || {};\n if (!options.skipCopy) resources = JSON.parse(JSON.stringify(resources));\n if (deep) {\n deepExtend(pack, resources, overwrite);\n } else {\n pack = {\n ...pack,\n ...resources\n };\n }\n setPath(this.data, path, pack);\n if (!options.silent) this.emit('added', lng, ns, resources);\n }\n removeResourceBundle(lng, ns) {\n if (this.hasResourceBundle(lng, ns)) {\n delete this.data[lng][ns];\n }\n this.removeNamespaces(ns);\n this.emit('removed', lng, ns);\n }\n hasResourceBundle(lng, ns) {\n return this.getResource(lng, ns) !== undefined;\n }\n getResourceBundle(lng, ns) {\n if (!ns) ns = this.options.defaultNS;\n return this.getResource(lng, ns);\n }\n getDataByLanguage(lng) {\n return this.data[lng];\n }\n hasLanguageSomeTranslations(lng) {\n const data = this.getDataByLanguage(lng);\n const n = data && Object.keys(data) || [];\n return !!n.find(v => data[v] && Object.keys(data[v]).length > 0);\n }\n toJSON() {\n return this.data;\n }\n}\n\nvar postProcessor = {\n processors: {},\n addPostProcessor(module) {\n this.processors[module.name] = module;\n },\n handle(processors, value, key, options, translator) {\n processors.forEach(processor => {\n value = this.processors[processor]?.process(value, key, options, translator) ?? value;\n });\n return value;\n }\n};\n\nconst PATH_KEY = Symbol('i18next/PATH_KEY');\nfunction createProxy() {\n const state = [];\n const handler = Object.create(null);\n let proxy;\n handler.get = (target, key) => {\n proxy?.revoke?.();\n if (key === PATH_KEY) return state;\n state.push(key);\n proxy = Proxy.revocable(target, handler);\n return proxy.proxy;\n };\n return Proxy.revocable(Object.create(null), handler).proxy;\n}\nfunction keysFromSelector(selector, opts) {\n const {\n [PATH_KEY]: path\n } = selector(createProxy());\n const keySeparator = opts?.keySeparator ?? '.';\n const nsSeparator = opts?.nsSeparator ?? ':';\n if (path.length > 1 && nsSeparator) {\n const ns = opts?.ns;\n const nsArray = Array.isArray(ns) ? ns : null;\n if (nsArray && nsArray.length > 1 && nsArray.slice(1).includes(path[0])) {\n return `${path[0]}${nsSeparator}${path.slice(1).join(keySeparator)}`;\n }\n }\n return path.join(keySeparator);\n}\n\nconst shouldHandleAsObject = res => !isString(res) && typeof res !== 'boolean' && typeof res !== 'number';\nclass Translator extends EventEmitter {\n constructor(services, options = {}) {\n super();\n copy(['resourceStore', 'languageUtils', 'pluralResolver', 'interpolator', 'backendConnector', 'i18nFormat', 'utils'], services, this);\n this.options = options;\n if (this.options.keySeparator === undefined) {\n this.options.keySeparator = '.';\n }\n this.logger = baseLogger.create('translator');\n this.checkedLoadedFor = {};\n }\n changeLanguage(lng) {\n if (lng) this.language = lng;\n }\n exists(key, o = {\n interpolation: {}\n }) {\n const opt = {\n ...o\n };\n if (key == null) return false;\n const resolved = this.resolve(key, opt);\n if (resolved?.res === undefined) return false;\n const isObject = shouldHandleAsObject(resolved.res);\n if (opt.returnObjects === false && isObject) {\n return false;\n }\n return true;\n }\n extractFromKey(key, opt) {\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n let namespaces = opt.ns || this.options.defaultNS || [];\n const wouldCheckForNsInKey = nsSeparator && key.includes(nsSeparator);\n const seemsNaturalLanguage = !this.options.userDefinedKeySeparator && !opt.keySeparator && !this.options.userDefinedNsSeparator && !opt.nsSeparator && !looksLikeObjectPath(key, nsSeparator, keySeparator);\n if (wouldCheckForNsInKey && !seemsNaturalLanguage) {\n const m = key.match(this.interpolator.nestingRegexp);\n if (m && m.length > 0) {\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n const parts = key.split(nsSeparator);\n if (nsSeparator !== keySeparator || nsSeparator === keySeparator && this.options.ns.includes(parts[0])) namespaces = parts.shift();\n key = parts.join(keySeparator);\n }\n return {\n key,\n namespaces: isString(namespaces) ? [namespaces] : namespaces\n };\n }\n translate(keys, o, lastKey) {\n let opt = typeof o === 'object' ? {\n ...o\n } : o;\n if (typeof opt !== 'object' && this.options.overloadTranslationOptionHandler) {\n opt = this.options.overloadTranslationOptionHandler(arguments);\n }\n if (typeof opt === 'object') opt = {\n ...opt\n };\n if (!opt) opt = {};\n if (keys == null) return '';\n if (typeof keys === 'function') keys = keysFromSelector(keys, {\n ...this.options,\n ...opt\n });\n if (!Array.isArray(keys)) keys = [String(keys)];\n keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : String(k));\n const returnDetails = opt.returnDetails !== undefined ? opt.returnDetails : this.options.returnDetails;\n const keySeparator = opt.keySeparator !== undefined ? opt.keySeparator : this.options.keySeparator;\n const {\n key,\n namespaces\n } = this.extractFromKey(keys[keys.length - 1], opt);\n const namespace = namespaces[namespaces.length - 1];\n let nsSeparator = opt.nsSeparator !== undefined ? opt.nsSeparator : this.options.nsSeparator;\n if (nsSeparator === undefined) nsSeparator = ':';\n const lng = opt.lng || this.language;\n const appendNamespaceToCIMode = opt.appendNamespaceToCIMode || this.options.appendNamespaceToCIMode;\n if (lng?.toLowerCase() === 'cimode') {\n if (appendNamespaceToCIMode) {\n if (returnDetails) {\n return {\n res: `${namespace}${nsSeparator}${key}`,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return `${namespace}${nsSeparator}${key}`;\n }\n if (returnDetails) {\n return {\n res: key,\n usedKey: key,\n exactUsedKey: key,\n usedLng: lng,\n usedNS: namespace,\n usedParams: this.getUsedParamsDetails(opt)\n };\n }\n return key;\n }\n const resolved = this.resolve(keys, opt);\n let res = resolved?.res;\n const resUsedKey = resolved?.usedKey || key;\n const resExactUsedKey = resolved?.exactUsedKey || key;\n const noObject = ['[object Number]', '[object Function]', '[object RegExp]'];\n const joinArrays = opt.joinArrays !== undefined ? opt.joinArrays : this.options.joinArrays;\n const handleAsObjectInI18nFormat = !this.i18nFormat || this.i18nFormat.handleAsObject;\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const hasDefaultValue = Translator.hasDefaultValue(opt);\n const defaultValueSuffix = needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, opt) : '';\n const defaultValueSuffixOrdinalFallback = opt.ordinal && needsPluralHandling ? this.pluralResolver.getSuffix(lng, opt.count, {\n ordinal: false\n }) : '';\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const defaultValue = needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] || opt[`defaultValue${defaultValueSuffix}`] || opt[`defaultValue${defaultValueSuffixOrdinalFallback}`] || opt.defaultValue;\n let resForObjHndl = res;\n if (handleAsObjectInI18nFormat && !res && hasDefaultValue) {\n resForObjHndl = defaultValue;\n }\n const handleAsObject = shouldHandleAsObject(resForObjHndl);\n const resType = Object.prototype.toString.apply(resForObjHndl);\n if (handleAsObjectInI18nFormat && resForObjHndl && handleAsObject && !noObject.includes(resType) && !(isString(joinArrays) && Array.isArray(resForObjHndl))) {\n if (!opt.returnObjects && !this.options.returnObjects) {\n if (!this.options.returnedObjectHandler) {\n this.logger.warn('accessing an object - but returnObjects options is not enabled!');\n }\n const r = this.options.returnedObjectHandler ? this.options.returnedObjectHandler(resUsedKey, resForObjHndl, {\n ...opt,\n ns: namespaces\n }) : `key '${key} (${this.language})' returned an object instead of string.`;\n if (returnDetails) {\n resolved.res = r;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return r;\n }\n if (keySeparator) {\n const resTypeIsArray = Array.isArray(resForObjHndl);\n const copy = resTypeIsArray ? [] : {};\n const newKeyToUse = resTypeIsArray ? resExactUsedKey : resUsedKey;\n for (const m in resForObjHndl) {\n if (Object.prototype.hasOwnProperty.call(resForObjHndl, m)) {\n const deepKey = `${newKeyToUse}${keySeparator}${m}`;\n if (hasDefaultValue && !res) {\n copy[m] = this.translate(deepKey, {\n ...opt,\n defaultValue: shouldHandleAsObject(defaultValue) ? defaultValue[m] : undefined,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n } else {\n copy[m] = this.translate(deepKey, {\n ...opt,\n ...{\n joinArrays: false,\n ns: namespaces\n }\n });\n }\n if (copy[m] === deepKey) copy[m] = resForObjHndl[m];\n }\n }\n res = copy;\n }\n } else if (handleAsObjectInI18nFormat && isString(joinArrays) && Array.isArray(res)) {\n res = res.join(joinArrays);\n if (res) res = this.extendTranslation(res, keys, opt, lastKey);\n } else {\n let usedDefault = false;\n let usedKey = false;\n if (!this.isValidLookup(res) && hasDefaultValue) {\n usedDefault = true;\n res = defaultValue;\n }\n if (!this.isValidLookup(res)) {\n usedKey = true;\n res = key;\n }\n const missingKeyNoValueFallbackToKey = opt.missingKeyNoValueFallbackToKey || this.options.missingKeyNoValueFallbackToKey;\n const resForMissing = missingKeyNoValueFallbackToKey && usedKey ? undefined : res;\n const updateMissing = hasDefaultValue && defaultValue !== res && this.options.updateMissing;\n if (usedKey || usedDefault || updateMissing) {\n this.logger.log(updateMissing ? 'updateKey' : 'missingKey', lng, namespace, key, updateMissing ? defaultValue : res);\n if (keySeparator) {\n const fk = this.resolve(key, {\n ...opt,\n keySeparator: false\n });\n if (fk && fk.res) this.logger.warn('Seems the loaded translations were in flat JSON format instead of nested. Either set keySeparator: false on init or make sure your translations are published in nested format.');\n }\n let lngs = [];\n const fallbackLngs = this.languageUtils.getFallbackCodes(this.options.fallbackLng, opt.lng || this.language);\n if (this.options.saveMissingTo === 'fallback' && fallbackLngs && fallbackLngs[0]) {\n for (let i = 0; i < fallbackLngs.length; i++) {\n lngs.push(fallbackLngs[i]);\n }\n } else if (this.options.saveMissingTo === 'all') {\n lngs = this.languageUtils.toResolveHierarchy(opt.lng || this.language);\n } else {\n lngs.push(opt.lng || this.language);\n }\n const send = (l, k, specificDefaultValue) => {\n const defaultForMissing = hasDefaultValue && specificDefaultValue !== res ? specificDefaultValue : resForMissing;\n if (this.options.missingKeyHandler) {\n this.options.missingKeyHandler(l, namespace, k, defaultForMissing, updateMissing, opt);\n } else if (this.backendConnector?.saveMissing) {\n this.backendConnector.saveMissing(l, namespace, k, defaultForMissing, updateMissing, opt);\n }\n this.emit('missingKey', l, namespace, k, res);\n };\n if (this.options.saveMissing) {\n if (this.options.saveMissingPlurals && needsPluralHandling) {\n lngs.forEach(language => {\n const suffixes = this.pluralResolver.getSuffixes(language, opt);\n if (needsZeroSuffixLookup && opt[`defaultValue${this.options.pluralSeparator}zero`] && !suffixes.includes(`${this.options.pluralSeparator}zero`)) {\n suffixes.push(`${this.options.pluralSeparator}zero`);\n }\n suffixes.forEach(suffix => {\n send([language], key + suffix, opt[`defaultValue${suffix}`] || defaultValue);\n });\n });\n } else {\n send(lngs, key, defaultValue);\n }\n }\n }\n res = this.extendTranslation(res, keys, opt, resolved, lastKey);\n if (usedKey && res === key && this.options.appendNamespaceToMissingKey) {\n res = `${namespace}${nsSeparator}${key}`;\n }\n if ((usedKey || usedDefault) && this.options.parseMissingKeyHandler) {\n res = this.options.parseMissingKeyHandler(this.options.appendNamespaceToMissingKey ? `${namespace}${nsSeparator}${key}` : key, usedDefault ? res : undefined, opt);\n }\n }\n if (returnDetails) {\n resolved.res = res;\n resolved.usedParams = this.getUsedParamsDetails(opt);\n return resolved;\n }\n return res;\n }\n extendTranslation(res, key, opt, resolved, lastKey) {\n if (this.i18nFormat?.parse) {\n res = this.i18nFormat.parse(res, {\n ...this.options.interpolation.defaultVariables,\n ...opt\n }, opt.lng || this.language || resolved.usedLng, resolved.usedNS, resolved.usedKey, {\n resolved\n });\n } else if (!opt.skipInterpolation) {\n if (opt.interpolation) this.interpolator.init({\n ...opt,\n ...{\n interpolation: {\n ...this.options.interpolation,\n ...opt.interpolation\n }\n }\n });\n const skipOnVariables = isString(res) && (opt?.interpolation?.skipOnVariables !== undefined ? opt.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables);\n let nestBef;\n if (skipOnVariables) {\n const nb = res.match(this.interpolator.nestingRegexp);\n nestBef = nb && nb.length;\n }\n let data = opt.replace && !isString(opt.replace) ? opt.replace : opt;\n if (this.options.interpolation.defaultVariables) data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n res = this.interpolator.interpolate(res, data, opt.lng || this.language || resolved.usedLng, opt);\n if (skipOnVariables) {\n const na = res.match(this.interpolator.nestingRegexp);\n const nestAft = na && na.length;\n if (nestBef < nestAft) opt.nest = false;\n }\n if (!opt.lng && resolved && resolved.res) opt.lng = this.language || resolved.usedLng;\n if (opt.nest !== false) res = this.interpolator.nest(res, (...args) => {\n if (lastKey?.[0] === args[0] && !opt.context) {\n this.logger.warn(`It seems you are nesting recursively key: ${args[0]} in key: ${key[0]}`);\n return null;\n }\n return this.translate(...args, key);\n }, opt);\n if (opt.interpolation) this.interpolator.reset();\n }\n const postProcess = opt.postProcess || this.options.postProcess;\n const postProcessorNames = isString(postProcess) ? [postProcess] : postProcess;\n if (res != null && postProcessorNames?.length && opt.applyPostProcessor !== false) {\n res = postProcessor.handle(postProcessorNames, res, key, this.options && this.options.postProcessPassResolved ? {\n i18nResolved: {\n ...resolved,\n usedParams: this.getUsedParamsDetails(opt)\n },\n ...opt\n } : opt, this);\n }\n return res;\n }\n resolve(keys, opt = {}) {\n let found;\n let usedKey;\n let exactUsedKey;\n let usedLng;\n let usedNS;\n if (isString(keys)) keys = [keys];\n if (Array.isArray(keys)) keys = keys.map(k => typeof k === 'function' ? keysFromSelector(k, {\n ...this.options,\n ...opt\n }) : k);\n keys.forEach(k => {\n if (this.isValidLookup(found)) return;\n const extracted = this.extractFromKey(k, opt);\n const key = extracted.key;\n usedKey = key;\n let namespaces = extracted.namespaces;\n if (this.options.fallbackNS) namespaces = namespaces.concat(this.options.fallbackNS);\n const needsPluralHandling = opt.count !== undefined && !isString(opt.count);\n const needsZeroSuffixLookup = needsPluralHandling && !opt.ordinal && opt.count === 0;\n const needsContextHandling = opt.context !== undefined && (isString(opt.context) || typeof opt.context === 'number') && opt.context !== '';\n const codes = opt.lngs ? opt.lngs : this.languageUtils.toResolveHierarchy(opt.lng || this.language, opt.fallbackLng);\n namespaces.forEach(ns => {\n if (this.isValidLookup(found)) return;\n usedNS = ns;\n if (!this.checkedLoadedFor[`${codes[0]}-${ns}`] && this.utils?.hasLoadedNamespace && !this.utils?.hasLoadedNamespace(usedNS)) {\n this.checkedLoadedFor[`${codes[0]}-${ns}`] = true;\n this.logger.warn(`key \"${usedKey}\" for languages \"${codes.join(', ')}\" won't get resolved as namespace \"${usedNS}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n }\n codes.forEach(code => {\n if (this.isValidLookup(found)) return;\n usedLng = code;\n const finalKeys = [key];\n if (this.i18nFormat?.addLookupKeys) {\n this.i18nFormat.addLookupKeys(finalKeys, key, code, ns, opt);\n } else {\n let pluralSuffix;\n if (needsPluralHandling) pluralSuffix = this.pluralResolver.getSuffix(code, opt.count, opt);\n const zeroSuffix = `${this.options.pluralSeparator}zero`;\n const ordinalPrefix = `${this.options.pluralSeparator}ordinal${this.options.pluralSeparator}`;\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(key + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(key + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(key + zeroSuffix);\n }\n }\n if (needsContextHandling) {\n const contextKey = `${key}${this.options.contextSeparator || '_'}${opt.context}`;\n finalKeys.push(contextKey);\n if (needsPluralHandling) {\n if (opt.ordinal && pluralSuffix.startsWith(ordinalPrefix)) {\n finalKeys.push(contextKey + pluralSuffix.replace(ordinalPrefix, this.options.pluralSeparator));\n }\n finalKeys.push(contextKey + pluralSuffix);\n if (needsZeroSuffixLookup) {\n finalKeys.push(contextKey + zeroSuffix);\n }\n }\n }\n }\n let possibleKey;\n while (possibleKey = finalKeys.pop()) {\n if (!this.isValidLookup(found)) {\n exactUsedKey = possibleKey;\n found = this.getResource(code, ns, possibleKey, opt);\n }\n }\n });\n });\n });\n return {\n res: found,\n usedKey,\n exactUsedKey,\n usedLng,\n usedNS\n };\n }\n isValidLookup(res) {\n return res !== undefined && !(!this.options.returnNull && res === null) && !(!this.options.returnEmptyString && res === '');\n }\n getResource(code, ns, key, options = {}) {\n if (this.i18nFormat?.getResource) return this.i18nFormat.getResource(code, ns, key, options);\n return this.resourceStore.getResource(code, ns, key, options);\n }\n getUsedParamsDetails(options = {}) {\n const optionsKeys = ['defaultValue', 'ordinal', 'context', 'replace', 'lng', 'lngs', 'fallbackLng', 'ns', 'keySeparator', 'nsSeparator', 'returnObjects', 'returnDetails', 'joinArrays', 'postProcess', 'interpolation'];\n const useOptionsReplaceForData = options.replace && !isString(options.replace);\n let data = useOptionsReplaceForData ? options.replace : options;\n if (useOptionsReplaceForData && typeof options.count !== 'undefined') {\n data.count = options.count;\n }\n if (this.options.interpolation.defaultVariables) {\n data = {\n ...this.options.interpolation.defaultVariables,\n ...data\n };\n }\n if (!useOptionsReplaceForData) {\n data = {\n ...data\n };\n for (const key of optionsKeys) {\n delete data[key];\n }\n }\n return data;\n }\n static hasDefaultValue(options) {\n const prefix = 'defaultValue';\n for (const option in options) {\n if (Object.prototype.hasOwnProperty.call(options, option) && option.startsWith(prefix) && undefined !== options[option]) {\n return true;\n }\n }\n return false;\n }\n}\n\nclass LanguageUtil {\n constructor(options) {\n this.options = options;\n this.supportedLngs = this.options.supportedLngs || false;\n this.logger = baseLogger.create('languageUtils');\n }\n getScriptPartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return null;\n const p = code.split('-');\n if (p.length === 2) return null;\n p.pop();\n if (p[p.length - 1].toLowerCase() === 'x') return null;\n return this.formatLanguageCode(p.join('-'));\n }\n getLanguagePartFromCode(code) {\n code = getCleanedCode(code);\n if (!code || !code.includes('-')) return code;\n const p = code.split('-');\n return this.formatLanguageCode(p[0]);\n }\n formatLanguageCode(code) {\n if (isString(code) && code.includes('-')) {\n let formattedCode;\n try {\n formattedCode = Intl.getCanonicalLocales(code)[0];\n } catch (e) {}\n if (formattedCode && this.options.lowerCaseLng) {\n formattedCode = formattedCode.toLowerCase();\n }\n if (formattedCode) return formattedCode;\n if (this.options.lowerCaseLng) {\n return code.toLowerCase();\n }\n return code;\n }\n return this.options.cleanCode || this.options.lowerCaseLng ? code.toLowerCase() : code;\n }\n isSupportedCode(code) {\n if (this.options.load === 'languageOnly' || this.options.nonExplicitSupportedLngs) {\n code = this.getLanguagePartFromCode(code);\n }\n return !this.supportedLngs || !this.supportedLngs.length || this.supportedLngs.includes(code);\n }\n getBestMatchFromCodes(codes) {\n if (!codes) return null;\n let found;\n codes.forEach(code => {\n if (found) return;\n const cleanedLng = this.formatLanguageCode(code);\n if (!this.options.supportedLngs || this.isSupportedCode(cleanedLng)) found = cleanedLng;\n });\n if (!found && this.options.supportedLngs) {\n codes.forEach(code => {\n if (found) return;\n const lngScOnly = this.getScriptPartFromCode(code);\n if (this.isSupportedCode(lngScOnly)) return found = lngScOnly;\n const lngOnly = this.getLanguagePartFromCode(code);\n if (this.isSupportedCode(lngOnly)) return found = lngOnly;\n found = this.options.supportedLngs.find(supportedLng => {\n if (supportedLng === lngOnly) return true;\n if (!supportedLng.includes('-') && !lngOnly.includes('-')) return false;\n if (supportedLng.includes('-') && !lngOnly.includes('-') && supportedLng.slice(0, supportedLng.indexOf('-')) === lngOnly) return true;\n if (supportedLng.startsWith(lngOnly) && lngOnly.length > 1) return true;\n return false;\n });\n });\n }\n if (!found) found = this.getFallbackCodes(this.options.fallbackLng)[0];\n return found;\n }\n getFallbackCodes(fallbacks, code) {\n if (!fallbacks) return [];\n if (typeof fallbacks === 'function') fallbacks = fallbacks(code);\n if (isString(fallbacks)) fallbacks = [fallbacks];\n if (Array.isArray(fallbacks)) return fallbacks;\n if (!code) return fallbacks.default || [];\n let found = fallbacks[code];\n if (!found) found = fallbacks[this.getScriptPartFromCode(code)];\n if (!found) found = fallbacks[this.formatLanguageCode(code)];\n if (!found) found = fallbacks[this.getLanguagePartFromCode(code)];\n if (!found) found = fallbacks.default;\n return found || [];\n }\n toResolveHierarchy(code, fallbackCode) {\n const fallbackCodes = this.getFallbackCodes((fallbackCode === false ? [] : fallbackCode) || this.options.fallbackLng || [], code);\n const codes = [];\n const addCode = c => {\n if (!c) return;\n if (this.isSupportedCode(c)) {\n codes.push(c);\n } else {\n this.logger.warn(`rejecting language code not found in supportedLngs: ${c}`);\n }\n };\n if (isString(code) && (code.includes('-') || code.includes('_'))) {\n if (this.options.load !== 'languageOnly') addCode(this.formatLanguageCode(code));\n if (this.options.load !== 'languageOnly' && this.options.load !== 'currentOnly') addCode(this.getScriptPartFromCode(code));\n if (this.options.load !== 'currentOnly') addCode(this.getLanguagePartFromCode(code));\n } else if (isString(code)) {\n addCode(this.formatLanguageCode(code));\n }\n fallbackCodes.forEach(fc => {\n if (!codes.includes(fc)) addCode(this.formatLanguageCode(fc));\n });\n return codes;\n }\n}\n\nconst suffixesOrder = {\n zero: 0,\n one: 1,\n two: 2,\n few: 3,\n many: 4,\n other: 5\n};\nconst dummyRule = {\n select: count => count === 1 ? 'one' : 'other',\n resolvedOptions: () => ({\n pluralCategories: ['one', 'other']\n })\n};\nclass PluralResolver {\n constructor(languageUtils, options = {}) {\n this.languageUtils = languageUtils;\n this.options = options;\n this.logger = baseLogger.create('pluralResolver');\n this.pluralRulesCache = {};\n }\n clearCache() {\n this.pluralRulesCache = {};\n }\n getRule(code, options = {}) {\n const cleanedCode = getCleanedCode(code === 'dev' ? 'en' : code);\n const type = options.ordinal ? 'ordinal' : 'cardinal';\n const cacheKey = JSON.stringify({\n cleanedCode,\n type\n });\n if (cacheKey in this.pluralRulesCache) {\n return this.pluralRulesCache[cacheKey];\n }\n let rule;\n try {\n rule = new Intl.PluralRules(cleanedCode, {\n type\n });\n } catch (err) {\n if (typeof Intl === 'undefined') {\n this.logger.error('No Intl support, please use an Intl polyfill!');\n return dummyRule;\n }\n if (!code.match(/-|_/)) return dummyRule;\n const lngPart = this.languageUtils.getLanguagePartFromCode(code);\n rule = this.getRule(lngPart, options);\n }\n this.pluralRulesCache[cacheKey] = rule;\n return rule;\n }\n needsPlural(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n return rule?.resolvedOptions().pluralCategories.length > 1;\n }\n getPluralFormsOfKey(code, key, options = {}) {\n return this.getSuffixes(code, options).map(suffix => `${key}${suffix}`);\n }\n getSuffixes(code, options = {}) {\n let rule = this.getRule(code, options);\n if (!rule) rule = this.getRule('dev', options);\n if (!rule) return [];\n return rule.resolvedOptions().pluralCategories.sort((pluralCategory1, pluralCategory2) => suffixesOrder[pluralCategory1] - suffixesOrder[pluralCategory2]).map(pluralCategory => `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${pluralCategory}`);\n }\n getSuffix(code, count, options = {}) {\n const rule = this.getRule(code, options);\n if (rule) {\n return `${this.options.prepend}${options.ordinal ? `ordinal${this.options.prepend}` : ''}${rule.select(count)}`;\n }\n this.logger.warn(`no plural rule found for: ${code}`);\n return this.getSuffix('dev', count, options);\n }\n}\n\nconst deepFindWithDefaults = (data, defaultData, key, keySeparator = '.', ignoreJSONStructure = true) => {\n let path = getPathWithDefaults(data, defaultData, key);\n if (!path && ignoreJSONStructure && isString(key)) {\n path = deepFind(data, key, keySeparator);\n if (path === undefined) path = deepFind(defaultData, key, keySeparator);\n }\n return path;\n};\nconst regexSafe = val => val.replace(/\\$/g, '$$$$');\nclass Interpolator {\n constructor(options = {}) {\n this.logger = baseLogger.create('interpolator');\n this.options = options;\n this.format = options?.interpolation?.format || (value => value);\n this.init(options);\n }\n init(options = {}) {\n if (!options.interpolation) options.interpolation = {\n escapeValue: true\n };\n const {\n escape: escape$1,\n escapeValue,\n useRawValueToEscape,\n prefix,\n prefixEscaped,\n suffix,\n suffixEscaped,\n formatSeparator,\n unescapeSuffix,\n unescapePrefix,\n nestingPrefix,\n nestingPrefixEscaped,\n nestingSuffix,\n nestingSuffixEscaped,\n nestingOptionsSeparator,\n maxReplaces,\n alwaysFormat\n } = options.interpolation;\n this.escape = escape$1 !== undefined ? escape$1 : escape;\n this.escapeValue = escapeValue !== undefined ? escapeValue : true;\n this.useRawValueToEscape = useRawValueToEscape !== undefined ? useRawValueToEscape : false;\n this.prefix = prefix ? regexEscape(prefix) : prefixEscaped || '{{';\n this.suffix = suffix ? regexEscape(suffix) : suffixEscaped || '}}';\n this.formatSeparator = formatSeparator || ',';\n this.unescapePrefix = unescapeSuffix ? '' : unescapePrefix || '-';\n this.unescapeSuffix = this.unescapePrefix ? '' : unescapeSuffix || '';\n this.nestingPrefix = nestingPrefix ? regexEscape(nestingPrefix) : nestingPrefixEscaped || regexEscape('$t(');\n this.nestingSuffix = nestingSuffix ? regexEscape(nestingSuffix) : nestingSuffixEscaped || regexEscape(')');\n this.nestingOptionsSeparator = nestingOptionsSeparator || ',';\n this.maxReplaces = maxReplaces || 1000;\n this.alwaysFormat = alwaysFormat !== undefined ? alwaysFormat : false;\n this.resetRegExp();\n }\n reset() {\n if (this.options) this.init(this.options);\n }\n resetRegExp() {\n const getOrResetRegExp = (existingRegExp, pattern) => {\n if (existingRegExp?.source === pattern) {\n existingRegExp.lastIndex = 0;\n return existingRegExp;\n }\n return new RegExp(pattern, 'g');\n };\n this.regexp = getOrResetRegExp(this.regexp, `${this.prefix}(.+?)${this.suffix}`);\n this.regexpUnescape = getOrResetRegExp(this.regexpUnescape, `${this.prefix}${this.unescapePrefix}(.+?)${this.unescapeSuffix}${this.suffix}`);\n this.nestingRegexp = getOrResetRegExp(this.nestingRegexp, `${this.nestingPrefix}((?:[^()\"']+|\"[^\"]*\"|'[^']*'|\\\\((?:[^()]|\"[^\"]*\"|'[^']*')*\\\\))*?)${this.nestingSuffix}`);\n }\n interpolate(str, data, lng, options) {\n let match;\n let value;\n let replaces;\n const defaultData = this.options && this.options.interpolation && this.options.interpolation.defaultVariables || {};\n const handleFormat = key => {\n if (!key.includes(this.formatSeparator)) {\n const path = deepFindWithDefaults(data, defaultData, key, this.options.keySeparator, this.options.ignoreJSONStructure);\n return this.alwaysFormat ? this.format(path, undefined, lng, {\n ...options,\n ...data,\n interpolationkey: key\n }) : path;\n }\n const p = key.split(this.formatSeparator);\n const k = p.shift().trim();\n const f = p.join(this.formatSeparator).trim();\n return this.format(deepFindWithDefaults(data, defaultData, k, this.options.keySeparator, this.options.ignoreJSONStructure), f, lng, {\n ...options,\n ...data,\n interpolationkey: k\n });\n };\n this.resetRegExp();\n const missingInterpolationHandler = options?.missingInterpolationHandler || this.options.missingInterpolationHandler;\n const skipOnVariables = options?.interpolation?.skipOnVariables !== undefined ? options.interpolation.skipOnVariables : this.options.interpolation.skipOnVariables;\n const todos = [{\n regex: this.regexpUnescape,\n safeValue: val => regexSafe(val)\n }, {\n regex: this.regexp,\n safeValue: val => this.escapeValue ? regexSafe(this.escape(val)) : regexSafe(val)\n }];\n todos.forEach(todo => {\n replaces = 0;\n while (match = todo.regex.exec(str)) {\n const matchedVar = match[1].trim();\n value = handleFormat(matchedVar);\n if (value === undefined) {\n if (typeof missingInterpolationHandler === 'function') {\n const temp = missingInterpolationHandler(str, match, options);\n value = isString(temp) ? temp : '';\n } else if (options && Object.prototype.hasOwnProperty.call(options, matchedVar)) {\n value = '';\n } else if (skipOnVariables) {\n value = match[0];\n continue;\n } else {\n this.logger.warn(`missed to pass in variable ${matchedVar} for interpolating ${str}`);\n value = '';\n }\n } else if (!isString(value) && !this.useRawValueToEscape) {\n value = makeString(value);\n }\n const safeValue = todo.safeValue(value);\n str = str.replace(match[0], safeValue);\n if (skipOnVariables) {\n todo.regex.lastIndex += value.length;\n todo.regex.lastIndex -= match[0].length;\n } else {\n todo.regex.lastIndex = 0;\n }\n replaces++;\n if (replaces >= this.maxReplaces) {\n break;\n }\n }\n });\n return str;\n }\n nest(str, fc, options = {}) {\n let match;\n let value;\n let clonedOptions;\n const handleHasOptions = (key, inheritedOptions) => {\n const sep = this.nestingOptionsSeparator;\n if (!key.includes(sep)) return key;\n const c = key.split(new RegExp(`${regexEscape(sep)}[ ]*{`));\n let optionsString = `{${c[1]}`;\n key = c[0];\n optionsString = this.interpolate(optionsString, clonedOptions);\n const matchedSingleQuotes = optionsString.match(/'/g);\n const matchedDoubleQuotes = optionsString.match(/\"/g);\n if ((matchedSingleQuotes?.length ?? 0) % 2 === 0 && !matchedDoubleQuotes || (matchedDoubleQuotes?.length ?? 0) % 2 !== 0) {\n optionsString = optionsString.replace(/'/g, '\"');\n }\n try {\n clonedOptions = JSON.parse(optionsString);\n if (inheritedOptions) clonedOptions = {\n ...inheritedOptions,\n ...clonedOptions\n };\n } catch (e) {\n this.logger.warn(`failed parsing options string in nesting for key ${key}`, e);\n return `${key}${sep}${optionsString}`;\n }\n if (clonedOptions.defaultValue && clonedOptions.defaultValue.includes(this.prefix)) delete clonedOptions.defaultValue;\n return key;\n };\n while (match = this.nestingRegexp.exec(str)) {\n let formatters = [];\n clonedOptions = {\n ...options\n };\n clonedOptions = clonedOptions.replace && !isString(clonedOptions.replace) ? clonedOptions.replace : clonedOptions;\n clonedOptions.applyPostProcessor = false;\n delete clonedOptions.defaultValue;\n const keyEndIndex = /{.*}/.test(match[1]) ? match[1].lastIndexOf('}') + 1 : match[1].indexOf(this.formatSeparator);\n if (keyEndIndex !== -1) {\n formatters = match[1].slice(keyEndIndex).split(this.formatSeparator).map(elem => elem.trim()).filter(Boolean);\n match[1] = match[1].slice(0, keyEndIndex);\n }\n value = fc(handleHasOptions.call(this, match[1].trim(), clonedOptions), clonedOptions);\n if (value && match[0] === str && !isString(value)) return value;\n if (!isString(value)) value = makeString(value);\n if (!value) {\n this.logger.warn(`missed to resolve ${match[1]} for nesting ${str}`);\n value = '';\n }\n if (formatters.length) {\n value = formatters.reduce((v, f) => this.format(v, f, options.lng, {\n ...options,\n interpolationkey: match[1].trim()\n }), value.trim());\n }\n str = str.replace(match[0], value);\n this.regexp.lastIndex = 0;\n }\n return str;\n }\n}\n\nconst parseFormatStr = formatStr => {\n let formatName = formatStr.toLowerCase().trim();\n const formatOptions = {};\n if (formatStr.includes('(')) {\n const p = formatStr.split('(');\n formatName = p[0].toLowerCase().trim();\n const optStr = p[1].slice(0, -1);\n if (formatName === 'currency' && !optStr.includes(':')) {\n if (!formatOptions.currency) formatOptions.currency = optStr.trim();\n } else if (formatName === 'relativetime' && !optStr.includes(':')) {\n if (!formatOptions.range) formatOptions.range = optStr.trim();\n } else {\n const opts = optStr.split(';');\n opts.forEach(opt => {\n if (opt) {\n const [key, ...rest] = opt.split(':');\n const val = rest.join(':').trim().replace(/^'+|'+$/g, '');\n const trimmedKey = key.trim();\n if (!formatOptions[trimmedKey]) formatOptions[trimmedKey] = val;\n if (val === 'false') formatOptions[trimmedKey] = false;\n if (val === 'true') formatOptions[trimmedKey] = true;\n if (!isNaN(val)) formatOptions[trimmedKey] = parseInt(val, 10);\n }\n });\n }\n }\n return {\n formatName,\n formatOptions\n };\n};\nconst createCachedFormatter = fn => {\n const cache = {};\n return (v, l, o) => {\n let optForCache = o;\n if (o && o.interpolationkey && o.formatParams && o.formatParams[o.interpolationkey] && o[o.interpolationkey]) {\n optForCache = {\n ...optForCache,\n [o.interpolationkey]: undefined\n };\n }\n const key = l + JSON.stringify(optForCache);\n let frm = cache[key];\n if (!frm) {\n frm = fn(getCleanedCode(l), o);\n cache[key] = frm;\n }\n return frm(v);\n };\n};\nconst createNonCachedFormatter = fn => (v, l, o) => fn(getCleanedCode(l), o)(v);\nclass Formatter {\n constructor(options = {}) {\n this.logger = baseLogger.create('formatter');\n this.options = options;\n this.init(options);\n }\n init(services, options = {\n interpolation: {}\n }) {\n this.formatSeparator = options.interpolation.formatSeparator || ',';\n const cf = options.cacheInBuiltFormats ? createCachedFormatter : createNonCachedFormatter;\n this.formats = {\n number: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n currency: cf((lng, opt) => {\n const formatter = new Intl.NumberFormat(lng, {\n ...opt,\n style: 'currency'\n });\n return val => formatter.format(val);\n }),\n datetime: cf((lng, opt) => {\n const formatter = new Intl.DateTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n }),\n relativetime: cf((lng, opt) => {\n const formatter = new Intl.RelativeTimeFormat(lng, {\n ...opt\n });\n return val => formatter.format(val, opt.range || 'day');\n }),\n list: cf((lng, opt) => {\n const formatter = new Intl.ListFormat(lng, {\n ...opt\n });\n return val => formatter.format(val);\n })\n };\n }\n add(name, fc) {\n this.formats[name.toLowerCase().trim()] = fc;\n }\n addCached(name, fc) {\n this.formats[name.toLowerCase().trim()] = createCachedFormatter(fc);\n }\n format(value, format, lng, options = {}) {\n if (!format) return value;\n if (value == null) return value;\n const formats = format.split(this.formatSeparator);\n if (formats.length > 1 && formats[0].indexOf('(') > 1 && !formats[0].includes(')') && formats.find(f => f.includes(')'))) {\n const lastIndex = formats.findIndex(f => f.includes(')'));\n formats[0] = [formats[0], ...formats.splice(1, lastIndex)].join(this.formatSeparator);\n }\n const result = formats.reduce((mem, f) => {\n const {\n formatName,\n formatOptions\n } = parseFormatStr(f);\n if (this.formats[formatName]) {\n let formatted = mem;\n try {\n const valOptions = options?.formatParams?.[options.interpolationkey] || {};\n const l = valOptions.locale || valOptions.lng || options.locale || options.lng || lng;\n formatted = this.formats[formatName](mem, l, {\n ...formatOptions,\n ...options,\n ...valOptions\n });\n } catch (error) {\n this.logger.warn(error);\n }\n return formatted;\n } else {\n this.logger.warn(`there was no format function for ${formatName}`);\n }\n return mem;\n }, value);\n return result;\n }\n}\n\nconst removePending = (q, name) => {\n if (q.pending[name] !== undefined) {\n delete q.pending[name];\n q.pendingCount--;\n }\n};\nclass Connector extends EventEmitter {\n constructor(backend, store, services, options = {}) {\n super();\n this.backend = backend;\n this.store = store;\n this.services = services;\n this.languageUtils = services.languageUtils;\n this.options = options;\n this.logger = baseLogger.create('backendConnector');\n this.waitingReads = [];\n this.maxParallelReads = options.maxParallelReads || 10;\n this.readingCalls = 0;\n this.maxRetries = options.maxRetries >= 0 ? options.maxRetries : 5;\n this.retryTimeout = options.retryTimeout >= 1 ? options.retryTimeout : 350;\n this.state = {};\n this.queue = [];\n this.backend?.init?.(services, options.backend, options);\n }\n queueLoad(languages, namespaces, options, callback) {\n const toLoad = {};\n const pending = {};\n const toLoadLanguages = {};\n const toLoadNamespaces = {};\n languages.forEach(lng => {\n let hasAllNamespaces = true;\n namespaces.forEach(ns => {\n const name = `${lng}|${ns}`;\n if (!options.reload && this.store.hasResourceBundle(lng, ns)) {\n this.state[name] = 2;\n } else if (this.state[name] < 0) ; else if (this.state[name] === 1) {\n if (pending[name] === undefined) pending[name] = true;\n } else {\n this.state[name] = 1;\n hasAllNamespaces = false;\n if (pending[name] === undefined) pending[name] = true;\n if (toLoad[name] === undefined) toLoad[name] = true;\n if (toLoadNamespaces[ns] === undefined) toLoadNamespaces[ns] = true;\n }\n });\n if (!hasAllNamespaces) toLoadLanguages[lng] = true;\n });\n if (Object.keys(toLoad).length || Object.keys(pending).length) {\n this.queue.push({\n pending,\n pendingCount: Object.keys(pending).length,\n loaded: {},\n errors: [],\n callback\n });\n }\n return {\n toLoad: Object.keys(toLoad),\n pending: Object.keys(pending),\n toLoadLanguages: Object.keys(toLoadLanguages),\n toLoadNamespaces: Object.keys(toLoadNamespaces)\n };\n }\n loaded(name, err, data) {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n if (err) this.emit('failedLoading', lng, ns, err);\n if (!err && data) {\n this.store.addResourceBundle(lng, ns, data, undefined, undefined, {\n skipCopy: true\n });\n }\n this.state[name] = err ? -1 : 2;\n if (err && data) this.state[name] = 0;\n const loaded = {};\n this.queue.forEach(q => {\n pushPath(q.loaded, [lng], ns);\n removePending(q, name);\n if (err) q.errors.push(err);\n if (q.pendingCount === 0 && !q.done) {\n Object.keys(q.loaded).forEach(l => {\n if (!loaded[l]) loaded[l] = {};\n const loadedKeys = q.loaded[l];\n if (loadedKeys.length) {\n loadedKeys.forEach(n => {\n if (loaded[l][n] === undefined) loaded[l][n] = true;\n });\n }\n });\n q.done = true;\n if (q.errors.length) {\n q.callback(q.errors);\n } else {\n q.callback();\n }\n }\n });\n this.emit('loaded', loaded);\n this.queue = this.queue.filter(q => !q.done);\n }\n read(lng, ns, fcName, tried = 0, wait = this.retryTimeout, callback) {\n if (!lng.length) return callback(null, {});\n if (this.readingCalls >= this.maxParallelReads) {\n this.waitingReads.push({\n lng,\n ns,\n fcName,\n tried,\n wait,\n callback\n });\n return;\n }\n this.readingCalls++;\n const resolver = (err, data) => {\n this.readingCalls--;\n if (this.waitingReads.length > 0) {\n const next = this.waitingReads.shift();\n this.read(next.lng, next.ns, next.fcName, next.tried, next.wait, next.callback);\n }\n if (err && data && tried < this.maxRetries) {\n setTimeout(() => {\n this.read(lng, ns, fcName, tried + 1, wait * 2, callback);\n }, wait);\n return;\n }\n callback(err, data);\n };\n const fc = this.backend[fcName].bind(this.backend);\n if (fc.length === 2) {\n try {\n const r = fc(lng, ns);\n if (r && typeof r.then === 'function') {\n r.then(data => resolver(null, data)).catch(resolver);\n } else {\n resolver(null, r);\n }\n } catch (err) {\n resolver(err);\n }\n return;\n }\n return fc(lng, ns, resolver);\n }\n prepareLoading(languages, namespaces, options = {}, callback) {\n if (!this.backend) {\n this.logger.warn('No backend was added via i18next.use. Will not load resources.');\n return callback && callback();\n }\n if (isString(languages)) languages = this.languageUtils.toResolveHierarchy(languages);\n if (isString(namespaces)) namespaces = [namespaces];\n const toLoad = this.queueLoad(languages, namespaces, options, callback);\n if (!toLoad.toLoad.length) {\n if (!toLoad.pending.length) callback();\n return null;\n }\n toLoad.toLoad.forEach(name => {\n this.loadOne(name);\n });\n }\n load(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {}, callback);\n }\n reload(languages, namespaces, callback) {\n this.prepareLoading(languages, namespaces, {\n reload: true\n }, callback);\n }\n loadOne(name, prefix = '') {\n const s = name.split('|');\n const lng = s[0];\n const ns = s[1];\n this.read(lng, ns, 'read', undefined, undefined, (err, data) => {\n if (err) this.logger.warn(`${prefix}loading namespace ${ns} for language ${lng} failed`, err);\n if (!err && data) this.logger.log(`${prefix}loaded namespace ${ns} for language ${lng}`, data);\n this.loaded(name, err, data);\n });\n }\n saveMissing(languages, namespace, key, fallbackValue, isUpdate, options = {}, clb = () => {}) {\n if (this.services?.utils?.hasLoadedNamespace && !this.services?.utils?.hasLoadedNamespace(namespace)) {\n this.logger.warn(`did not save key \"${key}\" as the namespace \"${namespace}\" was not yet loaded`, 'This means something IS WRONG in your setup. You access the t function before i18next.init / i18next.loadNamespace / i18next.changeLanguage was done. Wait for the callback or Promise to resolve before accessing it!!!');\n return;\n }\n if (key === undefined || key === null || key === '') return;\n if (this.backend?.create) {\n const opts = {\n ...options,\n isUpdate\n };\n const fc = this.backend.create.bind(this.backend);\n if (fc.length < 6) {\n try {\n let r;\n if (fc.length === 5) {\n r = fc(languages, namespace, key, fallbackValue, opts);\n } else {\n r = fc(languages, namespace, key, fallbackValue);\n }\n if (r && typeof r.then === 'function') {\n r.then(data => clb(null, data)).catch(clb);\n } else {\n clb(null, r);\n }\n } catch (err) {\n clb(err);\n }\n } else {\n fc(languages, namespace, key, fallbackValue, clb, opts);\n }\n }\n if (!languages || !languages[0]) return;\n this.store.addResource(languages[0], namespace, key, fallbackValue);\n }\n}\n\nconst get = () => ({\n debug: false,\n initAsync: true,\n ns: ['translation'],\n defaultNS: ['translation'],\n fallbackLng: ['dev'],\n fallbackNS: false,\n supportedLngs: false,\n nonExplicitSupportedLngs: false,\n load: 'all',\n preload: false,\n keySeparator: '.',\n nsSeparator: ':',\n pluralSeparator: '_',\n contextSeparator: '_',\n partialBundledLanguages: false,\n saveMissing: false,\n updateMissing: false,\n saveMissingTo: 'fallback',\n saveMissingPlurals: true,\n missingKeyHandler: false,\n missingInterpolationHandler: false,\n postProcess: false,\n postProcessPassResolved: false,\n returnNull: false,\n returnEmptyString: true,\n returnObjects: false,\n joinArrays: false,\n returnedObjectHandler: false,\n parseMissingKeyHandler: false,\n appendNamespaceToMissingKey: false,\n appendNamespaceToCIMode: false,\n overloadTranslationOptionHandler: args => {\n let ret = {};\n if (typeof args[1] === 'object') ret = args[1];\n if (isString(args[1])) ret.defaultValue = args[1];\n if (isString(args[2])) ret.tDescription = args[2];\n if (typeof args[2] === 'object' || typeof args[3] === 'object') {\n const options = args[3] || args[2];\n Object.keys(options).forEach(key => {\n ret[key] = options[key];\n });\n }\n return ret;\n },\n interpolation: {\n escapeValue: true,\n prefix: '{{',\n suffix: '}}',\n formatSeparator: ',',\n unescapePrefix: '-',\n nestingPrefix: '$t(',\n nestingSuffix: ')',\n nestingOptionsSeparator: ',',\n maxReplaces: 1000,\n skipOnVariables: true\n },\n cacheInBuiltFormats: true\n});\nconst transformOptions = options => {\n if (isString(options.ns)) options.ns = [options.ns];\n if (isString(options.fallbackLng)) options.fallbackLng = [options.fallbackLng];\n if (isString(options.fallbackNS)) options.fallbackNS = [options.fallbackNS];\n if (options.supportedLngs && !options.supportedLngs.includes('cimode')) {\n options.supportedLngs = options.supportedLngs.concat(['cimode']);\n }\n return options;\n};\n\nconst noop = () => {};\nconst bindMemberFunctions = inst => {\n const mems = Object.getOwnPropertyNames(Object.getPrototypeOf(inst));\n mems.forEach(mem => {\n if (typeof inst[mem] === 'function') {\n inst[mem] = inst[mem].bind(inst);\n }\n });\n};\nclass I18n extends EventEmitter {\n constructor(options = {}, callback) {\n super();\n this.options = transformOptions(options);\n this.services = {};\n this.logger = baseLogger;\n this.modules = {\n external: []\n };\n bindMemberFunctions(this);\n if (callback && !this.isInitialized && !options.isClone) {\n if (!this.options.initAsync) {\n this.init(options, callback);\n return this;\n }\n setTimeout(() => {\n this.init(options, callback);\n }, 0);\n }\n }\n init(options = {}, callback) {\n this.isInitializing = true;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n if (options.defaultNS == null && options.ns) {\n if (isString(options.ns)) {\n options.defaultNS = options.ns;\n } else if (!options.ns.includes('translation')) {\n options.defaultNS = options.ns[0];\n }\n }\n const defOpts = get();\n this.options = {\n ...defOpts,\n ...this.options,\n ...transformOptions(options)\n };\n this.options.interpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation\n };\n if (options.keySeparator !== undefined) {\n this.options.userDefinedKeySeparator = options.keySeparator;\n }\n if (options.nsSeparator !== undefined) {\n this.options.userDefinedNsSeparator = options.nsSeparator;\n }\n if (typeof this.options.overloadTranslationOptionHandler !== 'function') {\n this.options.overloadTranslationOptionHandler = defOpts.overloadTranslationOptionHandler;\n }\n const createClassOnDemand = ClassOrObject => {\n if (!ClassOrObject) return null;\n if (typeof ClassOrObject === 'function') return new ClassOrObject();\n return ClassOrObject;\n };\n if (!this.options.isClone) {\n if (this.modules.logger) {\n baseLogger.init(createClassOnDemand(this.modules.logger), this.options);\n } else {\n baseLogger.init(null, this.options);\n }\n let formatter;\n if (this.modules.formatter) {\n formatter = this.modules.formatter;\n } else {\n formatter = Formatter;\n }\n const lu = new LanguageUtil(this.options);\n this.store = new ResourceStore(this.options.resources, this.options);\n const s = this.services;\n s.logger = baseLogger;\n s.resourceStore = this.store;\n s.languageUtils = lu;\n s.pluralResolver = new PluralResolver(lu, {\n prepend: this.options.pluralSeparator\n });\n if (formatter) {\n s.formatter = createClassOnDemand(formatter);\n if (s.formatter.init) s.formatter.init(s, this.options);\n this.options.interpolation.format = s.formatter.format.bind(s.formatter);\n }\n s.interpolator = new Interpolator(this.options);\n s.utils = {\n hasLoadedNamespace: this.hasLoadedNamespace.bind(this)\n };\n s.backendConnector = new Connector(createClassOnDemand(this.modules.backend), s.resourceStore, s, this.options);\n s.backendConnector.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n if (this.modules.languageDetector) {\n s.languageDetector = createClassOnDemand(this.modules.languageDetector);\n if (s.languageDetector.init) s.languageDetector.init(s, this.options.detection, this.options);\n }\n if (this.modules.i18nFormat) {\n s.i18nFormat = createClassOnDemand(this.modules.i18nFormat);\n if (s.i18nFormat.init) s.i18nFormat.init(this);\n }\n this.translator = new Translator(this.services, this.options);\n this.translator.on('*', (event, ...args) => {\n this.emit(event, ...args);\n });\n this.modules.external.forEach(m => {\n if (m.init) m.init(this);\n });\n }\n this.format = this.options.interpolation.format;\n if (!callback) callback = noop;\n if (this.options.fallbackLng && !this.services.languageDetector && !this.options.lng) {\n const codes = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n if (codes.length > 0 && codes[0] !== 'dev') this.options.lng = codes[0];\n }\n if (!this.services.languageDetector && !this.options.lng) {\n this.logger.warn('init: no languageDetector is used and no lng is defined');\n }\n const storeApi = ['getResource', 'hasResourceBundle', 'getResourceBundle', 'getDataByLanguage'];\n storeApi.forEach(fcName => {\n this[fcName] = (...args) => this.store[fcName](...args);\n });\n const storeApiChained = ['addResource', 'addResources', 'addResourceBundle', 'removeResourceBundle'];\n storeApiChained.forEach(fcName => {\n this[fcName] = (...args) => {\n this.store[fcName](...args);\n return this;\n };\n });\n const deferred = defer();\n const load = () => {\n const finish = (err, t) => {\n this.isInitializing = false;\n if (this.isInitialized && !this.initializedStoreOnce) this.logger.warn('init: i18next is already initialized. You should call init just once!');\n this.isInitialized = true;\n if (!this.options.isClone) this.logger.log('initialized', this.options);\n this.emit('initialized', this.options);\n deferred.resolve(t);\n callback(err, t);\n };\n if (this.languages && !this.isInitialized) return finish(null, this.t.bind(this));\n this.changeLanguage(this.options.lng, finish);\n };\n if (this.options.resources || !this.options.initAsync) {\n load();\n } else {\n setTimeout(load, 0);\n }\n return deferred;\n }\n loadResources(language, callback = noop) {\n let usedCallback = callback;\n const usedLng = isString(language) ? language : this.language;\n if (typeof language === 'function') usedCallback = language;\n if (!this.options.resources || this.options.partialBundledLanguages) {\n if (usedLng?.toLowerCase() === 'cimode' && (!this.options.preload || this.options.preload.length === 0)) return usedCallback();\n const toLoad = [];\n const append = lng => {\n if (!lng) return;\n if (lng === 'cimode') return;\n const lngs = this.services.languageUtils.toResolveHierarchy(lng);\n lngs.forEach(l => {\n if (l === 'cimode') return;\n if (!toLoad.includes(l)) toLoad.push(l);\n });\n };\n if (!usedLng) {\n const fallbacks = this.services.languageUtils.getFallbackCodes(this.options.fallbackLng);\n fallbacks.forEach(l => append(l));\n } else {\n append(usedLng);\n }\n this.options.preload?.forEach?.(l => append(l));\n this.services.backendConnector.load(toLoad, this.options.ns, e => {\n if (!e && !this.resolvedLanguage && this.language) this.setResolvedLanguage(this.language);\n usedCallback(e);\n });\n } else {\n usedCallback(null);\n }\n }\n reloadResources(lngs, ns, callback) {\n const deferred = defer();\n if (typeof lngs === 'function') {\n callback = lngs;\n lngs = undefined;\n }\n if (typeof ns === 'function') {\n callback = ns;\n ns = undefined;\n }\n if (!lngs) lngs = this.languages;\n if (!ns) ns = this.options.ns;\n if (!callback) callback = noop;\n this.services.backendConnector.reload(lngs, ns, err => {\n deferred.resolve();\n callback(err);\n });\n return deferred;\n }\n use(module) {\n if (!module) throw new Error('You are passing an undefined module! Please check the object you are passing to i18next.use()');\n if (!module.type) throw new Error('You are passing a wrong module! Please check the object you are passing to i18next.use()');\n if (module.type === 'backend') {\n this.modules.backend = module;\n }\n if (module.type === 'logger' || module.log && module.warn && module.error) {\n this.modules.logger = module;\n }\n if (module.type === 'languageDetector') {\n this.modules.languageDetector = module;\n }\n if (module.type === 'i18nFormat') {\n this.modules.i18nFormat = module;\n }\n if (module.type === 'postProcessor') {\n postProcessor.addPostProcessor(module);\n }\n if (module.type === 'formatter') {\n this.modules.formatter = module;\n }\n if (module.type === '3rdParty') {\n this.modules.external.push(module);\n }\n return this;\n }\n setResolvedLanguage(l) {\n if (!l || !this.languages) return;\n if (['cimode', 'dev'].includes(l)) return;\n for (let li = 0; li < this.languages.length; li++) {\n const lngInLngs = this.languages[li];\n if (['cimode', 'dev'].includes(lngInLngs)) continue;\n if (this.store.hasLanguageSomeTranslations(lngInLngs)) {\n this.resolvedLanguage = lngInLngs;\n break;\n }\n }\n if (!this.resolvedLanguage && !this.languages.includes(l) && this.store.hasLanguageSomeTranslations(l)) {\n this.resolvedLanguage = l;\n this.languages.unshift(l);\n }\n }\n changeLanguage(lng, callback) {\n this.isLanguageChangingTo = lng;\n const deferred = defer();\n this.emit('languageChanging', lng);\n const setLngProps = l => {\n this.language = l;\n this.languages = this.services.languageUtils.toResolveHierarchy(l);\n this.resolvedLanguage = undefined;\n this.setResolvedLanguage(l);\n };\n const done = (err, l) => {\n if (l) {\n if (this.isLanguageChangingTo === lng) {\n setLngProps(l);\n this.translator.changeLanguage(l);\n this.isLanguageChangingTo = undefined;\n this.emit('languageChanged', l);\n this.logger.log('languageChanged', l);\n }\n } else {\n this.isLanguageChangingTo = undefined;\n }\n deferred.resolve((...args) => this.t(...args));\n if (callback) callback(err, (...args) => this.t(...args));\n };\n const setLng = lngs => {\n if (!lng && !lngs && this.services.languageDetector) lngs = [];\n const fl = isString(lngs) ? lngs : lngs && lngs[0];\n const l = this.store.hasLanguageSomeTranslations(fl) ? fl : this.services.languageUtils.getBestMatchFromCodes(isString(lngs) ? [lngs] : lngs);\n if (l) {\n if (!this.language) {\n setLngProps(l);\n }\n if (!this.translator.language) this.translator.changeLanguage(l);\n this.services.languageDetector?.cacheUserLanguage?.(l);\n }\n this.loadResources(l, err => {\n done(err, l);\n });\n };\n if (!lng && this.services.languageDetector && !this.services.languageDetector.async) {\n setLng(this.services.languageDetector.detect());\n } else if (!lng && this.services.languageDetector && this.services.languageDetector.async) {\n if (this.services.languageDetector.detect.length === 0) {\n this.services.languageDetector.detect().then(setLng);\n } else {\n this.services.languageDetector.detect(setLng);\n }\n } else {\n setLng(lng);\n }\n return deferred;\n }\n getFixedT(lng, ns, keyPrefix) {\n const fixedT = (key, opts, ...rest) => {\n let o;\n if (typeof opts !== 'object') {\n o = this.options.overloadTranslationOptionHandler([key, opts].concat(rest));\n } else {\n o = {\n ...opts\n };\n }\n o.lng = o.lng || fixedT.lng;\n o.lngs = o.lngs || fixedT.lngs;\n o.ns = o.ns || fixedT.ns;\n if (o.keyPrefix !== '') o.keyPrefix = o.keyPrefix || keyPrefix || fixedT.keyPrefix;\n const selectorOpts = {\n ...this.options,\n ...o\n };\n if (typeof o.keyPrefix === 'function') o.keyPrefix = keysFromSelector(o.keyPrefix, selectorOpts);\n const keySeparator = this.options.keySeparator || '.';\n let resultKey;\n if (o.keyPrefix && Array.isArray(key)) {\n resultKey = key.map(k => {\n if (typeof k === 'function') k = keysFromSelector(k, selectorOpts);\n return `${o.keyPrefix}${keySeparator}${k}`;\n });\n } else {\n if (typeof key === 'function') key = keysFromSelector(key, selectorOpts);\n resultKey = o.keyPrefix ? `${o.keyPrefix}${keySeparator}${key}` : key;\n }\n return this.t(resultKey, o);\n };\n if (isString(lng)) {\n fixedT.lng = lng;\n } else {\n fixedT.lngs = lng;\n }\n fixedT.ns = ns;\n fixedT.keyPrefix = keyPrefix;\n return fixedT;\n }\n t(...args) {\n return this.translator?.translate(...args);\n }\n exists(...args) {\n return this.translator?.exists(...args);\n }\n setDefaultNamespace(ns) {\n this.options.defaultNS = ns;\n }\n hasLoadedNamespace(ns, options = {}) {\n if (!this.isInitialized) {\n this.logger.warn('hasLoadedNamespace: i18next was not initialized', this.languages);\n return false;\n }\n if (!this.languages || !this.languages.length) {\n this.logger.warn('hasLoadedNamespace: i18n.languages were undefined or empty', this.languages);\n return false;\n }\n const lng = options.lng || this.resolvedLanguage || this.languages[0];\n const fallbackLng = this.options ? this.options.fallbackLng : false;\n const lastLng = this.languages[this.languages.length - 1];\n if (lng.toLowerCase() === 'cimode') return true;\n const loadNotPending = (l, n) => {\n const loadState = this.services.backendConnector.state[`${l}|${n}`];\n return loadState === -1 || loadState === 0 || loadState === 2;\n };\n if (options.precheck) {\n const preResult = options.precheck(this, loadNotPending);\n if (preResult !== undefined) return preResult;\n }\n if (this.hasResourceBundle(lng, ns)) return true;\n if (!this.services.backendConnector.backend || this.options.resources && !this.options.partialBundledLanguages) return true;\n if (loadNotPending(lng, ns) && (!fallbackLng || loadNotPending(lastLng, ns))) return true;\n return false;\n }\n loadNamespaces(ns, callback) {\n const deferred = defer();\n if (!this.options.ns) {\n if (callback) callback();\n return Promise.resolve();\n }\n if (isString(ns)) ns = [ns];\n ns.forEach(n => {\n if (!this.options.ns.includes(n)) this.options.ns.push(n);\n });\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n loadLanguages(lngs, callback) {\n const deferred = defer();\n if (isString(lngs)) lngs = [lngs];\n const preloaded = this.options.preload || [];\n const newLngs = lngs.filter(lng => !preloaded.includes(lng) && this.services.languageUtils.isSupportedCode(lng));\n if (!newLngs.length) {\n if (callback) callback();\n return Promise.resolve();\n }\n this.options.preload = preloaded.concat(newLngs);\n this.loadResources(err => {\n deferred.resolve();\n if (callback) callback(err);\n });\n return deferred;\n }\n dir(lng) {\n if (!lng) lng = this.resolvedLanguage || (this.languages?.length > 0 ? this.languages[0] : this.language);\n if (!lng) return 'rtl';\n try {\n const l = new Intl.Locale(lng);\n if (l && l.getTextInfo) {\n const ti = l.getTextInfo();\n if (ti && ti.direction) return ti.direction;\n }\n } catch (e) {}\n const rtlLngs = ['ar', 'shu', 'sqr', 'ssh', 'xaa', 'yhd', 'yud', 'aao', 'abh', 'abv', 'acm', 'acq', 'acw', 'acx', 'acy', 'adf', 'ads', 'aeb', 'aec', 'afb', 'ajp', 'apc', 'apd', 'arb', 'arq', 'ars', 'ary', 'arz', 'auz', 'avl', 'ayh', 'ayl', 'ayn', 'ayp', 'bbz', 'pga', 'he', 'iw', 'ps', 'pbt', 'pbu', 'pst', 'prp', 'prd', 'ug', 'ur', 'ydd', 'yds', 'yih', 'ji', 'yi', 'hbo', 'men', 'xmn', 'fa', 'jpr', 'peo', 'pes', 'prs', 'dv', 'sam', 'ckb'];\n const languageUtils = this.services?.languageUtils || new LanguageUtil(get());\n if (lng.toLowerCase().indexOf('-latn') > 1) return 'ltr';\n return rtlLngs.includes(languageUtils.getLanguagePartFromCode(lng)) || lng.toLowerCase().indexOf('-arab') > 1 ? 'rtl' : 'ltr';\n }\n static createInstance(options = {}, callback) {\n const instance = new I18n(options, callback);\n instance.createInstance = I18n.createInstance;\n return instance;\n }\n cloneInstance(options = {}, callback = noop) {\n const forkResourceStore = options.forkResourceStore;\n if (forkResourceStore) delete options.forkResourceStore;\n const mergedOptions = {\n ...this.options,\n ...options,\n ...{\n isClone: true\n }\n };\n const clone = new I18n(mergedOptions);\n if (options.debug !== undefined || options.prefix !== undefined) {\n clone.logger = clone.logger.clone(options);\n }\n const membersToCopy = ['store', 'services', 'language'];\n membersToCopy.forEach(m => {\n clone[m] = this[m];\n });\n clone.services = {\n ...this.services\n };\n clone.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n if (forkResourceStore) {\n const clonedData = Object.keys(this.store.data).reduce((prev, l) => {\n prev[l] = {\n ...this.store.data[l]\n };\n prev[l] = Object.keys(prev[l]).reduce((acc, n) => {\n acc[n] = {\n ...prev[l][n]\n };\n return acc;\n }, prev[l]);\n return prev;\n }, {});\n clone.store = new ResourceStore(clonedData, mergedOptions);\n clone.services.resourceStore = clone.store;\n }\n if (options.interpolation) {\n const defOpts = get();\n const mergedInterpolation = {\n ...defOpts.interpolation,\n ...this.options.interpolation,\n ...options.interpolation\n };\n const mergedForInterpolator = {\n ...mergedOptions,\n interpolation: mergedInterpolation\n };\n clone.services.interpolator = new Interpolator(mergedForInterpolator);\n }\n clone.translator = new Translator(clone.services, mergedOptions);\n clone.translator.on('*', (event, ...args) => {\n clone.emit(event, ...args);\n });\n clone.init(mergedOptions, callback);\n clone.translator.options = mergedOptions;\n clone.translator.backendConnector.services.utils = {\n hasLoadedNamespace: clone.hasLoadedNamespace.bind(clone)\n };\n return clone;\n }\n toJSON() {\n return {\n options: this.options,\n store: this.store,\n language: this.language,\n languages: this.languages,\n resolvedLanguage: this.resolvedLanguage\n };\n }\n}\nconst instance = I18n.createInstance();\n\nconst createInstance = instance.createInstance;\nconst dir = instance.dir;\nconst init = instance.init;\nconst loadResources = instance.loadResources;\nconst reloadResources = instance.reloadResources;\nconst use = instance.use;\nconst changeLanguage = instance.changeLanguage;\nconst getFixedT = instance.getFixedT;\nconst t = instance.t;\nconst exists = instance.exists;\nconst setDefaultNamespace = instance.setDefaultNamespace;\nconst hasLoadedNamespace = instance.hasLoadedNamespace;\nconst loadNamespaces = instance.loadNamespaces;\nconst loadLanguages = instance.loadLanguages;\n\nexport { changeLanguage, createInstance, instance as default, dir, exists, getFixedT, hasLoadedNamespace, init, keysFromSelector as keyFromSelector, loadLanguages, loadNamespaces, loadResources, reloadResources, setDefaultNamespace, t, use };\n","","","import process from 'node:process';\nimport i18next, { type InitOptions } from 'i18next';\nimport enUsLocale from './locales/en-US.json' with { type: 'json' };\nimport zhCnLocale from './locales/zh-CN.json' with { type: 'json' };\nimport type {\n WorkflowI18n,\n WorkflowLocale,\n WorkflowLocaleCatalog,\n WorkflowLocaleResource,\n WorkflowMessageValues,\n} from './types.js';\n\nconst builtinLocales = {\n 'en-US': enUsLocale,\n 'zh-CN': zhCnLocale,\n} satisfies WorkflowLocaleCatalog;\n\nconst baseI18nextOptions = {\n defaultNS: 'translation',\n fallbackLng: 'en-US',\n interpolation: {\n escapeValue: false,\n },\n ns: ['translation'],\n showSupportNotice: false,\n} as InitOptions;\n\n/** 将 locale 资源目录转换成 i18next 可读取的 resources */\nfunction toI18nextResources(\n locales: WorkflowLocaleCatalog,\n): Record<string, { translation: WorkflowLocaleResource }> {\n return Object.fromEntries(\n Object.entries(locales).map(([locale, entries]) => [locale, { translation: entries }]),\n );\n}\n\n/** 根据环境变量推断默认语言 */\nexport function detectLocaleFromEnv(): WorkflowLocale {\n const raw =\n process.env.CLACK_KIT_LOCALE ||\n process.env.APP_PROMPT_LOCALE ||\n process.env.MISE_TASK_LOCALE ||\n process.env.LC_ALL ||\n process.env.LC_MESSAGES ||\n process.env.LANG ||\n 'en-US';\n\n return raw.toLowerCase().startsWith('zh') ? 'zh-CN' : 'en-US';\n}\n\n/** 创建一个国际化实例,供 kit 和运行时共享使用 */\nexport function createWorkflowI18n(\n options: {\n fallbackLocale?: WorkflowLocale;\n locale?: WorkflowLocale;\n locales?: WorkflowLocaleCatalog;\n resolveLocale?: () => WorkflowLocale;\n } = {},\n): WorkflowI18n {\n const translator = i18next.createInstance(baseI18nextOptions);\n\n translator.init({\n ...baseI18nextOptions,\n initAsync: false,\n lng: 'en-US',\n resources: toI18nextResources(builtinLocales),\n });\n\n for (const [locale, resource] of Object.entries(options.locales ?? {})) {\n translator.addResourceBundle(locale, 'translation', resource, true, true);\n }\n\n /** 读取 translator 中已经合并完成的完整 locale 资源目录 */\n function getLocales(): WorkflowLocaleCatalog {\n return Object.fromEntries(\n Object.entries(translator.store.data).map(([locale, namespaces]) => [\n locale,\n ((namespaces as { translation?: WorkflowLocaleResource }).translation ??\n {}) as WorkflowLocaleResource,\n ]),\n );\n }\n\n /** 归一化 locale,优先命中显式资源,再回落到内置标准 locale */\n function normalizeLocale(locale: WorkflowLocale): WorkflowLocale {\n const locales = getLocales();\n if (locales[locale]) return locale;\n\n const directMatch = Object.keys(locales).find(\n (candidate) => candidate.toLowerCase() === locale.toLowerCase(),\n );\n if (directMatch) return directMatch;\n\n const lowered = locale.toLowerCase();\n if (lowered.startsWith('zh') && locales['zh-CN']) return 'zh-CN';\n if (lowered.startsWith('en') && locales['en-US']) return 'en-US';\n return locale;\n }\n\n const fallbackLocale = normalizeLocale(options.fallbackLocale ?? 'en-US');\n translator.options.fallbackLng = fallbackLocale;\n\n /** 解析当前应当使用的语言 */\n function getLocale(): WorkflowLocale {\n return normalizeLocale(options.locale ?? options.resolveLocale?.() ?? detectLocaleFromEnv());\n }\n\n /** 按指定语言翻译单条消息 */\n function translate(locale: WorkflowLocale, key: string, params?: WorkflowMessageValues): string {\n return translator.t(key, {\n ...params,\n lng: normalizeLocale(locale),\n });\n }\n\n return {\n fallbackLocale,\n get locale() {\n return getLocale();\n },\n get locales() {\n return getLocales();\n },\n t(key, params) {\n return translate(getLocale(), key, params);\n },\n translate,\n };\n}\n\n/** 方便调用方显式构建 locale 资源目录 */\nexport function createI18nLocales<TCatalog extends WorkflowLocaleCatalog>(\n catalog: TCatalog,\n): TCatalog {\n return catalog;\n}\n\n/** 导出内置 locale 资源目录,便于增量覆盖 */\nexport const builtinWorkflowLocales = builtinLocales;\n\n/** 导出 i18next 基础配置,供工具链和外部集成复用 */\nexport const workflowI18nextOptions = baseI18nextOptions;\n","import { execFileSync } from 'node:child_process';\nimport { existsSync, readFileSync, readlinkSync } from 'node:fs';\nimport process from 'node:process';\nimport type { WorkflowTimeZone } from './types.js';\n\nlet cachedDetectedTimeZone: WorkflowTimeZone | null = null;\n\n/** 根据环境变量或运行时信息推断默认时区 */\nexport function detectTimeZone(): WorkflowTimeZone {\n if (cachedDetectedTimeZone) return cachedDetectedTimeZone;\n\n const detectedFromSystem =\n readTimeZoneFromTimedatectl() ??\n readTimeZoneFromSystemFiles() ??\n readTimeZoneFromIntl() ??\n readTimeZoneFromEnv();\n\n cachedDetectedTimeZone = detectedFromSystem ?? 'UTC';\n return cachedDetectedTimeZone;\n}\n\n/** 判断字符串是否是可被 Intl 接受的合法时区 */\nfunction isValidTimeZone(value: string | undefined): value is WorkflowTimeZone {\n if (!value) return false;\n\n try {\n Intl.DateTimeFormat('en', { timeZone: value });\n return true;\n } catch {\n return false;\n }\n}\n\n/** 优先从 timedatectl 读取系统时区 */\nfunction readTimeZoneFromTimedatectl(): WorkflowTimeZone | null {\n try {\n const raw = execFileSync('timedatectl', ['show', '--property=Timezone', '--value'], {\n encoding: 'utf8',\n stdio: ['ignore', 'pipe', 'ignore'],\n }).trim();\n return isValidTimeZone(raw) ? raw : null;\n } catch {\n return null;\n }\n}\n\n/** 从常见系统文件读取时区 */\nfunction readTimeZoneFromSystemFiles(): WorkflowTimeZone | null {\n const fromTimezoneFile = readTimeZoneFromFile('/etc/timezone');\n if (fromTimezoneFile) return fromTimezoneFile;\n\n try {\n const target = readlinkSync('/etc/localtime');\n const normalized = target.replace(/\\\\/g, '/');\n const markerIndex = normalized.indexOf('/zoneinfo/');\n if (markerIndex === -1) return null;\n\n const zone = normalized.slice(markerIndex + '/zoneinfo/'.length);\n return isValidTimeZone(zone) ? zone : null;\n } catch {\n return null;\n }\n}\n\n/** 从简单文本文件读取时区名 */\nfunction readTimeZoneFromFile(filePath: string): WorkflowTimeZone | null {\n if (!existsSync(filePath)) return null;\n\n try {\n const raw = readFileSync(filePath, 'utf8').trim();\n return isValidTimeZone(raw) ? raw : null;\n } catch {\n return null;\n }\n}\n\n/** 回退到运行时 Intl 的时区判断 */\nfunction readTimeZoneFromIntl(): WorkflowTimeZone | null {\n const detected = Intl.DateTimeFormat().resolvedOptions().timeZone;\n return isValidTimeZone(detected) ? detected : null;\n}\n\n/** 最后再读取进程环境变量中的 TZ */\nfunction readTimeZoneFromEnv(): WorkflowTimeZone | null {\n return isValidTimeZone(process.env.TZ) ? process.env.TZ : null;\n}\n","import { randomUUID } from 'node:crypto';\nimport { mkdir, readFile, rename, rm, writeFile } from 'node:fs/promises';\nimport { dirname } from 'node:path';\n\n/** 判断未知错误是否表示“文件不存在” */\nfunction isFileNotFoundError(error: unknown): error is NodeJS.ErrnoException {\n return (\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'ENOENT'\n );\n}\n\n/** 构造带上下文的 JSON 文档读取错误 */\nfunction createDocumentReadError(\n filePath: string,\n storeName: string,\n reason: string,\n cause?: unknown,\n): Error {\n return new Error(`Failed to read ${storeName} at \"${filePath}\": ${reason}.`, {\n ...(cause === undefined ? {} : { cause }),\n });\n}\n\n/** 构造带上下文的 JSON 文档写入错误 */\nfunction createDocumentWriteError(filePath: string, reason: string, cause?: unknown): Error {\n return new Error(`Failed to write JSON document at \"${filePath}\": ${reason}.`, {\n ...(cause === undefined ? {} : { cause }),\n });\n}\n\n/** 等待指定毫秒数,供文件锁轮询复用 */\nasync function delay(milliseconds: number): Promise<void> {\n await new Promise((resolve) => setTimeout(resolve, milliseconds));\n}\n\n/** 基于锁目录串行化同一路径的文档访问,避免并发读写看见半截 JSON */\nasync function withDocumentLock<TValue>(\n filePath: string,\n action: () => Promise<TValue>,\n): Promise<TValue> {\n const lockPath = `${filePath}.lock`;\n await mkdir(dirname(lockPath), { recursive: true });\n\n for (let attempt = 0; ; attempt += 1) {\n try {\n await mkdir(lockPath);\n break;\n } catch (error) {\n if (\n !(\n typeof error === 'object' &&\n error !== null &&\n 'code' in error &&\n (error as NodeJS.ErrnoException).code === 'EEXIST'\n )\n ) {\n throw createDocumentWriteError(filePath, 'unable to acquire lock', error);\n }\n if (attempt >= 199) {\n throw createDocumentWriteError(filePath, 'timed out waiting for document lock');\n }\n await delay(10);\n }\n }\n\n try {\n return await action();\n } finally {\n await rm(lockPath, { force: true, recursive: true });\n }\n}\n\n/** 在持锁状态下读取并校验数组型 JSON 文档 */\nasync function readJsonArrayDocumentUnlocked<TItem>(options: {\n filePath: string;\n itemName: string;\n key: string;\n validate: (value: unknown) => value is TItem;\n}): Promise<TItem[]> {\n let raw: string;\n\n try {\n raw = await readFile(options.filePath, 'utf8');\n } catch (error) {\n if (isFileNotFoundError(error)) return [];\n throw createDocumentReadError(options.filePath, options.itemName, 'unable to read file', error);\n }\n\n let parsed: unknown;\n try {\n parsed = JSON.parse(raw) as unknown;\n } catch (error) {\n throw createDocumentReadError(options.filePath, options.itemName, 'invalid JSON', error);\n }\n\n if (!parsed || typeof parsed !== 'object' || Array.isArray(parsed)) {\n throw createDocumentReadError(\n options.filePath,\n options.itemName,\n 'document root must be a non-array object',\n );\n }\n\n const entries = (parsed as Record<string, unknown>)[options.key];\n if (!Array.isArray(entries)) {\n throw createDocumentReadError(\n options.filePath,\n options.itemName,\n `expected \"${options.key}\" to be an array`,\n );\n }\n\n const invalidIndex = entries.findIndex((entry) => !options.validate(entry));\n if (invalidIndex !== -1) {\n throw createDocumentReadError(\n options.filePath,\n options.itemName,\n `entry ${invalidIndex} has an invalid shape`,\n );\n }\n\n return entries;\n}\n\n/** 在持锁状态下以原子替换方式写回数组型 JSON 文档 */\nasync function writeJsonArrayDocumentUnlocked<TItem>(options: {\n filePath: string;\n items: readonly TItem[];\n key: string;\n}): Promise<void> {\n await mkdir(dirname(options.filePath), { recursive: true });\n const temporaryFilePath = `${options.filePath}.${randomUUID()}.tmp`;\n\n try {\n await writeFile(\n temporaryFilePath,\n `${JSON.stringify({ [options.key]: options.items }, null, 2)}\\n`,\n 'utf8',\n );\n await rename(temporaryFilePath, options.filePath);\n } catch (error) {\n await rm(temporaryFilePath, { force: true });\n throw createDocumentWriteError(options.filePath, 'unable to persist document', error);\n }\n}\n\n/** 从磁盘读取一个“单数组字段”JSON 文档;缺失文件时返回空数组,损坏数据时显式抛错 */\nexport async function readJsonArrayDocument<TItem>(options: {\n filePath: string;\n itemName: string;\n key: string;\n validate: (value: unknown) => value is TItem;\n}): Promise<TItem[]> {\n return withDocumentLock(\n options.filePath,\n async () => await readJsonArrayDocumentUnlocked(options),\n );\n}\n\n/** 在持锁状态下完成“读-改-写”更新,避免并发覆盖 */\nexport async function updateJsonArrayDocument<TItem>(options: {\n filePath: string;\n itemName: string;\n key: string;\n update: (items: TItem[]) => Promise<readonly TItem[]> | readonly TItem[];\n validate: (value: unknown) => value is TItem;\n}): Promise<TItem[]> {\n return withDocumentLock(options.filePath, async () => {\n const currentItems = await readJsonArrayDocumentUnlocked(options);\n const nextItems = [...(await options.update(currentItems))];\n await writeJsonArrayDocumentUnlocked({\n filePath: options.filePath,\n items: nextItems,\n key: options.key,\n });\n return nextItems;\n });\n}\n","import type { WorkflowCheckpointEntry, WorkflowCheckpointStore } from '../shared/types.js';\nimport { readJsonArrayDocument, updateJsonArrayDocument } from './file-document.js';\n\ninterface FileCheckpointStoreDocument {\n checkpoints: WorkflowCheckpointEntry[];\n}\n\ninterface FileCheckpointStoreOptions {\n filePath: string;\n}\n\n/** 判断未知值是否符合 checkpoint 结构 */\nfunction isCheckpointEntry(value: unknown): value is WorkflowCheckpointEntry {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Partial<WorkflowCheckpointEntry>;\n return (\n Array.isArray(candidate.completedStepIds) &&\n typeof candidate.locale === 'string' &&\n (candidate.timeZone === undefined || typeof candidate.timeZone === 'string') &&\n (candidate.reason === undefined ||\n candidate.reason === 'cancelled' ||\n candidate.reason === 'failed') &&\n typeof candidate.results === 'object' &&\n candidate.results !== null &&\n typeof candidate.runId === 'string' &&\n typeof candidate.timestamp === 'string' &&\n typeof candidate.values === 'object' &&\n candidate.values !== null &&\n typeof candidate.workflowId === 'string'\n );\n}\n\n/** 从磁盘读取 checkpoint 文档;缺失文件时回退为空,损坏数据时显式抛错 */\nasync function readCheckpointDocument(filePath: string): Promise<FileCheckpointStoreDocument> {\n return {\n checkpoints: await readJsonArrayDocument({\n filePath,\n itemName: 'workflow checkpoint store',\n key: 'checkpoints',\n validate: isCheckpointEntry,\n }),\n };\n}\n\n/** 过滤掉某个 workflow 下需要清理的 checkpoint */\nfunction filterCheckpointEntries(\n entries: readonly WorkflowCheckpointEntry[],\n workflowId: string,\n runId?: string,\n): WorkflowCheckpointEntry[] {\n return entries.filter((entry) => {\n if (entry.workflowId !== workflowId) return true;\n if (runId === undefined) return false;\n return entry.runId !== runId;\n });\n}\n\n/** 将一条 checkpoint 置顶保存,并移除同 workflow 的旧记录 */\nfunction mergeCheckpointEntry(\n entries: readonly WorkflowCheckpointEntry[],\n entry: WorkflowCheckpointEntry,\n): WorkflowCheckpointEntry[] {\n return [entry, ...entries.filter((candidate) => candidate.workflowId !== entry.workflowId)];\n}\n\n/** 创建一个基于本地 JSON 文件的 checkpoint 存储 */\nexport function createFileCheckpointStore(\n options: FileCheckpointStoreOptions,\n): WorkflowCheckpointStore {\n /** 清理某个 workflow 的 checkpoint */\n async function clear(workflowId: string, runId?: string): Promise<void> {\n await updateJsonArrayDocument({\n filePath: options.filePath,\n itemName: 'workflow checkpoint store',\n key: 'checkpoints',\n update(entries) {\n return filterCheckpointEntries(entries, workflowId, runId);\n },\n validate: isCheckpointEntry,\n });\n }\n\n /** 读取最近一次 checkpoint */\n async function getLatest<TValues extends Record<string, unknown>>(\n workflowId: string,\n ): Promise<WorkflowCheckpointEntry<TValues> | null> {\n const document = await readCheckpointDocument(options.filePath);\n return (\n (document.checkpoints.find((entry) => entry.workflowId === workflowId) as\n | WorkflowCheckpointEntry<TValues>\n | undefined) ?? null\n );\n }\n\n /** 保存 checkpoint */\n async function save<TValues extends Record<string, unknown>>(\n entry: WorkflowCheckpointEntry<TValues>,\n ): Promise<void> {\n await updateJsonArrayDocument({\n filePath: options.filePath,\n itemName: 'workflow checkpoint store',\n key: 'checkpoints',\n update(entries) {\n return mergeCheckpointEntry(entries, entry as WorkflowCheckpointEntry);\n },\n validate: isCheckpointEntry,\n });\n }\n\n return {\n clear,\n getLatest,\n save,\n };\n}\n\n/** 创建一个仅保存在内存中的 checkpoint 存储 */\nexport function createMemoryCheckpointStore(): WorkflowCheckpointStore & {\n checkpoints: WorkflowCheckpointEntry[];\n} {\n const checkpoints: WorkflowCheckpointEntry[] = [];\n\n /** 清理某个 workflow 的 checkpoint */\n async function clear(workflowId: string, runId?: string): Promise<void> {\n const filtered = filterCheckpointEntries(checkpoints, workflowId, runId);\n\n checkpoints.splice(0, checkpoints.length, ...filtered);\n }\n\n /** 读取最近一次 checkpoint */\n async function getLatest<TValues extends Record<string, unknown>>(\n workflowId: string,\n ): Promise<WorkflowCheckpointEntry<TValues> | null> {\n return (\n (checkpoints.find((entry) => entry.workflowId === workflowId) as\n | WorkflowCheckpointEntry<TValues>\n | undefined) ?? null\n );\n }\n\n /** 保存 checkpoint */\n async function save<TValues extends Record<string, unknown>>(\n entry: WorkflowCheckpointEntry<TValues>,\n ): Promise<void> {\n checkpoints.splice(\n 0,\n checkpoints.length,\n ...mergeCheckpointEntry(checkpoints, entry as WorkflowCheckpointEntry),\n );\n }\n\n return {\n checkpoints,\n clear,\n getLatest,\n save,\n };\n}\n","import type {\n WorkflowHistoryStore,\n WorkflowSnapshotEntry,\n WorkflowSnapshotQuery,\n} from '../shared/types.js';\nimport { readJsonArrayDocument, updateJsonArrayDocument } from './file-document.js';\n\ninterface FileHistoryStoreDocument {\n snapshots: WorkflowSnapshotEntry[];\n}\n\ninterface FileHistoryStoreOptions {\n filePath: string;\n maxSnapshotsPerWorkflow?: number;\n}\n\n/** 判断未知值是否符合工作流快照结构 */\nfunction isSnapshotEntry(value: unknown): value is WorkflowSnapshotEntry {\n if (!value || typeof value !== 'object') return false;\n\n const candidate = value as Partial<WorkflowSnapshotEntry>;\n return (\n typeof candidate.label === 'string' &&\n typeof candidate.locale === 'string' &&\n (candidate.timeZone === undefined || typeof candidate.timeZone === 'string') &&\n typeof candidate.timestamp === 'string' &&\n typeof candidate.workflowId === 'string' &&\n typeof candidate.values === 'object' &&\n candidate.values !== null\n );\n}\n\n/** 从磁盘读取历史文档;缺失文件时回退为空,损坏数据时显式抛错 */\nasync function readHistoryDocument(filePath: string): Promise<FileHistoryStoreDocument> {\n return {\n snapshots: await readJsonArrayDocument({\n filePath,\n itemName: 'workflow history store',\n key: 'snapshots',\n validate: isSnapshotEntry,\n }),\n };\n}\n\n/** 按“工作流”维度裁剪快照数量 */\nfunction trimSnapshotEntries(\n entries: WorkflowSnapshotEntry[],\n limit: number,\n): WorkflowSnapshotEntry[] {\n const counts = new Map<string, number>();\n\n return entries.filter((entry) => {\n const currentCount = counts.get(entry.workflowId) ?? 0;\n if (currentCount >= limit) return false;\n\n counts.set(entry.workflowId, currentCount + 1);\n return true;\n });\n}\n\n/** 创建一个基于本地 JSON 文件的历史存储 */\nexport function createFileHistoryStore(options: FileHistoryStoreOptions): WorkflowHistoryStore {\n const maxSnapshotsPerWorkflow = options.maxSnapshotsPerWorkflow ?? 20;\n\n /** 查询工作流快照 */\n async function listSnapshots<TValues extends Record<string, unknown>>(\n query: WorkflowSnapshotQuery,\n ): Promise<WorkflowSnapshotEntry<TValues>[]> {\n const document = await readHistoryDocument(options.filePath);\n return document.snapshots\n .filter((entry) => entry.workflowId === query.workflowId)\n .slice(0, query.limit) as WorkflowSnapshotEntry<TValues>[];\n }\n\n /** 保存工作流快照 */\n async function saveSnapshot<TValues extends Record<string, unknown>>(\n entry: WorkflowSnapshotEntry<TValues>,\n saveOptions?: { maxSnapshotsPerWorkflow?: number },\n ): Promise<void> {\n await updateJsonArrayDocument({\n filePath: options.filePath,\n itemName: 'workflow history store',\n key: 'snapshots',\n update(entries) {\n return trimSnapshotEntries(\n [entry as WorkflowSnapshotEntry, ...entries],\n saveOptions?.maxSnapshotsPerWorkflow ?? maxSnapshotsPerWorkflow,\n );\n },\n validate: isSnapshotEntry,\n });\n }\n\n return {\n listSnapshots,\n saveSnapshot,\n };\n}\n\n/** 创建一个仅保存在内存中的历史存储,适合测试和短生命周期脚本 */\nexport function createMemoryHistoryStore(): WorkflowHistoryStore {\n const snapshots: WorkflowSnapshotEntry[] = [];\n\n /** 查询工作流快照 */\n async function listSnapshots<TValues extends Record<string, unknown>>(\n query: WorkflowSnapshotQuery,\n ): Promise<WorkflowSnapshotEntry<TValues>[]> {\n return snapshots\n .filter((entry) => entry.workflowId === query.workflowId)\n .slice(0, query.limit) as WorkflowSnapshotEntry<TValues>[];\n }\n\n /** 保存工作流快照 */\n async function saveSnapshot<TValues extends Record<string, unknown>>(\n entry: WorkflowSnapshotEntry<TValues>,\n saveOptions?: { maxSnapshotsPerWorkflow?: number },\n ): Promise<void> {\n snapshots.unshift(entry as WorkflowSnapshotEntry);\n const trimmed = trimSnapshotEntries(snapshots, saveOptions?.maxSnapshotsPerWorkflow ?? 20);\n snapshots.splice(0, snapshots.length, ...trimmed);\n }\n\n return {\n listSnapshots,\n saveSnapshot,\n };\n}\n","import { mkdir, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport { formatPromptValue, sanitizeFileName } from '../shared/helpers.js';\nimport type {\n WorkflowLogFormat,\n WorkflowLogStore,\n WorkflowRunAnalysis,\n WorkflowRunEvent,\n WorkflowRunSnapshot,\n WorkflowRunStatus,\n} from '../shared/types.js';\n\nconst LOG_TIMESTAMP_PATTERN = /[:.]/g;\n\ninterface FileLogStoreOptions {\n directory: string;\n fileName?: (snapshot: WorkflowRunSnapshot) => string;\n format?: WorkflowLogFormat;\n}\n\ninterface WorkflowLogSession<TValues extends Record<string, unknown>> {\n complete: (\n status: WorkflowRunStatus,\n values: Partial<TValues>,\n results: Partial<Record<string, unknown>>,\n ) => void;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n save: (options?: { path?: string }) => Promise<string>;\n snapshot: () => WorkflowRunSnapshot<TValues>;\n}\n\n/** 解析日志文件输出路径,并确保落在日志目录内 */\nfunction resolveLogSavePath(directory: string, candidate: string): string {\n if (path.isAbsolute(candidate)) {\n throw new Error('Log save path must be relative to the configured log directory');\n }\n\n const resolvedDirectory = path.resolve(directory);\n const resolvedPath = path.resolve(directory, candidate);\n const relativePath = path.relative(resolvedDirectory, resolvedPath);\n if (\n relativePath === '' ||\n relativePath === '.' ||\n relativePath === '..' ||\n relativePath.startsWith(`..${path.sep}`) ||\n path.isAbsolute(relativePath)\n ) {\n throw new Error('Log save path must stay within the configured log directory');\n }\n\n return resolvedPath;\n}\n\n/** 把 ISO 时间格式化为带时区的稳定字符串 */\nfunction formatPrettyTimestamp(locale: string, timeZone: string, timestamp: string): string {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n hour: '2-digit',\n hour12: false,\n minute: '2-digit',\n month: '2-digit',\n second: '2-digit',\n timeZone,\n year: 'numeric',\n });\n const parts = formatter.formatToParts(new Date(timestamp));\n const values = Object.fromEntries(parts.map((part) => [part.type, part.value]));\n return `${values.year}-${values.month}-${values.day} ${values.hour}:${values.minute}:${values.second} (${timeZone})`;\n } catch {\n return `${timestamp} (${timeZone})`;\n }\n}\n\n/** 将单条事件渲染为便于人类阅读的行文本 */\nfunction renderPrettyEvent(snapshot: WorkflowRunSnapshot, event: WorkflowRunEvent): string {\n const segments = [\n `[${formatPrettyTimestamp(snapshot.locale, snapshot.timeZone, event.timestamp)}]`,\n `[${event.type}]`,\n ];\n if (event.level) segments.push(`[${event.level}]`);\n if (event.stepId) segments.push(`${event.stepId}:`);\n if (event.message) segments.push(event.message);\n if (event.data !== undefined) segments.push(`data=${formatPromptValue(event.data)}`);\n return segments.join(' ');\n}\n\n/** 将事件转换成 ECS 风格的单行 JSON */\nfunction toEcsLogLine(snapshot: WorkflowRunSnapshot, event: WorkflowRunEvent): string {\n const payload: Record<string, unknown> = {\n '@timestamp': event.timestamp,\n event: {\n category: ['application'],\n kind: 'event',\n type: [event.type],\n },\n labels: {\n locale: snapshot.locale,\n runId: snapshot.runId,\n status: snapshot.status,\n timeZone: snapshot.timeZone,\n workflowId: snapshot.workflowId,\n ...(event.stepId ? { stepId: event.stepId } : {}),\n },\n log: {\n level: event.level ?? 'info',\n logger: 'clack-kit.workflow',\n },\n message: event.message ?? event.type,\n service: {\n name: 'clack-kit',\n type: 'cli',\n },\n };\n\n if (event.data !== undefined) payload.clack = { data: event.data };\n if (snapshot.meta !== undefined) payload.metadata = snapshot.meta;\n\n return JSON.stringify(payload);\n}\n\n/** 计算单次运行的分析摘要 */\nexport function analyzeWorkflowRun(snapshot: WorkflowRunSnapshot): WorkflowRunAnalysis {\n const steps = {} as Record<\n string,\n { attempts: number; durationMs: number; startAt?: number; status: 'completed' | 'skipped' }\n >;\n const startedAt = new Date(snapshot.startedAt).getTime();\n const endedAt = new Date(snapshot.endedAt ?? snapshot.startedAt).getTime();\n\n for (const event of snapshot.events) {\n if (!event.stepId) continue;\n\n if (event.type === 'step-started') {\n steps[event.stepId] = {\n attempts: 1,\n durationMs: 0,\n startAt: new Date(event.timestamp).getTime(),\n status: 'completed',\n };\n continue;\n }\n\n if (event.type === 'step-retried') {\n const existing = steps[event.stepId];\n if (existing) {\n existing.attempts += 1;\n } else {\n steps[event.stepId] = {\n attempts: 2,\n durationMs: 0,\n status: 'completed',\n };\n }\n continue;\n }\n\n if (event.type === 'step-skipped') {\n steps[event.stepId] = {\n attempts: 0,\n durationMs: 0,\n status: 'skipped',\n };\n continue;\n }\n\n if (event.type === 'step-completed') {\n const existing = steps[event.stepId];\n const completedAt = new Date(event.timestamp).getTime();\n if (existing) {\n existing.durationMs = Math.max(0, completedAt - (existing.startAt ?? completedAt));\n existing.status = 'completed';\n delete existing.startAt;\n } else {\n steps[event.stepId] = {\n attempts: 1,\n durationMs: 0,\n status: 'completed',\n };\n }\n }\n }\n\n return {\n steps: Object.fromEntries(\n Object.entries(steps).map(([stepId, analysis]) => [\n stepId,\n {\n attempts: analysis.attempts,\n durationMs: analysis.durationMs,\n status: analysis.status,\n },\n ]),\n ),\n totalDurationMs: Math.max(0, endedAt - startedAt),\n };\n}\n\n/** 将任意可序列化字段渲染为缩进后的多行块,方便人类阅读日志 */\nfunction renderPrettyBlock(label: string, value: unknown): string[] {\n const rendered = JSON.stringify(value, null, 2)?.split('\\n') ?? [];\n if (rendered.length === 0) return [`${label}: {}`];\n return [`${label}:`, ...rendered.map((line) => ` ${line}`)];\n}\n\n/** 渲染 pretty 格式的整份工作流日志 */\nfunction renderPrettyLog(snapshot: WorkflowRunSnapshot): string {\n const lines = [\n '# clack-kit workflow log',\n `workflowId: ${snapshot.workflowId}`,\n `runId: ${snapshot.runId}`,\n `status: ${snapshot.status}`,\n `locale: ${snapshot.locale}`,\n `timeZone: ${snapshot.timeZone}`,\n `startedAt: ${formatPrettyTimestamp(snapshot.locale, snapshot.timeZone, snapshot.startedAt)}`,\n ];\n\n if (snapshot.endedAt)\n lines.push(\n `endedAt: ${formatPrettyTimestamp(snapshot.locale, snapshot.timeZone, snapshot.endedAt)}`,\n );\n if (snapshot.meta && Object.keys(snapshot.meta).length > 0)\n lines.push(...renderPrettyBlock('meta', snapshot.meta));\n lines.push(...renderPrettyBlock('analysis', snapshot.analysis));\n if (Object.keys(snapshot.values).length > 0)\n lines.push(...renderPrettyBlock('values', snapshot.values));\n if (Object.keys(snapshot.results).length > 0)\n lines.push(...renderPrettyBlock('results', snapshot.results));\n\n lines.push('', ...snapshot.events.map((event) => renderPrettyEvent(snapshot, event)), '');\n return `${lines.join('\\n')}\\n`;\n}\n\n/** 将运行快照渲染成指定日志格式 */\nexport function renderWorkflowLog(\n snapshot: WorkflowRunSnapshot,\n format: WorkflowLogFormat = 'pretty',\n): string {\n if (format === 'ecs-ndjson')\n return `${snapshot.events.map((event) => toEcsLogLine(snapshot, event)).join('\\n')}\\n`;\n\n return renderPrettyLog(snapshot);\n}\n\n/** 创建一个写入本地文件的日志存储 */\nexport function createFileLogStore(options: FileLogStoreOptions): WorkflowLogStore {\n const format = options.format ?? 'pretty';\n\n /** 将快照保存到磁盘 */\n async function save<TValues extends Record<string, unknown>>(\n snapshot: WorkflowRunSnapshot<TValues>,\n saveOptions?: { path?: string },\n ): Promise<string> {\n await mkdir(options.directory, { recursive: true });\n\n const resolvedFileName =\n options.fileName?.(snapshot) ??\n `${sanitizeFileName(snapshot.workflowId)}-${snapshot.startedAt.replace(LOG_TIMESTAMP_PATTERN, '-')}.${format === 'ecs-ndjson' ? 'jsonl' : 'log'}`;\n const fileName = resolveLogSavePath(options.directory, saveOptions?.path ?? resolvedFileName);\n\n await mkdir(path.dirname(fileName), { recursive: true });\n await writeFile(fileName, renderWorkflowLog(snapshot, format), 'utf8');\n return fileName;\n }\n\n return { save };\n}\n\n/** 创建一个空实现的日志存储 */\nexport function createNoopLogStore(): WorkflowLogStore {\n /** 返回空路径,保持调用方接口稳定 */\n async function save(): Promise<string> {\n return '';\n }\n\n return { save };\n}\n\n/** 创建一个仅保存在内存中的日志存储 */\nexport function createMemoryLogStore(): WorkflowLogStore & {\n snapshots: WorkflowRunSnapshot[];\n} {\n const snapshots: WorkflowRunSnapshot[] = [];\n\n /** 将快照压入内存数组 */\n async function save<TValues extends Record<string, unknown>>(\n snapshot: WorkflowRunSnapshot<TValues>,\n ): Promise<string> {\n snapshots.push(snapshot);\n return `memory://${snapshot.workflowId}/${snapshot.runId}`;\n }\n\n return {\n save,\n snapshots,\n };\n}\n\n/** 创建一次运行对应的日志会话对象 */\nexport function createWorkflowLogSession<TValues extends Record<string, unknown>>(options: {\n locale: string;\n meta?: Record<string, unknown>;\n runId: string;\n store: WorkflowLogStore;\n timeZone: string;\n workflowId: string;\n}): WorkflowLogSession<TValues> {\n const events: WorkflowRunEvent[] = [];\n const startedAt = new Date().toISOString();\n let endedAt: string | undefined;\n let status: WorkflowRunStatus = 'running';\n let results: Partial<Record<string, unknown>> = {};\n let values: Partial<TValues> = {};\n\n /** 记录一条运行事件 */\n function record(event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>): void {\n events.push({\n ...event,\n runId: options.runId,\n timestamp: new Date().toISOString(),\n workflowId: options.workflowId,\n });\n }\n\n /** 标记运行结束,并固化最终状态与 values */\n function complete(\n nextStatus: WorkflowRunStatus,\n nextValues: Partial<TValues>,\n nextResults: Partial<Record<string, unknown>>,\n ): void {\n endedAt = new Date().toISOString();\n status = nextStatus;\n results = { ...nextResults };\n values = { ...nextValues };\n }\n\n /** 获取当前的运行快照 */\n function snapshot(): WorkflowRunSnapshot<TValues> {\n const base: WorkflowRunSnapshot<TValues> = {\n analysis: {\n steps: {},\n totalDurationMs: 0,\n },\n events: [...events],\n locale: options.locale,\n runId: options.runId,\n startedAt,\n status,\n timeZone: options.timeZone,\n results: { ...results },\n values: { ...values },\n workflowId: options.workflowId,\n };\n\n if (endedAt !== undefined) base.endedAt = endedAt;\n if (options.meta !== undefined) base.meta = options.meta;\n base.analysis = analyzeWorkflowRun(base);\n\n return base;\n }\n\n /** 将当前快照保存到外部存储 */\n async function save(saveOptions?: { path?: string }): Promise<string> {\n return options.store.save(snapshot(), saveOptions);\n }\n\n return {\n complete,\n record,\n save,\n snapshot,\n };\n}\n","import type { WorkflowRuntimeContext } from './types.js';\n\n/** 将动态 resolver 统一解析成具体值 */\nexport async function resolveValue<TValue, TValues extends Record<string, unknown>>(\n value:\n | ((context: WorkflowRuntimeContext<TValues>) => TValue | Promise<TValue>)\n | TValue\n | undefined,\n context: WorkflowRuntimeContext<TValues>,\n): Promise<TValue | undefined> {\n if (typeof value === 'function')\n return (value as (context: WorkflowRuntimeContext<TValues>) => TValue | Promise<TValue>)(\n context,\n );\n\n return value;\n}\n","import { resolveValue } from '../../shared/resolvers.js';\nimport type {\n WorkflowBoxStep,\n WorkflowLogLevel,\n WorkflowLogStep,\n WorkflowNoteStep,\n WorkflowRuntimeContext,\n} from '../../shared/types.js';\n\n/** 执行 note 步骤 */\nexport async function runNoteStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowNoteStep<string>;\n}): Promise<{ message?: string; title?: string }> {\n const format = options.step.format;\n const message = await resolveValue(options.step.message, options.context);\n const title = await resolveValue(options.step.title, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n options.context.note(message, title, {\n ...(format === undefined ? {} : { format }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n\n return {\n ...(message === undefined ? {} : { message }),\n ...(title === undefined ? {} : { title }),\n };\n}\n\n/** 执行 box 步骤 */\nexport async function runBoxStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowBoxStep<string>;\n}): Promise<{ message?: string; title?: string }> {\n const contentAlign = await resolveValue(options.step.contentAlign, options.context);\n const contentPadding = await resolveValue(options.step.contentPadding, options.context);\n const formatBorder = options.step.formatBorder;\n const message = await resolveValue(options.step.message, options.context);\n const rounded = await resolveValue(options.step.rounded, options.context);\n const title = await resolveValue(options.step.title, options.context);\n const titleAlign = await resolveValue(options.step.titleAlign, options.context);\n const titlePadding = await resolveValue(options.step.titlePadding, options.context);\n const width = await resolveValue(options.step.width, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n options.context.box(message, title, {\n ...(contentAlign === undefined ? {} : { contentAlign }),\n ...(contentPadding === undefined ? {} : { contentPadding }),\n ...(formatBorder === undefined ? {} : { formatBorder }),\n ...(rounded === undefined ? {} : { rounded }),\n ...(titleAlign === undefined ? {} : { titleAlign }),\n ...(titlePadding === undefined ? {} : { titlePadding }),\n ...(width === undefined ? {} : { width }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n\n return {\n ...(message === undefined ? {} : { message }),\n ...(title === undefined ? {} : { title }),\n };\n}\n\n/** 执行 log 步骤 */\nexport async function runLogStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowLogStep<string>;\n}): Promise<{ level: WorkflowLogLevel; message: string }> {\n const level = (await resolveValue(options.step.level, options.context)) ?? 'info';\n const message = (await resolveValue(options.step.message, options.context)) ?? '';\n const secondarySymbol = await resolveValue(options.step.secondarySymbol, options.context);\n const spacing = await resolveValue(options.step.spacing, options.context);\n const symbol = await resolveValue(options.step.symbol, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n const normalizedMessage = Array.isArray(message) ? message.join('\\n') : message;\n\n options.context.log(level, message, {\n ...(secondarySymbol === undefined ? {} : { secondarySymbol }),\n ...(spacing === undefined ? {} : { spacing }),\n ...(symbol === undefined ? {} : { symbol }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n\n return {\n level,\n message: normalizedMessage,\n };\n}\n","let p = process || {}, argv = p.argv || [], env = p.env || {}\nlet isColorSupported =\n\t!(!!env.NO_COLOR || argv.includes(\"--no-color\")) &&\n\t(!!env.FORCE_COLOR || argv.includes(\"--color\") || p.platform === \"win32\" || ((p.stdout || {}).isTTY && env.TERM !== \"dumb\") || !!env.CI)\n\nlet formatter = (open, close, replace = open) =>\n\tinput => {\n\t\tlet string = \"\" + input, index = string.indexOf(close, open.length)\n\t\treturn ~index ? open + replaceClose(string, close, replace, index) + close : open + string + close\n\t}\n\nlet replaceClose = (string, close, replace, index) => {\n\tlet result = \"\", cursor = 0\n\tdo {\n\t\tresult += string.substring(cursor, index) + replace\n\t\tcursor = index + close.length\n\t\tindex = string.indexOf(close, cursor)\n\t} while (~index)\n\treturn result + string.substring(cursor)\n}\n\nlet createColors = (enabled = isColorSupported) => {\n\tlet f = enabled ? formatter : () => String\n\treturn {\n\t\tisColorSupported: enabled,\n\t\treset: f(\"\\x1b[0m\", \"\\x1b[0m\"),\n\t\tbold: f(\"\\x1b[1m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[1m\"),\n\t\tdim: f(\"\\x1b[2m\", \"\\x1b[22m\", \"\\x1b[22m\\x1b[2m\"),\n\t\titalic: f(\"\\x1b[3m\", \"\\x1b[23m\"),\n\t\tunderline: f(\"\\x1b[4m\", \"\\x1b[24m\"),\n\t\tinverse: f(\"\\x1b[7m\", \"\\x1b[27m\"),\n\t\thidden: f(\"\\x1b[8m\", \"\\x1b[28m\"),\n\t\tstrikethrough: f(\"\\x1b[9m\", \"\\x1b[29m\"),\n\n\t\tblack: f(\"\\x1b[30m\", \"\\x1b[39m\"),\n\t\tred: f(\"\\x1b[31m\", \"\\x1b[39m\"),\n\t\tgreen: f(\"\\x1b[32m\", \"\\x1b[39m\"),\n\t\tyellow: f(\"\\x1b[33m\", \"\\x1b[39m\"),\n\t\tblue: f(\"\\x1b[34m\", \"\\x1b[39m\"),\n\t\tmagenta: f(\"\\x1b[35m\", \"\\x1b[39m\"),\n\t\tcyan: f(\"\\x1b[36m\", \"\\x1b[39m\"),\n\t\twhite: f(\"\\x1b[37m\", \"\\x1b[39m\"),\n\t\tgray: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\n\t\tbgBlack: f(\"\\x1b[40m\", \"\\x1b[49m\"),\n\t\tbgRed: f(\"\\x1b[41m\", \"\\x1b[49m\"),\n\t\tbgGreen: f(\"\\x1b[42m\", \"\\x1b[49m\"),\n\t\tbgYellow: f(\"\\x1b[43m\", \"\\x1b[49m\"),\n\t\tbgBlue: f(\"\\x1b[44m\", \"\\x1b[49m\"),\n\t\tbgMagenta: f(\"\\x1b[45m\", \"\\x1b[49m\"),\n\t\tbgCyan: f(\"\\x1b[46m\", \"\\x1b[49m\"),\n\t\tbgWhite: f(\"\\x1b[47m\", \"\\x1b[49m\"),\n\n\t\tblackBright: f(\"\\x1b[90m\", \"\\x1b[39m\"),\n\t\tredBright: f(\"\\x1b[91m\", \"\\x1b[39m\"),\n\t\tgreenBright: f(\"\\x1b[92m\", \"\\x1b[39m\"),\n\t\tyellowBright: f(\"\\x1b[93m\", \"\\x1b[39m\"),\n\t\tblueBright: f(\"\\x1b[94m\", \"\\x1b[39m\"),\n\t\tmagentaBright: f(\"\\x1b[95m\", \"\\x1b[39m\"),\n\t\tcyanBright: f(\"\\x1b[96m\", \"\\x1b[39m\"),\n\t\twhiteBright: f(\"\\x1b[97m\", \"\\x1b[39m\"),\n\n\t\tbgBlackBright: f(\"\\x1b[100m\", \"\\x1b[49m\"),\n\t\tbgRedBright: f(\"\\x1b[101m\", \"\\x1b[49m\"),\n\t\tbgGreenBright: f(\"\\x1b[102m\", \"\\x1b[49m\"),\n\t\tbgYellowBright: f(\"\\x1b[103m\", \"\\x1b[49m\"),\n\t\tbgBlueBright: f(\"\\x1b[104m\", \"\\x1b[49m\"),\n\t\tbgMagentaBright: f(\"\\x1b[105m\", \"\\x1b[49m\"),\n\t\tbgCyanBright: f(\"\\x1b[106m\", \"\\x1b[49m\"),\n\t\tbgWhiteBright: f(\"\\x1b[107m\", \"\\x1b[49m\"),\n\t}\n}\n\nmodule.exports = createColors()\nmodule.exports.createColors = createColors\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.splitWhen = exports.flatten = void 0;\nfunction flatten(items) {\n return items.reduce((collection, item) => [].concat(collection, item), []);\n}\nexports.flatten = flatten;\nfunction splitWhen(items, predicate) {\n const result = [[]];\n let groupIndex = 0;\n for (const item of items) {\n if (predicate(item)) {\n groupIndex++;\n result[groupIndex] = [];\n }\n else {\n result[groupIndex].push(item);\n }\n }\n return result;\n}\nexports.splitWhen = splitWhen;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEnoentCodeError = void 0;\nfunction isEnoentCodeError(error) {\n return error.code === 'ENOENT';\n}\nexports.isEnoentCodeError = isEnoentCodeError;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPosixPathToPattern = exports.convertWindowsPathToPattern = exports.convertPathToPattern = exports.escapePosixPath = exports.escapeWindowsPath = exports.escape = exports.removeLeadingDotSegment = exports.makeAbsolute = exports.unixify = void 0;\nconst os = require(\"os\");\nconst path = require(\"path\");\nconst IS_WINDOWS_PLATFORM = os.platform() === 'win32';\nconst LEADING_DOT_SEGMENT_CHARACTERS_COUNT = 2; // ./ or .\\\\\n/**\n * All non-escaped special characters.\n * Posix: ()*?[]{|}, !+@ before (, ! at the beginning, \\\\ before non-special characters.\n * Windows: (){}[], !+@ before (, ! at the beginning.\n */\nconst POSIX_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()*?[\\]{|}]|^!|[!+@](?=\\()|\\\\(?![!()*+?@[\\]{|}]))/g;\nconst WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE = /(\\\\?)([()[\\]{}]|^!|[!+@](?=\\())/g;\n/**\n * The device path (\\\\.\\ or \\\\?\\).\n * https://learn.microsoft.com/en-us/dotnet/standard/io/file-path-formats#dos-device-paths\n */\nconst DOS_DEVICE_PATH_RE = /^\\\\\\\\([.?])/;\n/**\n * All backslashes except those escaping special characters.\n * Windows: !()+@{}\n * https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions\n */\nconst WINDOWS_BACKSLASHES_RE = /\\\\(?![!()+@[\\]{}])/g;\n/**\n * Designed to work only with simple paths: `dir\\\\file`.\n */\nfunction unixify(filepath) {\n return filepath.replace(/\\\\/g, '/');\n}\nexports.unixify = unixify;\nfunction makeAbsolute(cwd, filepath) {\n return path.resolve(cwd, filepath);\n}\nexports.makeAbsolute = makeAbsolute;\nfunction removeLeadingDotSegment(entry) {\n // We do not use `startsWith` because this is 10x slower than current implementation for some cases.\n // eslint-disable-next-line @typescript-eslint/prefer-string-starts-ends-with\n if (entry.charAt(0) === '.') {\n const secondCharactery = entry.charAt(1);\n if (secondCharactery === '/' || secondCharactery === '\\\\') {\n return entry.slice(LEADING_DOT_SEGMENT_CHARACTERS_COUNT);\n }\n }\n return entry;\n}\nexports.removeLeadingDotSegment = removeLeadingDotSegment;\nexports.escape = IS_WINDOWS_PLATFORM ? escapeWindowsPath : escapePosixPath;\nfunction escapeWindowsPath(pattern) {\n return pattern.replace(WINDOWS_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapeWindowsPath = escapeWindowsPath;\nfunction escapePosixPath(pattern) {\n return pattern.replace(POSIX_UNESCAPED_GLOB_SYMBOLS_RE, '\\\\$2');\n}\nexports.escapePosixPath = escapePosixPath;\nexports.convertPathToPattern = IS_WINDOWS_PLATFORM ? convertWindowsPathToPattern : convertPosixPathToPattern;\nfunction convertWindowsPathToPattern(filepath) {\n return escapeWindowsPath(filepath)\n .replace(DOS_DEVICE_PATH_RE, '//$1')\n .replace(WINDOWS_BACKSLASHES_RE, '/');\n}\nexports.convertWindowsPathToPattern = convertWindowsPathToPattern;\nfunction convertPosixPathToPattern(filepath) {\n return escapePosixPath(filepath);\n}\nexports.convertPosixPathToPattern = convertPosixPathToPattern;\n","/*!\n * is-extglob <https://github.com/jonschlinkert/is-extglob>\n *\n * Copyright (c) 2014-2016, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\nmodule.exports = function isExtglob(str) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n var match;\n while ((match = /(\\\\).|([@?!+*]\\(.*\\))/g.exec(str))) {\n if (match[2]) return true;\n str = str.slice(match.index + match[0].length);\n }\n\n return false;\n};\n","/*!\n * is-glob <https://github.com/jonschlinkert/is-glob>\n *\n * Copyright (c) 2014-2017, Jon Schlinkert.\n * Released under the MIT License.\n */\n\nvar isExtglob = require('is-extglob');\nvar chars = { '{': '}', '(': ')', '[': ']'};\nvar strictCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n var pipeIndex = -2;\n var closeSquareIndex = -2;\n var closeCurlyIndex = -2;\n var closeParenIndex = -2;\n var backSlashIndex = -2;\n while (index < str.length) {\n if (str[index] === '*') {\n return true;\n }\n\n if (str[index + 1] === '?' && /[\\].+)]/.test(str[index])) {\n return true;\n }\n\n if (closeSquareIndex !== -1 && str[index] === '[' && str[index + 1] !== ']') {\n if (closeSquareIndex < index) {\n closeSquareIndex = str.indexOf(']', index);\n }\n if (closeSquareIndex > index) {\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeSquareIndex) {\n return true;\n }\n }\n }\n\n if (closeCurlyIndex !== -1 && str[index] === '{' && str[index + 1] !== '}') {\n closeCurlyIndex = str.indexOf('}', index);\n if (closeCurlyIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeCurlyIndex) {\n return true;\n }\n }\n }\n\n if (closeParenIndex !== -1 && str[index] === '(' && str[index + 1] === '?' && /[:!=]/.test(str[index + 2]) && str[index + 3] !== ')') {\n closeParenIndex = str.indexOf(')', index);\n if (closeParenIndex > index) {\n backSlashIndex = str.indexOf('\\\\', index);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n\n if (pipeIndex !== -1 && str[index] === '(' && str[index + 1] !== '|') {\n if (pipeIndex < index) {\n pipeIndex = str.indexOf('|', index);\n }\n if (pipeIndex !== -1 && str[pipeIndex + 1] !== ')') {\n closeParenIndex = str.indexOf(')', pipeIndex);\n if (closeParenIndex > pipeIndex) {\n backSlashIndex = str.indexOf('\\\\', pipeIndex);\n if (backSlashIndex === -1 || backSlashIndex > closeParenIndex) {\n return true;\n }\n }\n }\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nvar relaxedCheck = function(str) {\n if (str[0] === '!') {\n return true;\n }\n var index = 0;\n while (index < str.length) {\n if (/[*?{}()[\\]]/.test(str[index])) {\n return true;\n }\n\n if (str[index] === '\\\\') {\n var open = str[index + 1];\n index += 2;\n var close = chars[open];\n\n if (close) {\n var n = str.indexOf(close, index);\n if (n !== -1) {\n index = n + 1;\n }\n }\n\n if (str[index] === '!') {\n return true;\n }\n } else {\n index++;\n }\n }\n return false;\n};\n\nmodule.exports = function isGlob(str, options) {\n if (typeof str !== 'string' || str === '') {\n return false;\n }\n\n if (isExtglob(str)) {\n return true;\n }\n\n var check = strictCheck;\n\n // optionally relax check\n if (options && options.strict === false) {\n check = relaxedCheck;\n }\n\n return check(str);\n};\n","'use strict';\n\nvar isGlob = require('is-glob');\nvar pathPosixDirname = require('path').posix.dirname;\nvar isWin32 = require('os').platform() === 'win32';\n\nvar slash = '/';\nvar backslash = /\\\\/g;\nvar enclosure = /[\\{\\[].*[\\}\\]]$/;\nvar globby = /(^|[^\\\\])([\\{\\[]|\\([^\\)]+$)/;\nvar escaped = /\\\\([\\!\\*\\?\\|\\[\\]\\(\\)\\{\\}])/g;\n\n/**\n * @param {string} str\n * @param {Object} opts\n * @param {boolean} [opts.flipBackslashes=true]\n * @returns {string}\n */\nmodule.exports = function globParent(str, opts) {\n var options = Object.assign({ flipBackslashes: true }, opts);\n\n // flip windows path separators\n if (options.flipBackslashes && isWin32 && str.indexOf(slash) < 0) {\n str = str.replace(backslash, slash);\n }\n\n // special case for strings ending in enclosure containing path separator\n if (enclosure.test(str)) {\n str += slash;\n }\n\n // preserves full path in case of trailing path separator\n str += 'a';\n\n // remove path parts that are globby\n do {\n str = pathPosixDirname(str);\n } while (isGlob(str) || globby.test(str));\n\n // remove escape chars and return result\n return str.replace(escaped, '$1');\n};\n","'use strict';\n\nexports.isInteger = num => {\n if (typeof num === 'number') {\n return Number.isInteger(num);\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isInteger(Number(num));\n }\n return false;\n};\n\n/**\n * Find a node of the given type\n */\n\nexports.find = (node, type) => node.nodes.find(node => node.type === type);\n\n/**\n * Find a node of the given type\n */\n\nexports.exceedsLimit = (min, max, step = 1, limit) => {\n if (limit === false) return false;\n if (!exports.isInteger(min) || !exports.isInteger(max)) return false;\n return ((Number(max) - Number(min)) / Number(step)) >= limit;\n};\n\n/**\n * Escape the given node with '\\\\' before node.value\n */\n\nexports.escapeNode = (block, n = 0, type) => {\n const node = block.nodes[n];\n if (!node) return;\n\n if ((type && node.type === type) || node.type === 'open' || node.type === 'close') {\n if (node.escaped !== true) {\n node.value = '\\\\' + node.value;\n node.escaped = true;\n }\n }\n};\n\n/**\n * Returns true if the given brace node should be enclosed in literal braces\n */\n\nexports.encloseBrace = node => {\n if (node.type !== 'brace') return false;\n if ((node.commas >> 0 + node.ranges >> 0) === 0) {\n node.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a brace node is invalid.\n */\n\nexports.isInvalidBrace = block => {\n if (block.type !== 'brace') return false;\n if (block.invalid === true || block.dollar) return true;\n if ((block.commas >> 0 + block.ranges >> 0) === 0) {\n block.invalid = true;\n return true;\n }\n if (block.open !== true || block.close !== true) {\n block.invalid = true;\n return true;\n }\n return false;\n};\n\n/**\n * Returns true if a node is an open or close node\n */\n\nexports.isOpenOrClose = node => {\n if (node.type === 'open' || node.type === 'close') {\n return true;\n }\n return node.open === true || node.close === true;\n};\n\n/**\n * Reduce an array of text nodes.\n */\n\nexports.reduce = nodes => nodes.reduce((acc, node) => {\n if (node.type === 'text') acc.push(node.value);\n if (node.type === 'range') node.type = 'text';\n return acc;\n}, []);\n\n/**\n * Flatten an array\n */\n\nexports.flatten = (...args) => {\n const result = [];\n\n const flat = arr => {\n for (let i = 0; i < arr.length; i++) {\n const ele = arr[i];\n\n if (Array.isArray(ele)) {\n flat(ele);\n continue;\n }\n\n if (ele !== undefined) {\n result.push(ele);\n }\n }\n return result;\n };\n\n flat(args);\n return result;\n};\n","'use strict';\n\nconst utils = require('./utils');\n\nmodule.exports = (ast, options = {}) => {\n const stringify = (node, parent = {}) => {\n const invalidBlock = options.escapeInvalid && utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n let output = '';\n\n if (node.value) {\n if ((invalidBlock || invalidNode) && utils.isOpenOrClose(node)) {\n return '\\\\' + node.value;\n }\n return node.value;\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += stringify(child);\n }\n }\n return output;\n };\n\n return stringify(ast);\n};\n\n","/*!\n * is-number <https://github.com/jonschlinkert/is-number>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nmodule.exports = function(num) {\n if (typeof num === 'number') {\n return num - num === 0;\n }\n if (typeof num === 'string' && num.trim() !== '') {\n return Number.isFinite ? Number.isFinite(+num) : isFinite(+num);\n }\n return false;\n};\n","/*!\n * to-regex-range <https://github.com/micromatch/to-regex-range>\n *\n * Copyright (c) 2015-present, Jon Schlinkert.\n * Released under the MIT License.\n */\n\n'use strict';\n\nconst isNumber = require('is-number');\n\nconst toRegexRange = (min, max, options) => {\n if (isNumber(min) === false) {\n throw new TypeError('toRegexRange: expected the first argument to be a number');\n }\n\n if (max === void 0 || min === max) {\n return String(min);\n }\n\n if (isNumber(max) === false) {\n throw new TypeError('toRegexRange: expected the second argument to be a number.');\n }\n\n let opts = { relaxZeros: true, ...options };\n if (typeof opts.strictZeros === 'boolean') {\n opts.relaxZeros = opts.strictZeros === false;\n }\n\n let relax = String(opts.relaxZeros);\n let shorthand = String(opts.shorthand);\n let capture = String(opts.capture);\n let wrap = String(opts.wrap);\n let cacheKey = min + ':' + max + '=' + relax + shorthand + capture + wrap;\n\n if (toRegexRange.cache.hasOwnProperty(cacheKey)) {\n return toRegexRange.cache[cacheKey].result;\n }\n\n let a = Math.min(min, max);\n let b = Math.max(min, max);\n\n if (Math.abs(a - b) === 1) {\n let result = min + '|' + max;\n if (opts.capture) {\n return `(${result})`;\n }\n if (opts.wrap === false) {\n return result;\n }\n return `(?:${result})`;\n }\n\n let isPadded = hasPadding(min) || hasPadding(max);\n let state = { min, max, a, b };\n let positives = [];\n let negatives = [];\n\n if (isPadded) {\n state.isPadded = isPadded;\n state.maxLen = String(state.max).length;\n }\n\n if (a < 0) {\n let newMin = b < 0 ? Math.abs(b) : 1;\n negatives = splitToPatterns(newMin, Math.abs(a), state, opts);\n a = state.a = 0;\n }\n\n if (b >= 0) {\n positives = splitToPatterns(a, b, state, opts);\n }\n\n state.negatives = negatives;\n state.positives = positives;\n state.result = collatePatterns(negatives, positives, opts);\n\n if (opts.capture === true) {\n state.result = `(${state.result})`;\n } else if (opts.wrap !== false && (positives.length + negatives.length) > 1) {\n state.result = `(?:${state.result})`;\n }\n\n toRegexRange.cache[cacheKey] = state;\n return state.result;\n};\n\nfunction collatePatterns(neg, pos, options) {\n let onlyNegative = filterPatterns(neg, pos, '-', false, options) || [];\n let onlyPositive = filterPatterns(pos, neg, '', false, options) || [];\n let intersected = filterPatterns(neg, pos, '-?', true, options) || [];\n let subpatterns = onlyNegative.concat(intersected).concat(onlyPositive);\n return subpatterns.join('|');\n}\n\nfunction splitToRanges(min, max) {\n let nines = 1;\n let zeros = 1;\n\n let stop = countNines(min, nines);\n let stops = new Set([max]);\n\n while (min <= stop && stop <= max) {\n stops.add(stop);\n nines += 1;\n stop = countNines(min, nines);\n }\n\n stop = countZeros(max + 1, zeros) - 1;\n\n while (min < stop && stop <= max) {\n stops.add(stop);\n zeros += 1;\n stop = countZeros(max + 1, zeros) - 1;\n }\n\n stops = [...stops];\n stops.sort(compare);\n return stops;\n}\n\n/**\n * Convert a range to a regex pattern\n * @param {Number} `start`\n * @param {Number} `stop`\n * @return {String}\n */\n\nfunction rangeToPattern(start, stop, options) {\n if (start === stop) {\n return { pattern: start, count: [], digits: 0 };\n }\n\n let zipped = zip(start, stop);\n let digits = zipped.length;\n let pattern = '';\n let count = 0;\n\n for (let i = 0; i < digits; i++) {\n let [startDigit, stopDigit] = zipped[i];\n\n if (startDigit === stopDigit) {\n pattern += startDigit;\n\n } else if (startDigit !== '0' || stopDigit !== '9') {\n pattern += toCharacterClass(startDigit, stopDigit, options);\n\n } else {\n count++;\n }\n }\n\n if (count) {\n pattern += options.shorthand === true ? '\\\\d' : '[0-9]';\n }\n\n return { pattern, count: [count], digits };\n}\n\nfunction splitToPatterns(min, max, tok, options) {\n let ranges = splitToRanges(min, max);\n let tokens = [];\n let start = min;\n let prev;\n\n for (let i = 0; i < ranges.length; i++) {\n let max = ranges[i];\n let obj = rangeToPattern(String(start), String(max), options);\n let zeros = '';\n\n if (!tok.isPadded && prev && prev.pattern === obj.pattern) {\n if (prev.count.length > 1) {\n prev.count.pop();\n }\n\n prev.count.push(obj.count[0]);\n prev.string = prev.pattern + toQuantifier(prev.count);\n start = max + 1;\n continue;\n }\n\n if (tok.isPadded) {\n zeros = padZeros(max, tok, options);\n }\n\n obj.string = zeros + obj.pattern + toQuantifier(obj.count);\n tokens.push(obj);\n start = max + 1;\n prev = obj;\n }\n\n return tokens;\n}\n\nfunction filterPatterns(arr, comparison, prefix, intersection, options) {\n let result = [];\n\n for (let ele of arr) {\n let { string } = ele;\n\n // only push if _both_ are negative...\n if (!intersection && !contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n\n // or _both_ are positive\n if (intersection && contains(comparison, 'string', string)) {\n result.push(prefix + string);\n }\n }\n return result;\n}\n\n/**\n * Zip strings\n */\n\nfunction zip(a, b) {\n let arr = [];\n for (let i = 0; i < a.length; i++) arr.push([a[i], b[i]]);\n return arr;\n}\n\nfunction compare(a, b) {\n return a > b ? 1 : b > a ? -1 : 0;\n}\n\nfunction contains(arr, key, val) {\n return arr.some(ele => ele[key] === val);\n}\n\nfunction countNines(min, len) {\n return Number(String(min).slice(0, -len) + '9'.repeat(len));\n}\n\nfunction countZeros(integer, zeros) {\n return integer - (integer % Math.pow(10, zeros));\n}\n\nfunction toQuantifier(digits) {\n let [start = 0, stop = ''] = digits;\n if (stop || start > 1) {\n return `{${start + (stop ? ',' + stop : '')}}`;\n }\n return '';\n}\n\nfunction toCharacterClass(a, b, options) {\n return `[${a}${(b - a === 1) ? '' : '-'}${b}]`;\n}\n\nfunction hasPadding(str) {\n return /^-?(0+)\\d/.test(str);\n}\n\nfunction padZeros(value, tok, options) {\n if (!tok.isPadded) {\n return value;\n }\n\n let diff = Math.abs(tok.maxLen - String(value).length);\n let relax = options.relaxZeros !== false;\n\n switch (diff) {\n case 0:\n return '';\n case 1:\n return relax ? '0?' : '0';\n case 2:\n return relax ? '0{0,2}' : '00';\n default: {\n return relax ? `0{0,${diff}}` : `0{${diff}}`;\n }\n }\n}\n\n/**\n * Cache\n */\n\ntoRegexRange.cache = {};\ntoRegexRange.clearCache = () => (toRegexRange.cache = {});\n\n/**\n * Expose `toRegexRange`\n */\n\nmodule.exports = toRegexRange;\n","/*!\n * fill-range <https://github.com/jonschlinkert/fill-range>\n *\n * Copyright (c) 2014-present, Jon Schlinkert.\n * Licensed under the MIT License.\n */\n\n'use strict';\n\nconst util = require('util');\nconst toRegexRange = require('to-regex-range');\n\nconst isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\n\nconst transform = toNumber => {\n return value => toNumber === true ? Number(value) : String(value);\n};\n\nconst isValidValue = value => {\n return typeof value === 'number' || (typeof value === 'string' && value !== '');\n};\n\nconst isNumber = num => Number.isInteger(+num);\n\nconst zeros = input => {\n let value = `${input}`;\n let index = -1;\n if (value[0] === '-') value = value.slice(1);\n if (value === '0') return false;\n while (value[++index] === '0');\n return index > 0;\n};\n\nconst stringify = (start, end, options) => {\n if (typeof start === 'string' || typeof end === 'string') {\n return true;\n }\n return options.stringify === true;\n};\n\nconst pad = (input, maxLength, toNumber) => {\n if (maxLength > 0) {\n let dash = input[0] === '-' ? '-' : '';\n if (dash) input = input.slice(1);\n input = (dash + input.padStart(dash ? maxLength - 1 : maxLength, '0'));\n }\n if (toNumber === false) {\n return String(input);\n }\n return input;\n};\n\nconst toMaxLen = (input, maxLength) => {\n let negative = input[0] === '-' ? '-' : '';\n if (negative) {\n input = input.slice(1);\n maxLength--;\n }\n while (input.length < maxLength) input = '0' + input;\n return negative ? ('-' + input) : input;\n};\n\nconst toSequence = (parts, options, maxLen) => {\n parts.negatives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n parts.positives.sort((a, b) => a < b ? -1 : a > b ? 1 : 0);\n\n let prefix = options.capture ? '' : '?:';\n let positives = '';\n let negatives = '';\n let result;\n\n if (parts.positives.length) {\n positives = parts.positives.map(v => toMaxLen(String(v), maxLen)).join('|');\n }\n\n if (parts.negatives.length) {\n negatives = `-(${prefix}${parts.negatives.map(v => toMaxLen(String(v), maxLen)).join('|')})`;\n }\n\n if (positives && negatives) {\n result = `${positives}|${negatives}`;\n } else {\n result = positives || negatives;\n }\n\n if (options.wrap) {\n return `(${prefix}${result})`;\n }\n\n return result;\n};\n\nconst toRange = (a, b, isNumbers, options) => {\n if (isNumbers) {\n return toRegexRange(a, b, { wrap: false, ...options });\n }\n\n let start = String.fromCharCode(a);\n if (a === b) return start;\n\n let stop = String.fromCharCode(b);\n return `[${start}-${stop}]`;\n};\n\nconst toRegex = (start, end, options) => {\n if (Array.isArray(start)) {\n let wrap = options.wrap === true;\n let prefix = options.capture ? '' : '?:';\n return wrap ? `(${prefix}${start.join('|')})` : start.join('|');\n }\n return toRegexRange(start, end, options);\n};\n\nconst rangeError = (...args) => {\n return new RangeError('Invalid range arguments: ' + util.inspect(...args));\n};\n\nconst invalidRange = (start, end, options) => {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n};\n\nconst invalidStep = (step, options) => {\n if (options.strictRanges === true) {\n throw new TypeError(`Expected step \"${step}\" to be a number`);\n }\n return [];\n};\n\nconst fillNumbers = (start, end, step = 1, options = {}) => {\n let a = Number(start);\n let b = Number(end);\n\n if (!Number.isInteger(a) || !Number.isInteger(b)) {\n if (options.strictRanges === true) throw rangeError([start, end]);\n return [];\n }\n\n // fix negative zero\n if (a === 0) a = 0;\n if (b === 0) b = 0;\n\n let descending = a > b;\n let startString = String(start);\n let endString = String(end);\n let stepString = String(step);\n step = Math.max(Math.abs(step), 1);\n\n let padded = zeros(startString) || zeros(endString) || zeros(stepString);\n let maxLen = padded ? Math.max(startString.length, endString.length, stepString.length) : 0;\n let toNumber = padded === false && stringify(start, end, options) === false;\n let format = options.transform || transform(toNumber);\n\n if (options.toRegex && step === 1) {\n return toRange(toMaxLen(start, maxLen), toMaxLen(end, maxLen), true, options);\n }\n\n let parts = { negatives: [], positives: [] };\n let push = num => parts[num < 0 ? 'negatives' : 'positives'].push(Math.abs(num));\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n if (options.toRegex === true && step > 1) {\n push(a);\n } else {\n range.push(pad(format(a, index), maxLen, toNumber));\n }\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return step > 1\n ? toSequence(parts, options, maxLen)\n : toRegex(range, null, { wrap: false, ...options });\n }\n\n return range;\n};\n\nconst fillLetters = (start, end, step = 1, options = {}) => {\n if ((!isNumber(start) && start.length > 1) || (!isNumber(end) && end.length > 1)) {\n return invalidRange(start, end, options);\n }\n\n let format = options.transform || (val => String.fromCharCode(val));\n let a = `${start}`.charCodeAt(0);\n let b = `${end}`.charCodeAt(0);\n\n let descending = a > b;\n let min = Math.min(a, b);\n let max = Math.max(a, b);\n\n if (options.toRegex && step === 1) {\n return toRange(min, max, false, options);\n }\n\n let range = [];\n let index = 0;\n\n while (descending ? a >= b : a <= b) {\n range.push(format(a, index));\n a = descending ? a - step : a + step;\n index++;\n }\n\n if (options.toRegex === true) {\n return toRegex(range, null, { wrap: false, options });\n }\n\n return range;\n};\n\nconst fill = (start, end, step, options = {}) => {\n if (end == null && isValidValue(start)) {\n return [start];\n }\n\n if (!isValidValue(start) || !isValidValue(end)) {\n return invalidRange(start, end, options);\n }\n\n if (typeof step === 'function') {\n return fill(start, end, 1, { transform: step });\n }\n\n if (isObject(step)) {\n return fill(start, end, 0, step);\n }\n\n let opts = { ...options };\n if (opts.capture === true) opts.wrap = true;\n step = step || opts.step || 1;\n\n if (!isNumber(step)) {\n if (step != null && !isObject(step)) return invalidStep(step, opts);\n return fill(start, end, 1, step);\n }\n\n if (isNumber(start) && isNumber(end)) {\n return fillNumbers(start, end, step, opts);\n }\n\n return fillLetters(start, end, Math.max(Math.abs(step), 1), opts);\n};\n\nmodule.exports = fill;\n","'use strict';\n\nconst fill = require('fill-range');\nconst utils = require('./utils');\n\nconst compile = (ast, options = {}) => {\n const walk = (node, parent = {}) => {\n const invalidBlock = utils.isInvalidBrace(parent);\n const invalidNode = node.invalid === true && options.escapeInvalid === true;\n const invalid = invalidBlock === true || invalidNode === true;\n const prefix = options.escapeInvalid === true ? '\\\\' : '';\n let output = '';\n\n if (node.isOpen === true) {\n return prefix + node.value;\n }\n\n if (node.isClose === true) {\n console.log('node.isClose', prefix, node.value);\n return prefix + node.value;\n }\n\n if (node.type === 'open') {\n return invalid ? prefix + node.value : '(';\n }\n\n if (node.type === 'close') {\n return invalid ? prefix + node.value : ')';\n }\n\n if (node.type === 'comma') {\n return node.prev.type === 'comma' ? '' : invalid ? node.value : '|';\n }\n\n if (node.value) {\n return node.value;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n const range = fill(...args, { ...options, wrap: false, toRegex: true, strictZeros: true });\n\n if (range.length !== 0) {\n return args.length > 1 && range.length > 1 ? `(${range})` : range;\n }\n }\n\n if (node.nodes) {\n for (const child of node.nodes) {\n output += walk(child, node);\n }\n }\n\n return output;\n };\n\n return walk(ast);\n};\n\nmodule.exports = compile;\n","'use strict';\n\nconst fill = require('fill-range');\nconst stringify = require('./stringify');\nconst utils = require('./utils');\n\nconst append = (queue = '', stash = '', enclose = false) => {\n const result = [];\n\n queue = [].concat(queue);\n stash = [].concat(stash);\n\n if (!stash.length) return queue;\n if (!queue.length) {\n return enclose ? utils.flatten(stash).map(ele => `{${ele}}`) : stash;\n }\n\n for (const item of queue) {\n if (Array.isArray(item)) {\n for (const value of item) {\n result.push(append(value, stash, enclose));\n }\n } else {\n for (let ele of stash) {\n if (enclose === true && typeof ele === 'string') ele = `{${ele}}`;\n result.push(Array.isArray(ele) ? append(item, ele, enclose) : item + ele);\n }\n }\n }\n return utils.flatten(result);\n};\n\nconst expand = (ast, options = {}) => {\n const rangeLimit = options.rangeLimit === undefined ? 1000 : options.rangeLimit;\n\n const walk = (node, parent = {}) => {\n node.queue = [];\n\n let p = parent;\n let q = parent.queue;\n\n while (p.type !== 'brace' && p.type !== 'root' && p.parent) {\n p = p.parent;\n q = p.queue;\n }\n\n if (node.invalid || node.dollar) {\n q.push(append(q.pop(), stringify(node, options)));\n return;\n }\n\n if (node.type === 'brace' && node.invalid !== true && node.nodes.length === 2) {\n q.push(append(q.pop(), ['{}']));\n return;\n }\n\n if (node.nodes && node.ranges > 0) {\n const args = utils.reduce(node.nodes);\n\n if (utils.exceedsLimit(...args, options.step, rangeLimit)) {\n throw new RangeError('expanded array length exceeds range limit. Use options.rangeLimit to increase or disable the limit.');\n }\n\n let range = fill(...args, options);\n if (range.length === 0) {\n range = stringify(node, options);\n }\n\n q.push(append(q.pop(), range));\n node.nodes = [];\n return;\n }\n\n const enclose = utils.encloseBrace(node);\n let queue = node.queue;\n let block = node;\n\n while (block.type !== 'brace' && block.type !== 'root' && block.parent) {\n block = block.parent;\n queue = block.queue;\n }\n\n for (let i = 0; i < node.nodes.length; i++) {\n const child = node.nodes[i];\n\n if (child.type === 'comma' && node.type === 'brace') {\n if (i === 1) queue.push('');\n queue.push('');\n continue;\n }\n\n if (child.type === 'close') {\n q.push(append(q.pop(), queue, enclose));\n continue;\n }\n\n if (child.value && child.type !== 'open') {\n queue.push(append(queue.pop(), child.value));\n continue;\n }\n\n if (child.nodes) {\n walk(child, node);\n }\n }\n\n return queue;\n };\n\n return utils.flatten(walk(ast));\n};\n\nmodule.exports = expand;\n","'use strict';\n\nmodule.exports = {\n MAX_LENGTH: 10000,\n\n // Digits\n CHAR_0: '0', /* 0 */\n CHAR_9: '9', /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 'A', /* A */\n CHAR_LOWERCASE_A: 'a', /* a */\n CHAR_UPPERCASE_Z: 'Z', /* Z */\n CHAR_LOWERCASE_Z: 'z', /* z */\n\n CHAR_LEFT_PARENTHESES: '(', /* ( */\n CHAR_RIGHT_PARENTHESES: ')', /* ) */\n\n CHAR_ASTERISK: '*', /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: '&', /* & */\n CHAR_AT: '@', /* @ */\n CHAR_BACKSLASH: '\\\\', /* \\ */\n CHAR_BACKTICK: '`', /* ` */\n CHAR_CARRIAGE_RETURN: '\\r', /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: '^', /* ^ */\n CHAR_COLON: ':', /* : */\n CHAR_COMMA: ',', /* , */\n CHAR_DOLLAR: '$', /* . */\n CHAR_DOT: '.', /* . */\n CHAR_DOUBLE_QUOTE: '\"', /* \" */\n CHAR_EQUAL: '=', /* = */\n CHAR_EXCLAMATION_MARK: '!', /* ! */\n CHAR_FORM_FEED: '\\f', /* \\f */\n CHAR_FORWARD_SLASH: '/', /* / */\n CHAR_HASH: '#', /* # */\n CHAR_HYPHEN_MINUS: '-', /* - */\n CHAR_LEFT_ANGLE_BRACKET: '<', /* < */\n CHAR_LEFT_CURLY_BRACE: '{', /* { */\n CHAR_LEFT_SQUARE_BRACKET: '[', /* [ */\n CHAR_LINE_FEED: '\\n', /* \\n */\n CHAR_NO_BREAK_SPACE: '\\u00A0', /* \\u00A0 */\n CHAR_PERCENT: '%', /* % */\n CHAR_PLUS: '+', /* + */\n CHAR_QUESTION_MARK: '?', /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: '>', /* > */\n CHAR_RIGHT_CURLY_BRACE: '}', /* } */\n CHAR_RIGHT_SQUARE_BRACKET: ']', /* ] */\n CHAR_SEMICOLON: ';', /* ; */\n CHAR_SINGLE_QUOTE: '\\'', /* ' */\n CHAR_SPACE: ' ', /* */\n CHAR_TAB: '\\t', /* \\t */\n CHAR_UNDERSCORE: '_', /* _ */\n CHAR_VERTICAL_LINE: '|', /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: '\\uFEFF' /* \\uFEFF */\n};\n","'use strict';\n\nconst stringify = require('./stringify');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n CHAR_BACKSLASH, /* \\ */\n CHAR_BACKTICK, /* ` */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_RIGHT_SQUARE_BRACKET, /* ] */\n CHAR_DOUBLE_QUOTE, /* \" */\n CHAR_SINGLE_QUOTE, /* ' */\n CHAR_NO_BREAK_SPACE,\n CHAR_ZERO_WIDTH_NOBREAK_SPACE\n} = require('./constants');\n\n/**\n * parse\n */\n\nconst parse = (input, options = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n const opts = options || {};\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n if (input.length > max) {\n throw new SyntaxError(`Input length (${input.length}), exceeds max characters (${max})`);\n }\n\n const ast = { type: 'root', input, nodes: [] };\n const stack = [ast];\n let block = ast;\n let prev = ast;\n let brackets = 0;\n const length = input.length;\n let index = 0;\n let depth = 0;\n let value;\n\n /**\n * Helpers\n */\n\n const advance = () => input[index++];\n const push = node => {\n if (node.type === 'text' && prev.type === 'dot') {\n prev.type = 'text';\n }\n\n if (prev && prev.type === 'text' && node.type === 'text') {\n prev.value += node.value;\n return;\n }\n\n block.nodes.push(node);\n node.parent = block;\n node.prev = prev;\n prev = node;\n return node;\n };\n\n push({ type: 'bos' });\n\n while (index < length) {\n block = stack[stack.length - 1];\n value = advance();\n\n /**\n * Invalid chars\n */\n\n if (value === CHAR_ZERO_WIDTH_NOBREAK_SPACE || value === CHAR_NO_BREAK_SPACE) {\n continue;\n }\n\n /**\n * Escaped chars\n */\n\n if (value === CHAR_BACKSLASH) {\n push({ type: 'text', value: (options.keepEscaping ? value : '') + advance() });\n continue;\n }\n\n /**\n * Right square bracket (literal): ']'\n */\n\n if (value === CHAR_RIGHT_SQUARE_BRACKET) {\n push({ type: 'text', value: '\\\\' + value });\n continue;\n }\n\n /**\n * Left square bracket: '['\n */\n\n if (value === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n\n let next;\n\n while (index < length && (next = advance())) {\n value += next;\n\n if (next === CHAR_LEFT_SQUARE_BRACKET) {\n brackets++;\n continue;\n }\n\n if (next === CHAR_BACKSLASH) {\n value += advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n brackets--;\n\n if (brackets === 0) {\n break;\n }\n }\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === CHAR_LEFT_PARENTHESES) {\n block = push({ type: 'paren', nodes: [] });\n stack.push(block);\n push({ type: 'text', value });\n continue;\n }\n\n if (value === CHAR_RIGHT_PARENTHESES) {\n if (block.type !== 'paren') {\n push({ type: 'text', value });\n continue;\n }\n block = stack.pop();\n push({ type: 'text', value });\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Quotes: '|\"|`\n */\n\n if (value === CHAR_DOUBLE_QUOTE || value === CHAR_SINGLE_QUOTE || value === CHAR_BACKTICK) {\n const open = value;\n let next;\n\n if (options.keepQuotes !== true) {\n value = '';\n }\n\n while (index < length && (next = advance())) {\n if (next === CHAR_BACKSLASH) {\n value += next + advance();\n continue;\n }\n\n if (next === open) {\n if (options.keepQuotes === true) value += next;\n break;\n }\n\n value += next;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Left curly brace: '{'\n */\n\n if (value === CHAR_LEFT_CURLY_BRACE) {\n depth++;\n\n const dollar = prev.value && prev.value.slice(-1) === '$' || block.dollar === true;\n const brace = {\n type: 'brace',\n open: true,\n close: false,\n dollar,\n depth,\n commas: 0,\n ranges: 0,\n nodes: []\n };\n\n block = push(brace);\n stack.push(block);\n push({ type: 'open', value });\n continue;\n }\n\n /**\n * Right curly brace: '}'\n */\n\n if (value === CHAR_RIGHT_CURLY_BRACE) {\n if (block.type !== 'brace') {\n push({ type: 'text', value });\n continue;\n }\n\n const type = 'close';\n block = stack.pop();\n block.close = true;\n\n push({ type, value });\n depth--;\n\n block = stack[stack.length - 1];\n continue;\n }\n\n /**\n * Comma: ','\n */\n\n if (value === CHAR_COMMA && depth > 0) {\n if (block.ranges > 0) {\n block.ranges = 0;\n const open = block.nodes.shift();\n block.nodes = [open, { type: 'text', value: stringify(block) }];\n }\n\n push({ type: 'comma', value });\n block.commas++;\n continue;\n }\n\n /**\n * Dot: '.'\n */\n\n if (value === CHAR_DOT && depth > 0 && block.commas === 0) {\n const siblings = block.nodes;\n\n if (depth === 0 || siblings.length === 0) {\n push({ type: 'text', value });\n continue;\n }\n\n if (prev.type === 'dot') {\n block.range = [];\n prev.value += value;\n prev.type = 'range';\n\n if (block.nodes.length !== 3 && block.nodes.length !== 5) {\n block.invalid = true;\n block.ranges = 0;\n prev.type = 'text';\n continue;\n }\n\n block.ranges++;\n block.args = [];\n continue;\n }\n\n if (prev.type === 'range') {\n siblings.pop();\n\n const before = siblings[siblings.length - 1];\n before.value += prev.value + value;\n prev = before;\n block.ranges--;\n continue;\n }\n\n push({ type: 'dot', value });\n continue;\n }\n\n /**\n * Text\n */\n\n push({ type: 'text', value });\n }\n\n // Mark imbalanced braces and brackets as invalid\n do {\n block = stack.pop();\n\n if (block.type !== 'root') {\n block.nodes.forEach(node => {\n if (!node.nodes) {\n if (node.type === 'open') node.isOpen = true;\n if (node.type === 'close') node.isClose = true;\n if (!node.nodes) node.type = 'text';\n node.invalid = true;\n }\n });\n\n // get the location of the block on parent.nodes (block's siblings)\n const parent = stack[stack.length - 1];\n const index = parent.nodes.indexOf(block);\n // replace the (invalid) block with it's nodes\n parent.nodes.splice(index, 1, ...block.nodes);\n }\n } while (stack.length > 0);\n\n push({ type: 'eos' });\n return ast;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst stringify = require('./lib/stringify');\nconst compile = require('./lib/compile');\nconst expand = require('./lib/expand');\nconst parse = require('./lib/parse');\n\n/**\n * Expand the given pattern or create a regex-compatible string.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces('{a,b,c}', { compile: true })); //=> ['(a|b|c)']\n * console.log(braces('{a,b,c}')); //=> ['a', 'b', 'c']\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {String}\n * @api public\n */\n\nconst braces = (input, options = {}) => {\n let output = [];\n\n if (Array.isArray(input)) {\n for (const pattern of input) {\n const result = braces.create(pattern, options);\n if (Array.isArray(result)) {\n output.push(...result);\n } else {\n output.push(result);\n }\n }\n } else {\n output = [].concat(braces.create(input, options));\n }\n\n if (options && options.expand === true && options.nodupes === true) {\n output = [...new Set(output)];\n }\n return output;\n};\n\n/**\n * Parse the given `str` with the given `options`.\n *\n * ```js\n * // braces.parse(pattern, [, options]);\n * const ast = braces.parse('a/{b,c}/d');\n * console.log(ast);\n * ```\n * @param {String} pattern Brace pattern to parse\n * @param {Object} options\n * @return {Object} Returns an AST\n * @api public\n */\n\nbraces.parse = (input, options = {}) => parse(input, options);\n\n/**\n * Creates a braces string from an AST, or an AST node.\n *\n * ```js\n * const braces = require('braces');\n * let ast = braces.parse('foo/{a,b}/bar');\n * console.log(stringify(ast.nodes[2])); //=> '{a,b}'\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.stringify = (input, options = {}) => {\n if (typeof input === 'string') {\n return stringify(braces.parse(input, options), options);\n }\n return stringify(input, options);\n};\n\n/**\n * Compiles a brace pattern into a regex-compatible, optimized string.\n * This method is called by the main [braces](#braces) function by default.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.compile('a/{b,c}/d'));\n * //=> ['a/(b|c)/d']\n * ```\n * @param {String} `input` Brace pattern or AST.\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.compile = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n return compile(input, options);\n};\n\n/**\n * Expands a brace pattern into an array. This method is called by the\n * main [braces](#braces) function when `options.expand` is true. Before\n * using this method it's recommended that you read the [performance notes](#performance))\n * and advantages of using [.compile](#compile) instead.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.expand('a/{b,c}/d'));\n * //=> ['a/b/d', 'a/c/d'];\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.expand = (input, options = {}) => {\n if (typeof input === 'string') {\n input = braces.parse(input, options);\n }\n\n let result = expand(input, options);\n\n // filter out empty strings if specified\n if (options.noempty === true) {\n result = result.filter(Boolean);\n }\n\n // filter out duplicates if specified\n if (options.nodupes === true) {\n result = [...new Set(result)];\n }\n\n return result;\n};\n\n/**\n * Processes a brace pattern and returns either an expanded array\n * (if `options.expand` is true), a highly optimized regex-compatible string.\n * This method is called by the main [braces](#braces) function.\n *\n * ```js\n * const braces = require('braces');\n * console.log(braces.create('user-{200..300}/project-{a,b,c}-{1..10}'))\n * //=> 'user-(20[0-9]|2[1-9][0-9]|300)/project-(a|b|c)-([1-9]|10)'\n * ```\n * @param {String} `pattern` Brace pattern\n * @param {Object} `options`\n * @return {Array} Returns an array of expanded values.\n * @api public\n */\n\nbraces.create = (input, options = {}) => {\n if (input === '' || input.length < 3) {\n return [input];\n }\n\n return options.expand !== true\n ? braces.compile(input, options)\n : braces.expand(input, options);\n};\n\n/**\n * Expose \"braces\"\n */\n\nmodule.exports = braces;\n","'use strict';\n\nconst path = require('path');\nconst WIN_SLASH = '\\\\\\\\/';\nconst WIN_NO_SLASH = `[^${WIN_SLASH}]`;\n\n/**\n * Posix glob regex\n */\n\nconst DOT_LITERAL = '\\\\.';\nconst PLUS_LITERAL = '\\\\+';\nconst QMARK_LITERAL = '\\\\?';\nconst SLASH_LITERAL = '\\\\/';\nconst ONE_CHAR = '(?=.)';\nconst QMARK = '[^/]';\nconst END_ANCHOR = `(?:${SLASH_LITERAL}|$)`;\nconst START_ANCHOR = `(?:^|${SLASH_LITERAL})`;\nconst DOTS_SLASH = `${DOT_LITERAL}{1,2}${END_ANCHOR}`;\nconst NO_DOT = `(?!${DOT_LITERAL})`;\nconst NO_DOTS = `(?!${START_ANCHOR}${DOTS_SLASH})`;\nconst NO_DOT_SLASH = `(?!${DOT_LITERAL}{0,1}${END_ANCHOR})`;\nconst NO_DOTS_SLASH = `(?!${DOTS_SLASH})`;\nconst QMARK_NO_DOT = `[^.${SLASH_LITERAL}]`;\nconst STAR = `${QMARK}*?`;\n\nconst POSIX_CHARS = {\n DOT_LITERAL,\n PLUS_LITERAL,\n QMARK_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n QMARK,\n END_ANCHOR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n};\n\n/**\n * Windows glob regex\n */\n\nconst WINDOWS_CHARS = {\n ...POSIX_CHARS,\n\n SLASH_LITERAL: `[${WIN_SLASH}]`,\n QMARK: WIN_NO_SLASH,\n STAR: `${WIN_NO_SLASH}*?`,\n DOTS_SLASH: `${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$)`,\n NO_DOT: `(?!${DOT_LITERAL})`,\n NO_DOTS: `(?!(?:^|[${WIN_SLASH}])${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n NO_DOT_SLASH: `(?!${DOT_LITERAL}{0,1}(?:[${WIN_SLASH}]|$))`,\n NO_DOTS_SLASH: `(?!${DOT_LITERAL}{1,2}(?:[${WIN_SLASH}]|$))`,\n QMARK_NO_DOT: `[^.${WIN_SLASH}]`,\n START_ANCHOR: `(?:^|[${WIN_SLASH}])`,\n END_ANCHOR: `(?:[${WIN_SLASH}]|$)`\n};\n\n/**\n * POSIX Bracket Regex\n */\n\nconst POSIX_REGEX_SOURCE = {\n alnum: 'a-zA-Z0-9',\n alpha: 'a-zA-Z',\n ascii: '\\\\x00-\\\\x7F',\n blank: ' \\\\t',\n cntrl: '\\\\x00-\\\\x1F\\\\x7F',\n digit: '0-9',\n graph: '\\\\x21-\\\\x7E',\n lower: 'a-z',\n print: '\\\\x20-\\\\x7E ',\n punct: '\\\\-!\"#$%&\\'()\\\\*+,./:;<=>?@[\\\\]^_`{|}~',\n space: ' \\\\t\\\\r\\\\n\\\\v\\\\f',\n upper: 'A-Z',\n word: 'A-Za-z0-9_',\n xdigit: 'A-Fa-f0-9'\n};\n\nmodule.exports = {\n MAX_LENGTH: 1024 * 64,\n POSIX_REGEX_SOURCE,\n\n // regular expressions\n REGEX_BACKSLASH: /\\\\(?![*+?^${}(|)[\\]])/g,\n REGEX_NON_SPECIAL_CHARS: /^[^@![\\].,$*+?^{}()|\\\\/]+/,\n REGEX_SPECIAL_CHARS: /[-*+?.^${}(|)[\\]]/,\n REGEX_SPECIAL_CHARS_BACKREF: /(\\\\?)((\\W)(\\3*))/g,\n REGEX_SPECIAL_CHARS_GLOBAL: /([-*+?.^${}(|)[\\]])/g,\n REGEX_REMOVE_BACKSLASH: /(?:\\[.*?[^\\\\]\\]|\\\\(?=.))/g,\n\n // Replace globs with equivalent patterns to reduce parsing time.\n REPLACEMENTS: {\n '***': '*',\n '**/**': '**',\n '**/**/**': '**'\n },\n\n // Digits\n CHAR_0: 48, /* 0 */\n CHAR_9: 57, /* 9 */\n\n // Alphabet chars.\n CHAR_UPPERCASE_A: 65, /* A */\n CHAR_LOWERCASE_A: 97, /* a */\n CHAR_UPPERCASE_Z: 90, /* Z */\n CHAR_LOWERCASE_Z: 122, /* z */\n\n CHAR_LEFT_PARENTHESES: 40, /* ( */\n CHAR_RIGHT_PARENTHESES: 41, /* ) */\n\n CHAR_ASTERISK: 42, /* * */\n\n // Non-alphabetic chars.\n CHAR_AMPERSAND: 38, /* & */\n CHAR_AT: 64, /* @ */\n CHAR_BACKWARD_SLASH: 92, /* \\ */\n CHAR_CARRIAGE_RETURN: 13, /* \\r */\n CHAR_CIRCUMFLEX_ACCENT: 94, /* ^ */\n CHAR_COLON: 58, /* : */\n CHAR_COMMA: 44, /* , */\n CHAR_DOT: 46, /* . */\n CHAR_DOUBLE_QUOTE: 34, /* \" */\n CHAR_EQUAL: 61, /* = */\n CHAR_EXCLAMATION_MARK: 33, /* ! */\n CHAR_FORM_FEED: 12, /* \\f */\n CHAR_FORWARD_SLASH: 47, /* / */\n CHAR_GRAVE_ACCENT: 96, /* ` */\n CHAR_HASH: 35, /* # */\n CHAR_HYPHEN_MINUS: 45, /* - */\n CHAR_LEFT_ANGLE_BRACKET: 60, /* < */\n CHAR_LEFT_CURLY_BRACE: 123, /* { */\n CHAR_LEFT_SQUARE_BRACKET: 91, /* [ */\n CHAR_LINE_FEED: 10, /* \\n */\n CHAR_NO_BREAK_SPACE: 160, /* \\u00A0 */\n CHAR_PERCENT: 37, /* % */\n CHAR_PLUS: 43, /* + */\n CHAR_QUESTION_MARK: 63, /* ? */\n CHAR_RIGHT_ANGLE_BRACKET: 62, /* > */\n CHAR_RIGHT_CURLY_BRACE: 125, /* } */\n CHAR_RIGHT_SQUARE_BRACKET: 93, /* ] */\n CHAR_SEMICOLON: 59, /* ; */\n CHAR_SINGLE_QUOTE: 39, /* ' */\n CHAR_SPACE: 32, /* */\n CHAR_TAB: 9, /* \\t */\n CHAR_UNDERSCORE: 95, /* _ */\n CHAR_VERTICAL_LINE: 124, /* | */\n CHAR_ZERO_WIDTH_NOBREAK_SPACE: 65279, /* \\uFEFF */\n\n SEP: path.sep,\n\n /**\n * Create EXTGLOB_CHARS\n */\n\n extglobChars(chars) {\n return {\n '!': { type: 'negate', open: '(?:(?!(?:', close: `))${chars.STAR})` },\n '?': { type: 'qmark', open: '(?:', close: ')?' },\n '+': { type: 'plus', open: '(?:', close: ')+' },\n '*': { type: 'star', open: '(?:', close: ')*' },\n '@': { type: 'at', open: '(?:', close: ')' }\n };\n },\n\n /**\n * Create GLOB_CHARS\n */\n\n globChars(win32) {\n return win32 === true ? WINDOWS_CHARS : POSIX_CHARS;\n }\n};\n","'use strict';\n\nconst path = require('path');\nconst win32 = process.platform === 'win32';\nconst {\n REGEX_BACKSLASH,\n REGEX_REMOVE_BACKSLASH,\n REGEX_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_GLOBAL\n} = require('./constants');\n\nexports.isObject = val => val !== null && typeof val === 'object' && !Array.isArray(val);\nexports.hasRegexChars = str => REGEX_SPECIAL_CHARS.test(str);\nexports.isRegexChar = str => str.length === 1 && exports.hasRegexChars(str);\nexports.escapeRegex = str => str.replace(REGEX_SPECIAL_CHARS_GLOBAL, '\\\\$1');\nexports.toPosixSlashes = str => str.replace(REGEX_BACKSLASH, '/');\n\nexports.removeBackslashes = str => {\n return str.replace(REGEX_REMOVE_BACKSLASH, match => {\n return match === '\\\\' ? '' : match;\n });\n};\n\nexports.supportsLookbehinds = () => {\n const segs = process.version.slice(1).split('.').map(Number);\n if (segs.length === 3 && segs[0] >= 9 || (segs[0] === 8 && segs[1] >= 10)) {\n return true;\n }\n return false;\n};\n\nexports.isWindows = options => {\n if (options && typeof options.windows === 'boolean') {\n return options.windows;\n }\n return win32 === true || path.sep === '\\\\';\n};\n\nexports.escapeLast = (input, char, lastIdx) => {\n const idx = input.lastIndexOf(char, lastIdx);\n if (idx === -1) return input;\n if (input[idx - 1] === '\\\\') return exports.escapeLast(input, char, idx - 1);\n return `${input.slice(0, idx)}\\\\${input.slice(idx)}`;\n};\n\nexports.removePrefix = (input, state = {}) => {\n let output = input;\n if (output.startsWith('./')) {\n output = output.slice(2);\n state.prefix = './';\n }\n return output;\n};\n\nexports.wrapOutput = (input, state = {}, options = {}) => {\n const prepend = options.contains ? '' : '^';\n const append = options.contains ? '' : '$';\n\n let output = `${prepend}(?:${input})${append}`;\n if (state.negated === true) {\n output = `(?:^(?!${output}).*$)`;\n }\n return output;\n};\n","'use strict';\n\nconst utils = require('./utils');\nconst {\n CHAR_ASTERISK, /* * */\n CHAR_AT, /* @ */\n CHAR_BACKWARD_SLASH, /* \\ */\n CHAR_COMMA, /* , */\n CHAR_DOT, /* . */\n CHAR_EXCLAMATION_MARK, /* ! */\n CHAR_FORWARD_SLASH, /* / */\n CHAR_LEFT_CURLY_BRACE, /* { */\n CHAR_LEFT_PARENTHESES, /* ( */\n CHAR_LEFT_SQUARE_BRACKET, /* [ */\n CHAR_PLUS, /* + */\n CHAR_QUESTION_MARK, /* ? */\n CHAR_RIGHT_CURLY_BRACE, /* } */\n CHAR_RIGHT_PARENTHESES, /* ) */\n CHAR_RIGHT_SQUARE_BRACKET /* ] */\n} = require('./constants');\n\nconst isPathSeparator = code => {\n return code === CHAR_FORWARD_SLASH || code === CHAR_BACKWARD_SLASH;\n};\n\nconst depth = token => {\n if (token.isPrefix !== true) {\n token.depth = token.isGlobstar ? Infinity : 1;\n }\n};\n\n/**\n * Quickly scans a glob pattern and returns an object with a handful of\n * useful properties, like `isGlob`, `path` (the leading non-glob, if it exists),\n * `glob` (the actual pattern), `negated` (true if the path starts with `!` but not\n * with `!(`) and `negatedExtglob` (true if the path starts with `!(`).\n *\n * ```js\n * const pm = require('picomatch');\n * console.log(pm.scan('foo/bar/*.js'));\n * { isGlob: true, input: 'foo/bar/*.js', base: 'foo/bar', glob: '*.js' }\n * ```\n * @param {String} `str`\n * @param {Object} `options`\n * @return {Object} Returns an object with tokens and regex source string.\n * @api public\n */\n\nconst scan = (input, options) => {\n const opts = options || {};\n\n const length = input.length - 1;\n const scanToEnd = opts.parts === true || opts.scanToEnd === true;\n const slashes = [];\n const tokens = [];\n const parts = [];\n\n let str = input;\n let index = -1;\n let start = 0;\n let lastIndex = 0;\n let isBrace = false;\n let isBracket = false;\n let isGlob = false;\n let isExtglob = false;\n let isGlobstar = false;\n let braceEscaped = false;\n let backslashes = false;\n let negated = false;\n let negatedExtglob = false;\n let finished = false;\n let braces = 0;\n let prev;\n let code;\n let token = { value: '', depth: 0, isGlob: false };\n\n const eos = () => index >= length;\n const peek = () => str.charCodeAt(index + 1);\n const advance = () => {\n prev = code;\n return str.charCodeAt(++index);\n };\n\n while (index < length) {\n code = advance();\n let next;\n\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braceEscaped = true;\n }\n continue;\n }\n\n if (braceEscaped === true || code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (code === CHAR_LEFT_CURLY_BRACE) {\n braces++;\n continue;\n }\n\n if (braceEscaped !== true && code === CHAR_DOT && (code = advance()) === CHAR_DOT) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (braceEscaped !== true && code === CHAR_COMMA) {\n isBrace = token.isBrace = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_RIGHT_CURLY_BRACE) {\n braces--;\n\n if (braces === 0) {\n braceEscaped = false;\n isBrace = token.isBrace = true;\n finished = true;\n break;\n }\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (code === CHAR_FORWARD_SLASH) {\n slashes.push(index);\n tokens.push(token);\n token = { value: '', depth: 0, isGlob: false };\n\n if (finished === true) continue;\n if (prev === CHAR_DOT && index === (start + 1)) {\n start += 2;\n continue;\n }\n\n lastIndex = index + 1;\n continue;\n }\n\n if (opts.noext !== true) {\n const isExtglobChar = code === CHAR_PLUS\n || code === CHAR_AT\n || code === CHAR_ASTERISK\n || code === CHAR_QUESTION_MARK\n || code === CHAR_EXCLAMATION_MARK;\n\n if (isExtglobChar === true && peek() === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n isExtglob = token.isExtglob = true;\n finished = true;\n if (code === CHAR_EXCLAMATION_MARK && index === start) {\n negatedExtglob = true;\n }\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n }\n\n if (code === CHAR_ASTERISK) {\n if (prev === CHAR_ASTERISK) isGlobstar = token.isGlobstar = true;\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_QUESTION_MARK) {\n isGlob = token.isGlob = true;\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n break;\n }\n\n if (code === CHAR_LEFT_SQUARE_BRACKET) {\n while (eos() !== true && (next = advance())) {\n if (next === CHAR_BACKWARD_SLASH) {\n backslashes = token.backslashes = true;\n advance();\n continue;\n }\n\n if (next === CHAR_RIGHT_SQUARE_BRACKET) {\n isBracket = token.isBracket = true;\n isGlob = token.isGlob = true;\n finished = true;\n break;\n }\n }\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n\n if (opts.nonegate !== true && code === CHAR_EXCLAMATION_MARK && index === start) {\n negated = token.negated = true;\n start++;\n continue;\n }\n\n if (opts.noparen !== true && code === CHAR_LEFT_PARENTHESES) {\n isGlob = token.isGlob = true;\n\n if (scanToEnd === true) {\n while (eos() !== true && (code = advance())) {\n if (code === CHAR_LEFT_PARENTHESES) {\n backslashes = token.backslashes = true;\n code = advance();\n continue;\n }\n\n if (code === CHAR_RIGHT_PARENTHESES) {\n finished = true;\n break;\n }\n }\n continue;\n }\n break;\n }\n\n if (isGlob === true) {\n finished = true;\n\n if (scanToEnd === true) {\n continue;\n }\n\n break;\n }\n }\n\n if (opts.noext === true) {\n isExtglob = false;\n isGlob = false;\n }\n\n let base = str;\n let prefix = '';\n let glob = '';\n\n if (start > 0) {\n prefix = str.slice(0, start);\n str = str.slice(start);\n lastIndex -= start;\n }\n\n if (base && isGlob === true && lastIndex > 0) {\n base = str.slice(0, lastIndex);\n glob = str.slice(lastIndex);\n } else if (isGlob === true) {\n base = '';\n glob = str;\n } else {\n base = str;\n }\n\n if (base && base !== '' && base !== '/' && base !== str) {\n if (isPathSeparator(base.charCodeAt(base.length - 1))) {\n base = base.slice(0, -1);\n }\n }\n\n if (opts.unescape === true) {\n if (glob) glob = utils.removeBackslashes(glob);\n\n if (base && backslashes === true) {\n base = utils.removeBackslashes(base);\n }\n }\n\n const state = {\n prefix,\n input,\n start,\n base,\n glob,\n isBrace,\n isBracket,\n isGlob,\n isExtglob,\n isGlobstar,\n negated,\n negatedExtglob\n };\n\n if (opts.tokens === true) {\n state.maxDepth = 0;\n if (!isPathSeparator(code)) {\n tokens.push(token);\n }\n state.tokens = tokens;\n }\n\n if (opts.parts === true || opts.tokens === true) {\n let prevIndex;\n\n for (let idx = 0; idx < slashes.length; idx++) {\n const n = prevIndex ? prevIndex + 1 : start;\n const i = slashes[idx];\n const value = input.slice(n, i);\n if (opts.tokens) {\n if (idx === 0 && start !== 0) {\n tokens[idx].isPrefix = true;\n tokens[idx].value = prefix;\n } else {\n tokens[idx].value = value;\n }\n depth(tokens[idx]);\n state.maxDepth += tokens[idx].depth;\n }\n if (idx !== 0 || value !== '') {\n parts.push(value);\n }\n prevIndex = i;\n }\n\n if (prevIndex && prevIndex + 1 < input.length) {\n const value = input.slice(prevIndex + 1);\n parts.push(value);\n\n if (opts.tokens) {\n tokens[tokens.length - 1].value = value;\n depth(tokens[tokens.length - 1]);\n state.maxDepth += tokens[tokens.length - 1].depth;\n }\n }\n\n state.slashes = slashes;\n state.parts = parts;\n }\n\n return state;\n};\n\nmodule.exports = scan;\n","'use strict';\n\nconst constants = require('./constants');\nconst utils = require('./utils');\n\n/**\n * Constants\n */\n\nconst {\n MAX_LENGTH,\n POSIX_REGEX_SOURCE,\n REGEX_NON_SPECIAL_CHARS,\n REGEX_SPECIAL_CHARS_BACKREF,\n REPLACEMENTS\n} = constants;\n\n/**\n * Helpers\n */\n\nconst expandRange = (args, options) => {\n if (typeof options.expandRange === 'function') {\n return options.expandRange(...args, options);\n }\n\n args.sort();\n const value = `[${args.join('-')}]`;\n\n try {\n /* eslint-disable-next-line no-new */\n new RegExp(value);\n } catch (ex) {\n return args.map(v => utils.escapeRegex(v)).join('..');\n }\n\n return value;\n};\n\n/**\n * Create the message for a syntax error\n */\n\nconst syntaxError = (type, char) => {\n return `Missing ${type}: \"${char}\" - use \"\\\\\\\\${char}\" to match literal characters`;\n};\n\n/**\n * Parse the given input string.\n * @param {String} input\n * @param {Object} options\n * @return {Object}\n */\n\nconst parse = (input, options) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected a string');\n }\n\n input = REPLACEMENTS[input] || input;\n\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n\n let len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n const bos = { type: 'bos', value: '', output: opts.prepend || '' };\n const tokens = [bos];\n\n const capture = opts.capture ? '' : '?:';\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const PLATFORM_CHARS = constants.globChars(win32);\n const EXTGLOB_CHARS = constants.extglobChars(PLATFORM_CHARS);\n\n const {\n DOT_LITERAL,\n PLUS_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOT_SLASH,\n NO_DOTS_SLASH,\n QMARK,\n QMARK_NO_DOT,\n STAR,\n START_ANCHOR\n } = PLATFORM_CHARS;\n\n const globstar = opts => {\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const nodot = opts.dot ? '' : NO_DOT;\n const qmarkNoDot = opts.dot ? QMARK : QMARK_NO_DOT;\n let star = opts.bash === true ? globstar(opts) : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n // minimatch options support\n if (typeof opts.noext === 'boolean') {\n opts.noextglob = opts.noext;\n }\n\n const state = {\n input,\n index: -1,\n start: 0,\n dot: opts.dot === true,\n consumed: '',\n output: '',\n prefix: '',\n backtrack: false,\n negated: false,\n brackets: 0,\n braces: 0,\n parens: 0,\n quotes: 0,\n globstar: false,\n tokens\n };\n\n input = utils.removePrefix(input, state);\n len = input.length;\n\n const extglobs = [];\n const braces = [];\n const stack = [];\n let prev = bos;\n let value;\n\n /**\n * Tokenizing helpers\n */\n\n const eos = () => state.index === len - 1;\n const peek = state.peek = (n = 1) => input[state.index + n];\n const advance = state.advance = () => input[++state.index] || '';\n const remaining = () => input.slice(state.index + 1);\n const consume = (value = '', num = 0) => {\n state.consumed += value;\n state.index += num;\n };\n\n const append = token => {\n state.output += token.output != null ? token.output : token.value;\n consume(token.value);\n };\n\n const negate = () => {\n let count = 1;\n\n while (peek() === '!' && (peek(2) !== '(' || peek(3) === '?')) {\n advance();\n state.start++;\n count++;\n }\n\n if (count % 2 === 0) {\n return false;\n }\n\n state.negated = true;\n state.start++;\n return true;\n };\n\n const increment = type => {\n state[type]++;\n stack.push(type);\n };\n\n const decrement = type => {\n state[type]--;\n stack.pop();\n };\n\n /**\n * Push tokens onto the tokens array. This helper speeds up\n * tokenizing by 1) helping us avoid backtracking as much as possible,\n * and 2) helping us avoid creating extra tokens when consecutive\n * characters are plain text. This improves performance and simplifies\n * lookbehinds.\n */\n\n const push = tok => {\n if (prev.type === 'globstar') {\n const isBrace = state.braces > 0 && (tok.type === 'comma' || tok.type === 'brace');\n const isExtglob = tok.extglob === true || (extglobs.length && (tok.type === 'pipe' || tok.type === 'paren'));\n\n if (tok.type !== 'slash' && tok.type !== 'paren' && !isBrace && !isExtglob) {\n state.output = state.output.slice(0, -prev.output.length);\n prev.type = 'star';\n prev.value = '*';\n prev.output = star;\n state.output += prev.output;\n }\n }\n\n if (extglobs.length && tok.type !== 'paren') {\n extglobs[extglobs.length - 1].inner += tok.value;\n }\n\n if (tok.value || tok.output) append(tok);\n if (prev && prev.type === 'text' && tok.type === 'text') {\n prev.value += tok.value;\n prev.output = (prev.output || '') + tok.value;\n return;\n }\n\n tok.prev = prev;\n tokens.push(tok);\n prev = tok;\n };\n\n const extglobOpen = (type, value) => {\n const token = { ...EXTGLOB_CHARS[value], conditions: 1, inner: '' };\n\n token.prev = prev;\n token.parens = state.parens;\n token.output = state.output;\n const output = (opts.capture ? '(' : '') + token.open;\n\n increment('parens');\n push({ type, value, output: state.output ? '' : ONE_CHAR });\n push({ type: 'paren', extglob: true, value: advance(), output });\n extglobs.push(token);\n };\n\n const extglobClose = token => {\n let output = token.close + (opts.capture ? ')' : '');\n let rest;\n\n if (token.type === 'negate') {\n let extglobStar = star;\n\n if (token.inner && token.inner.length > 1 && token.inner.includes('/')) {\n extglobStar = globstar(opts);\n }\n\n if (extglobStar !== star || eos() || /^\\)+$/.test(remaining())) {\n output = token.close = `)$))${extglobStar}`;\n }\n\n if (token.inner.includes('*') && (rest = remaining()) && /^\\.[^\\\\/.]+$/.test(rest)) {\n // Any non-magical string (`.ts`) or even nested expression (`.{ts,tsx}`) can follow after the closing parenthesis.\n // In this case, we need to parse the string and use it in the output of the original pattern.\n // Suitable patterns: `/!(*.d).ts`, `/!(*.d).{ts,tsx}`, `**/!(*-dbg).@(js)`.\n //\n // Disabling the `fastpaths` option due to a problem with parsing strings as `.ts` in the pattern like `**/!(*.d).ts`.\n const expression = parse(rest, { ...options, fastpaths: false }).output;\n\n output = token.close = `)${expression})${extglobStar})`;\n }\n\n if (token.prev.type === 'bos') {\n state.negatedExtglob = true;\n }\n }\n\n push({ type: 'paren', extglob: true, value, output });\n decrement('parens');\n };\n\n /**\n * Fast paths\n */\n\n if (opts.fastpaths !== false && !/(^[*!]|[/()[\\]{}\"])/.test(input)) {\n let backslashes = false;\n\n let output = input.replace(REGEX_SPECIAL_CHARS_BACKREF, (m, esc, chars, first, rest, index) => {\n if (first === '\\\\') {\n backslashes = true;\n return m;\n }\n\n if (first === '?') {\n if (esc) {\n return esc + first + (rest ? QMARK.repeat(rest.length) : '');\n }\n if (index === 0) {\n return qmarkNoDot + (rest ? QMARK.repeat(rest.length) : '');\n }\n return QMARK.repeat(chars.length);\n }\n\n if (first === '.') {\n return DOT_LITERAL.repeat(chars.length);\n }\n\n if (first === '*') {\n if (esc) {\n return esc + first + (rest ? star : '');\n }\n return star;\n }\n return esc ? m : `\\\\${m}`;\n });\n\n if (backslashes === true) {\n if (opts.unescape === true) {\n output = output.replace(/\\\\/g, '');\n } else {\n output = output.replace(/\\\\+/g, m => {\n return m.length % 2 === 0 ? '\\\\\\\\' : (m ? '\\\\' : '');\n });\n }\n }\n\n if (output === input && opts.contains === true) {\n state.output = input;\n return state;\n }\n\n state.output = utils.wrapOutput(output, state, options);\n return state;\n }\n\n /**\n * Tokenize input until we reach end-of-string\n */\n\n while (!eos()) {\n value = advance();\n\n if (value === '\\u0000') {\n continue;\n }\n\n /**\n * Escaped characters\n */\n\n if (value === '\\\\') {\n const next = peek();\n\n if (next === '/' && opts.bash !== true) {\n continue;\n }\n\n if (next === '.' || next === ';') {\n continue;\n }\n\n if (!next) {\n value += '\\\\';\n push({ type: 'text', value });\n continue;\n }\n\n // collapse slashes to reduce potential for exploits\n const match = /^\\\\+/.exec(remaining());\n let slashes = 0;\n\n if (match && match[0].length > 2) {\n slashes = match[0].length;\n state.index += slashes;\n if (slashes % 2 !== 0) {\n value += '\\\\';\n }\n }\n\n if (opts.unescape === true) {\n value = advance();\n } else {\n value += advance();\n }\n\n if (state.brackets === 0) {\n push({ type: 'text', value });\n continue;\n }\n }\n\n /**\n * If we're inside a regex character class, continue\n * until we reach the closing bracket.\n */\n\n if (state.brackets > 0 && (value !== ']' || prev.value === '[' || prev.value === '[^')) {\n if (opts.posix !== false && value === ':') {\n const inner = prev.value.slice(1);\n if (inner.includes('[')) {\n prev.posix = true;\n\n if (inner.includes(':')) {\n const idx = prev.value.lastIndexOf('[');\n const pre = prev.value.slice(0, idx);\n const rest = prev.value.slice(idx + 2);\n const posix = POSIX_REGEX_SOURCE[rest];\n if (posix) {\n prev.value = pre + posix;\n state.backtrack = true;\n advance();\n\n if (!bos.output && tokens.indexOf(prev) === 1) {\n bos.output = ONE_CHAR;\n }\n continue;\n }\n }\n }\n }\n\n if ((value === '[' && peek() !== ':') || (value === '-' && peek() === ']')) {\n value = `\\\\${value}`;\n }\n\n if (value === ']' && (prev.value === '[' || prev.value === '[^')) {\n value = `\\\\${value}`;\n }\n\n if (opts.posix === true && value === '!' && prev.value === '[') {\n value = '^';\n }\n\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * If we're inside a quoted string, continue\n * until we reach the closing double quote.\n */\n\n if (state.quotes === 1 && value !== '\"') {\n value = utils.escapeRegex(value);\n prev.value += value;\n append({ value });\n continue;\n }\n\n /**\n * Double quotes\n */\n\n if (value === '\"') {\n state.quotes = state.quotes === 1 ? 0 : 1;\n if (opts.keepQuotes === true) {\n push({ type: 'text', value });\n }\n continue;\n }\n\n /**\n * Parentheses\n */\n\n if (value === '(') {\n increment('parens');\n push({ type: 'paren', value });\n continue;\n }\n\n if (value === ')') {\n if (state.parens === 0 && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '('));\n }\n\n const extglob = extglobs[extglobs.length - 1];\n if (extglob && state.parens === extglob.parens + 1) {\n extglobClose(extglobs.pop());\n continue;\n }\n\n push({ type: 'paren', value, output: state.parens ? ')' : '\\\\)' });\n decrement('parens');\n continue;\n }\n\n /**\n * Square brackets\n */\n\n if (value === '[') {\n if (opts.nobracket === true || !remaining().includes(']')) {\n if (opts.nobracket !== true && opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('closing', ']'));\n }\n\n value = `\\\\${value}`;\n } else {\n increment('brackets');\n }\n\n push({ type: 'bracket', value });\n continue;\n }\n\n if (value === ']') {\n if (opts.nobracket === true || (prev && prev.type === 'bracket' && prev.value.length === 1)) {\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n if (state.brackets === 0) {\n if (opts.strictBrackets === true) {\n throw new SyntaxError(syntaxError('opening', '['));\n }\n\n push({ type: 'text', value, output: `\\\\${value}` });\n continue;\n }\n\n decrement('brackets');\n\n const prevValue = prev.value.slice(1);\n if (prev.posix !== true && prevValue[0] === '^' && !prevValue.includes('/')) {\n value = `/${value}`;\n }\n\n prev.value += value;\n append({ value });\n\n // when literal brackets are explicitly disabled\n // assume we should match with a regex character class\n if (opts.literalBrackets === false || utils.hasRegexChars(prevValue)) {\n continue;\n }\n\n const escaped = utils.escapeRegex(prev.value);\n state.output = state.output.slice(0, -prev.value.length);\n\n // when literal brackets are explicitly enabled\n // assume we should escape the brackets to match literal characters\n if (opts.literalBrackets === true) {\n state.output += escaped;\n prev.value = escaped;\n continue;\n }\n\n // when the user specifies nothing, try to match both\n prev.value = `(${capture}${escaped}|${prev.value})`;\n state.output += prev.value;\n continue;\n }\n\n /**\n * Braces\n */\n\n if (value === '{' && opts.nobrace !== true) {\n increment('braces');\n\n const open = {\n type: 'brace',\n value,\n output: '(',\n outputIndex: state.output.length,\n tokensIndex: state.tokens.length\n };\n\n braces.push(open);\n push(open);\n continue;\n }\n\n if (value === '}') {\n const brace = braces[braces.length - 1];\n\n if (opts.nobrace === true || !brace) {\n push({ type: 'text', value, output: value });\n continue;\n }\n\n let output = ')';\n\n if (brace.dots === true) {\n const arr = tokens.slice();\n const range = [];\n\n for (let i = arr.length - 1; i >= 0; i--) {\n tokens.pop();\n if (arr[i].type === 'brace') {\n break;\n }\n if (arr[i].type !== 'dots') {\n range.unshift(arr[i].value);\n }\n }\n\n output = expandRange(range, opts);\n state.backtrack = true;\n }\n\n if (brace.comma !== true && brace.dots !== true) {\n const out = state.output.slice(0, brace.outputIndex);\n const toks = state.tokens.slice(brace.tokensIndex);\n brace.value = brace.output = '\\\\{';\n value = output = '\\\\}';\n state.output = out;\n for (const t of toks) {\n state.output += (t.output || t.value);\n }\n }\n\n push({ type: 'brace', value, output });\n decrement('braces');\n braces.pop();\n continue;\n }\n\n /**\n * Pipes\n */\n\n if (value === '|') {\n if (extglobs.length > 0) {\n extglobs[extglobs.length - 1].conditions++;\n }\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Commas\n */\n\n if (value === ',') {\n let output = value;\n\n const brace = braces[braces.length - 1];\n if (brace && stack[stack.length - 1] === 'braces') {\n brace.comma = true;\n output = '|';\n }\n\n push({ type: 'comma', value, output });\n continue;\n }\n\n /**\n * Slashes\n */\n\n if (value === '/') {\n // if the beginning of the glob is \"./\", advance the start\n // to the current index, and don't add the \"./\" characters\n // to the state. This greatly simplifies lookbehinds when\n // checking for BOS characters like \"!\" and \".\" (not \"./\")\n if (prev.type === 'dot' && state.index === state.start + 1) {\n state.start = state.index + 1;\n state.consumed = '';\n state.output = '';\n tokens.pop();\n prev = bos; // reset \"prev\" to the first token\n continue;\n }\n\n push({ type: 'slash', value, output: SLASH_LITERAL });\n continue;\n }\n\n /**\n * Dots\n */\n\n if (value === '.') {\n if (state.braces > 0 && prev.type === 'dot') {\n if (prev.value === '.') prev.output = DOT_LITERAL;\n const brace = braces[braces.length - 1];\n prev.type = 'dots';\n prev.output += value;\n prev.value += value;\n brace.dots = true;\n continue;\n }\n\n if ((state.braces + state.parens) === 0 && prev.type !== 'bos' && prev.type !== 'slash') {\n push({ type: 'text', value, output: DOT_LITERAL });\n continue;\n }\n\n push({ type: 'dot', value, output: DOT_LITERAL });\n continue;\n }\n\n /**\n * Question marks\n */\n\n if (value === '?') {\n const isGroup = prev && prev.value === '(';\n if (!isGroup && opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('qmark', value);\n continue;\n }\n\n if (prev && prev.type === 'paren') {\n const next = peek();\n let output = value;\n\n if (next === '<' && !utils.supportsLookbehinds()) {\n throw new Error('Node.js v10 or higher is required for regex lookbehinds');\n }\n\n if ((prev.value === '(' && !/[!=<:]/.test(next)) || (next === '<' && !/<([!=]|\\w+>)/.test(remaining()))) {\n output = `\\\\${value}`;\n }\n\n push({ type: 'text', value, output });\n continue;\n }\n\n if (opts.dot !== true && (prev.type === 'slash' || prev.type === 'bos')) {\n push({ type: 'qmark', value, output: QMARK_NO_DOT });\n continue;\n }\n\n push({ type: 'qmark', value, output: QMARK });\n continue;\n }\n\n /**\n * Exclamation\n */\n\n if (value === '!') {\n if (opts.noextglob !== true && peek() === '(') {\n if (peek(2) !== '?' || !/[!=<:]/.test(peek(3))) {\n extglobOpen('negate', value);\n continue;\n }\n }\n\n if (opts.nonegate !== true && state.index === 0) {\n negate();\n continue;\n }\n }\n\n /**\n * Plus\n */\n\n if (value === '+') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n extglobOpen('plus', value);\n continue;\n }\n\n if ((prev && prev.value === '(') || opts.regex === false) {\n push({ type: 'plus', value, output: PLUS_LITERAL });\n continue;\n }\n\n if ((prev && (prev.type === 'bracket' || prev.type === 'paren' || prev.type === 'brace')) || state.parens > 0) {\n push({ type: 'plus', value });\n continue;\n }\n\n push({ type: 'plus', value: PLUS_LITERAL });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value === '@') {\n if (opts.noextglob !== true && peek() === '(' && peek(2) !== '?') {\n push({ type: 'at', extglob: true, value, output: '' });\n continue;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Plain text\n */\n\n if (value !== '*') {\n if (value === '$' || value === '^') {\n value = `\\\\${value}`;\n }\n\n const match = REGEX_NON_SPECIAL_CHARS.exec(remaining());\n if (match) {\n value += match[0];\n state.index += match[0].length;\n }\n\n push({ type: 'text', value });\n continue;\n }\n\n /**\n * Stars\n */\n\n if (prev && (prev.type === 'globstar' || prev.star === true)) {\n prev.type = 'star';\n prev.star = true;\n prev.value += value;\n prev.output = star;\n state.backtrack = true;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n let rest = remaining();\n if (opts.noextglob !== true && /^\\([^?]/.test(rest)) {\n extglobOpen('star', value);\n continue;\n }\n\n if (prev.type === 'star') {\n if (opts.noglobstar === true) {\n consume(value);\n continue;\n }\n\n const prior = prev.prev;\n const before = prior.prev;\n const isStart = prior.type === 'slash' || prior.type === 'bos';\n const afterStar = before && (before.type === 'star' || before.type === 'globstar');\n\n if (opts.bash === true && (!isStart || (rest[0] && rest[0] !== '/'))) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n const isBrace = state.braces > 0 && (prior.type === 'comma' || prior.type === 'brace');\n const isExtglob = extglobs.length && (prior.type === 'pipe' || prior.type === 'paren');\n if (!isStart && prior.type !== 'paren' && !isBrace && !isExtglob) {\n push({ type: 'star', value, output: '' });\n continue;\n }\n\n // strip consecutive `/**/`\n while (rest.slice(0, 3) === '/**') {\n const after = input[state.index + 4];\n if (after && after !== '/') {\n break;\n }\n rest = rest.slice(3);\n consume('/**', 3);\n }\n\n if (prior.type === 'bos' && eos()) {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = globstar(opts);\n state.output = prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && !afterStar && eos()) {\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = globstar(opts) + (opts.strictSlashes ? ')' : '|$)');\n prev.value += value;\n state.globstar = true;\n state.output += prior.output + prev.output;\n consume(value);\n continue;\n }\n\n if (prior.type === 'slash' && prior.prev.type !== 'bos' && rest[0] === '/') {\n const end = rest[1] !== void 0 ? '|$' : '';\n\n state.output = state.output.slice(0, -(prior.output + prev.output).length);\n prior.output = `(?:${prior.output}`;\n\n prev.type = 'globstar';\n prev.output = `${globstar(opts)}${SLASH_LITERAL}|${SLASH_LITERAL}${end})`;\n prev.value += value;\n\n state.output += prior.output + prev.output;\n state.globstar = true;\n\n consume(value + advance());\n\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n if (prior.type === 'bos' && rest[0] === '/') {\n prev.type = 'globstar';\n prev.value += value;\n prev.output = `(?:^|${SLASH_LITERAL}|${globstar(opts)}${SLASH_LITERAL})`;\n state.output = prev.output;\n state.globstar = true;\n consume(value + advance());\n push({ type: 'slash', value: '/', output: '' });\n continue;\n }\n\n // remove single star from output\n state.output = state.output.slice(0, -prev.output.length);\n\n // reset previous token to globstar\n prev.type = 'globstar';\n prev.output = globstar(opts);\n prev.value += value;\n\n // reset output with globstar\n state.output += prev.output;\n state.globstar = true;\n consume(value);\n continue;\n }\n\n const token = { type: 'star', value, output: star };\n\n if (opts.bash === true) {\n token.output = '.*?';\n if (prev.type === 'bos' || prev.type === 'slash') {\n token.output = nodot + token.output;\n }\n push(token);\n continue;\n }\n\n if (prev && (prev.type === 'bracket' || prev.type === 'paren') && opts.regex === true) {\n token.output = value;\n push(token);\n continue;\n }\n\n if (state.index === state.start || prev.type === 'slash' || prev.type === 'dot') {\n if (prev.type === 'dot') {\n state.output += NO_DOT_SLASH;\n prev.output += NO_DOT_SLASH;\n\n } else if (opts.dot === true) {\n state.output += NO_DOTS_SLASH;\n prev.output += NO_DOTS_SLASH;\n\n } else {\n state.output += nodot;\n prev.output += nodot;\n }\n\n if (peek() !== '*') {\n state.output += ONE_CHAR;\n prev.output += ONE_CHAR;\n }\n }\n\n push(token);\n }\n\n while (state.brackets > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ']'));\n state.output = utils.escapeLast(state.output, '[');\n decrement('brackets');\n }\n\n while (state.parens > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', ')'));\n state.output = utils.escapeLast(state.output, '(');\n decrement('parens');\n }\n\n while (state.braces > 0) {\n if (opts.strictBrackets === true) throw new SyntaxError(syntaxError('closing', '}'));\n state.output = utils.escapeLast(state.output, '{');\n decrement('braces');\n }\n\n if (opts.strictSlashes !== true && (prev.type === 'star' || prev.type === 'bracket')) {\n push({ type: 'maybe_slash', value: '', output: `${SLASH_LITERAL}?` });\n }\n\n // rebuild the output if we had to backtrack at any point\n if (state.backtrack === true) {\n state.output = '';\n\n for (const token of state.tokens) {\n state.output += token.output != null ? token.output : token.value;\n\n if (token.suffix) {\n state.output += token.suffix;\n }\n }\n }\n\n return state;\n};\n\n/**\n * Fast paths for creating regular expressions for common glob patterns.\n * This can significantly speed up processing and has very little downside\n * impact when none of the fast paths match.\n */\n\nparse.fastpaths = (input, options) => {\n const opts = { ...options };\n const max = typeof opts.maxLength === 'number' ? Math.min(MAX_LENGTH, opts.maxLength) : MAX_LENGTH;\n const len = input.length;\n if (len > max) {\n throw new SyntaxError(`Input length: ${len}, exceeds maximum allowed length: ${max}`);\n }\n\n input = REPLACEMENTS[input] || input;\n const win32 = utils.isWindows(options);\n\n // create constants based on platform, for windows or posix\n const {\n DOT_LITERAL,\n SLASH_LITERAL,\n ONE_CHAR,\n DOTS_SLASH,\n NO_DOT,\n NO_DOTS,\n NO_DOTS_SLASH,\n STAR,\n START_ANCHOR\n } = constants.globChars(win32);\n\n const nodot = opts.dot ? NO_DOTS : NO_DOT;\n const slashDot = opts.dot ? NO_DOTS_SLASH : NO_DOT;\n const capture = opts.capture ? '' : '?:';\n const state = { negated: false, prefix: '' };\n let star = opts.bash === true ? '.*?' : STAR;\n\n if (opts.capture) {\n star = `(${star})`;\n }\n\n const globstar = opts => {\n if (opts.noglobstar === true) return star;\n return `(${capture}(?:(?!${START_ANCHOR}${opts.dot ? DOTS_SLASH : DOT_LITERAL}).)*?)`;\n };\n\n const create = str => {\n switch (str) {\n case '*':\n return `${nodot}${ONE_CHAR}${star}`;\n\n case '.*':\n return `${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*.*':\n return `${nodot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '*/*':\n return `${nodot}${star}${SLASH_LITERAL}${ONE_CHAR}${slashDot}${star}`;\n\n case '**':\n return nodot + globstar(opts);\n\n case '**/*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${ONE_CHAR}${star}`;\n\n case '**/*.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${slashDot}${star}${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n case '**/.*':\n return `(?:${nodot}${globstar(opts)}${SLASH_LITERAL})?${DOT_LITERAL}${ONE_CHAR}${star}`;\n\n default: {\n const match = /^(.*?)\\.(\\w+)$/.exec(str);\n if (!match) return;\n\n const source = create(match[1]);\n if (!source) return;\n\n return source + DOT_LITERAL + match[2];\n }\n }\n };\n\n const output = utils.removePrefix(input, state);\n let source = create(output);\n\n if (source && opts.strictSlashes !== true) {\n source += `${SLASH_LITERAL}?`;\n }\n\n return source;\n};\n\nmodule.exports = parse;\n","'use strict';\n\nconst path = require('path');\nconst scan = require('./scan');\nconst parse = require('./parse');\nconst utils = require('./utils');\nconst constants = require('./constants');\nconst isObject = val => val && typeof val === 'object' && !Array.isArray(val);\n\n/**\n * Creates a matcher function from one or more glob patterns. The\n * returned function takes a string to match as its first argument,\n * and returns true if the string is a match. The returned matcher\n * function also takes a boolean as the second argument that, when true,\n * returns an object with additional information.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch(glob[, options]);\n *\n * const isMatch = picomatch('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @name picomatch\n * @param {String|Array} `globs` One or more glob patterns.\n * @param {Object=} `options`\n * @return {Function=} Returns a matcher function.\n * @api public\n */\n\nconst picomatch = (glob, options, returnState = false) => {\n if (Array.isArray(glob)) {\n const fns = glob.map(input => picomatch(input, options, returnState));\n const arrayMatcher = str => {\n for (const isMatch of fns) {\n const state = isMatch(str);\n if (state) return state;\n }\n return false;\n };\n return arrayMatcher;\n }\n\n const isState = isObject(glob) && glob.tokens && glob.input;\n\n if (glob === '' || (typeof glob !== 'string' && !isState)) {\n throw new TypeError('Expected pattern to be a non-empty string');\n }\n\n const opts = options || {};\n const posix = utils.isWindows(options);\n const regex = isState\n ? picomatch.compileRe(glob, options)\n : picomatch.makeRe(glob, options, false, true);\n\n const state = regex.state;\n delete regex.state;\n\n let isIgnored = () => false;\n if (opts.ignore) {\n const ignoreOpts = { ...options, ignore: null, onMatch: null, onResult: null };\n isIgnored = picomatch(opts.ignore, ignoreOpts, returnState);\n }\n\n const matcher = (input, returnObject = false) => {\n const { isMatch, match, output } = picomatch.test(input, regex, options, { glob, posix });\n const result = { glob, state, regex, posix, input, output, match, isMatch };\n\n if (typeof opts.onResult === 'function') {\n opts.onResult(result);\n }\n\n if (isMatch === false) {\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (isIgnored(input)) {\n if (typeof opts.onIgnore === 'function') {\n opts.onIgnore(result);\n }\n result.isMatch = false;\n return returnObject ? result : false;\n }\n\n if (typeof opts.onMatch === 'function') {\n opts.onMatch(result);\n }\n return returnObject ? result : true;\n };\n\n if (returnState) {\n matcher.state = state;\n }\n\n return matcher;\n};\n\n/**\n * Test `input` with the given `regex`. This is used by the main\n * `picomatch()` function to test the input string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.test(input, regex[, options]);\n *\n * console.log(picomatch.test('foo/bar', /^(?:([^/]*?)\\/([^/]*?))$/));\n * // { isMatch: true, match: [ 'foo/', 'foo', 'bar' ], output: 'foo/bar' }\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp} `regex`\n * @return {Object} Returns an object with matching info.\n * @api public\n */\n\npicomatch.test = (input, regex, options, { glob, posix } = {}) => {\n if (typeof input !== 'string') {\n throw new TypeError('Expected input to be a string');\n }\n\n if (input === '') {\n return { isMatch: false, output: '' };\n }\n\n const opts = options || {};\n const format = opts.format || (posix ? utils.toPosixSlashes : null);\n let match = input === glob;\n let output = (match && format) ? format(input) : input;\n\n if (match === false) {\n output = format ? format(input) : input;\n match = output === glob;\n }\n\n if (match === false || opts.capture === true) {\n if (opts.matchBase === true || opts.basename === true) {\n match = picomatch.matchBase(input, regex, options, posix);\n } else {\n match = regex.exec(output);\n }\n }\n\n return { isMatch: Boolean(match), match, output };\n};\n\n/**\n * Match the basename of a filepath.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.matchBase(input, glob[, options]);\n * console.log(picomatch.matchBase('foo/bar.js', '*.js'); // true\n * ```\n * @param {String} `input` String to test.\n * @param {RegExp|String} `glob` Glob pattern or regex created by [.makeRe](#makeRe).\n * @return {Boolean}\n * @api public\n */\n\npicomatch.matchBase = (input, glob, options, posix = utils.isWindows(options)) => {\n const regex = glob instanceof RegExp ? glob : picomatch.makeRe(glob, options);\n return regex.test(path.basename(input));\n};\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.isMatch(string, patterns[, options]);\n *\n * console.log(picomatch.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(picomatch.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String|Array} str The string to test.\n * @param {String|Array} patterns One or more glob patterns to use for matching.\n * @param {Object} [options] See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\npicomatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const result = picomatch.parse(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as a regex source string.\n * @api public\n */\n\npicomatch.parse = (pattern, options) => {\n if (Array.isArray(pattern)) return pattern.map(p => picomatch.parse(p, options));\n return parse(pattern, { ...options, fastpaths: false });\n};\n\n/**\n * Scan a glob pattern to separate the pattern into segments.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.scan(input[, options]);\n *\n * const result = picomatch.scan('!./foo/*.js');\n * console.log(result);\n * { prefix: '!./',\n * input: '!./foo/*.js',\n * start: 3,\n * base: 'foo',\n * glob: '*.js',\n * isBrace: false,\n * isBracket: false,\n * isGlob: true,\n * isExtglob: false,\n * isGlobstar: false,\n * negated: true }\n * ```\n * @param {String} `input` Glob pattern to scan.\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\npicomatch.scan = (input, options) => scan(input, options);\n\n/**\n * Compile a regular expression from the `state` object returned by the\n * [parse()](#parse) method.\n *\n * @param {Object} `state`\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Intended for implementors, this argument allows you to return the raw output from the parser.\n * @param {Boolean} `returnState` Adds the state to a `state` property on the returned regex. Useful for implementors and debugging.\n * @return {RegExp}\n * @api public\n */\n\npicomatch.compileRe = (state, options, returnOutput = false, returnState = false) => {\n if (returnOutput === true) {\n return state.output;\n }\n\n const opts = options || {};\n const prepend = opts.contains ? '' : '^';\n const append = opts.contains ? '' : '$';\n\n let source = `${prepend}(?:${state.output})${append}`;\n if (state && state.negated === true) {\n source = `^(?!${source}).*$`;\n }\n\n const regex = picomatch.toRegex(source, options);\n if (returnState === true) {\n regex.state = state;\n }\n\n return regex;\n};\n\n/**\n * Create a regular expression from a parsed glob pattern.\n *\n * ```js\n * const picomatch = require('picomatch');\n * const state = picomatch.parse('*.js');\n * // picomatch.compileRe(state[, options]);\n *\n * console.log(picomatch.compileRe(state));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `state` The object returned from the `.parse` method.\n * @param {Object} `options`\n * @param {Boolean} `returnOutput` Implementors may use this argument to return the compiled output, instead of a regular expression. This is not exposed on the options to prevent end-users from mutating the result.\n * @param {Boolean} `returnState` Implementors may use this argument to return the state from the parsed glob with the returned regular expression.\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\npicomatch.makeRe = (input, options = {}, returnOutput = false, returnState = false) => {\n if (!input || typeof input !== 'string') {\n throw new TypeError('Expected a non-empty string');\n }\n\n let parsed = { negated: false, fastpaths: true };\n\n if (options.fastpaths !== false && (input[0] === '.' || input[0] === '*')) {\n parsed.output = parse.fastpaths(input, options);\n }\n\n if (!parsed.output) {\n parsed = parse(input, options);\n }\n\n return picomatch.compileRe(parsed, options, returnOutput, returnState);\n};\n\n/**\n * Create a regular expression from the given regex source string.\n *\n * ```js\n * const picomatch = require('picomatch');\n * // picomatch.toRegex(source[, options]);\n *\n * const { output } = picomatch.parse('*.js');\n * console.log(picomatch.toRegex(output));\n * //=> /^(?:(?!\\.)(?=.)[^/]*?\\.js)$/\n * ```\n * @param {String} `source` Regular expression source string.\n * @param {Object} `options`\n * @return {RegExp}\n * @api public\n */\n\npicomatch.toRegex = (source, options) => {\n try {\n const opts = options || {};\n return new RegExp(source, opts.flags || (opts.nocase ? 'i' : ''));\n } catch (err) {\n if (options && options.debug === true) throw err;\n return /$^/;\n }\n};\n\n/**\n * Picomatch constants.\n * @return {Object}\n */\n\npicomatch.constants = constants;\n\n/**\n * Expose \"picomatch\"\n */\n\nmodule.exports = picomatch;\n","'use strict';\n\nmodule.exports = require('./lib/picomatch');\n","'use strict';\n\nconst util = require('util');\nconst braces = require('braces');\nconst picomatch = require('picomatch');\nconst utils = require('picomatch/lib/utils');\n\nconst isEmptyString = v => v === '' || v === './';\nconst hasBraces = v => {\n const index = v.indexOf('{');\n return index > -1 && v.indexOf('}', index) > -1;\n};\n\n/**\n * Returns an array of strings that match one or more glob patterns.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm(list, patterns[, options]);\n *\n * console.log(mm(['a.js', 'a.txt'], ['*.js']));\n * //=> [ 'a.js' ]\n * ```\n * @param {String|Array<string>} `list` List of strings to match.\n * @param {String|Array<string>} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options)\n * @return {Array} Returns an array of matches\n * @summary false\n * @api public\n */\n\nconst micromatch = (list, patterns, options) => {\n patterns = [].concat(patterns);\n list = [].concat(list);\n\n let omit = new Set();\n let keep = new Set();\n let items = new Set();\n let negatives = 0;\n\n let onResult = state => {\n items.add(state.output);\n if (options && options.onResult) {\n options.onResult(state);\n }\n };\n\n for (let i = 0; i < patterns.length; i++) {\n let isMatch = picomatch(String(patterns[i]), { ...options, onResult }, true);\n let negated = isMatch.state.negated || isMatch.state.negatedExtglob;\n if (negated) negatives++;\n\n for (let item of list) {\n let matched = isMatch(item, true);\n\n let match = negated ? !matched.isMatch : matched.isMatch;\n if (!match) continue;\n\n if (negated) {\n omit.add(matched.output);\n } else {\n omit.delete(matched.output);\n keep.add(matched.output);\n }\n }\n }\n\n let result = negatives === patterns.length ? [...items] : [...keep];\n let matches = result.filter(item => !omit.has(item));\n\n if (options && matches.length === 0) {\n if (options.failglob === true) {\n throw new Error(`No matches found for \"${patterns.join(', ')}\"`);\n }\n\n if (options.nonull === true || options.nullglob === true) {\n return options.unescape ? patterns.map(p => p.replace(/\\\\/g, '')) : patterns;\n }\n }\n\n return matches;\n};\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.match = micromatch;\n\n/**\n * Returns a matcher function from the given glob `pattern` and `options`.\n * The returned function takes a string to match as its only argument and returns\n * true if the string is a match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matcher(pattern[, options]);\n *\n * const isMatch = mm.matcher('*.!(*a)');\n * console.log(isMatch('a.a')); //=> false\n * console.log(isMatch('a.b')); //=> true\n * ```\n * @param {String} `pattern` Glob pattern\n * @param {Object} `options`\n * @return {Function} Returns a matcher function.\n * @api public\n */\n\nmicromatch.matcher = (pattern, options) => picomatch(pattern, options);\n\n/**\n * Returns true if **any** of the given glob `patterns` match the specified `string`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.isMatch(string, patterns[, options]);\n *\n * console.log(mm.isMatch('a.a', ['b.*', '*.a'])); //=> true\n * console.log(mm.isMatch('a.a', 'b.*')); //=> false\n * ```\n * @param {String} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `[options]` See available [options](#options).\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.isMatch = (str, patterns, options) => picomatch(patterns, options)(str);\n\n/**\n * Backwards compatibility\n */\n\nmicromatch.any = micromatch.isMatch;\n\n/**\n * Returns a list of strings that _**do not match any**_ of the given `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.not(list, patterns[, options]);\n *\n * console.log(mm.not(['a.a', 'b.b', 'c.c'], '*.a'));\n * //=> ['b.b', 'c.c']\n * ```\n * @param {Array} `list` Array of strings to match.\n * @param {String|Array} `patterns` One or more glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array} Returns an array of strings that **do not match** the given patterns.\n * @api public\n */\n\nmicromatch.not = (list, patterns, options = {}) => {\n patterns = [].concat(patterns).map(String);\n let result = new Set();\n let items = [];\n\n let onResult = state => {\n if (options.onResult) options.onResult(state);\n items.push(state.output);\n };\n\n let matches = new Set(micromatch(list, patterns, { ...options, onResult }));\n\n for (let item of items) {\n if (!matches.has(item)) {\n result.add(item);\n }\n }\n return [...result];\n};\n\n/**\n * Returns true if the given `string` contains the given pattern. Similar\n * to [.isMatch](#isMatch) but the pattern can match any part of the string.\n *\n * ```js\n * var mm = require('micromatch');\n * // mm.contains(string, pattern[, options]);\n *\n * console.log(mm.contains('aa/bb/cc', '*b'));\n * //=> true\n * console.log(mm.contains('aa/bb/cc', '*d'));\n * //=> false\n * ```\n * @param {String} `str` The string to match.\n * @param {String|Array} `patterns` Glob pattern to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any of the patterns matches any part of `str`.\n * @api public\n */\n\nmicromatch.contains = (str, pattern, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n if (Array.isArray(pattern)) {\n return pattern.some(p => micromatch.contains(str, p, options));\n }\n\n if (typeof pattern === 'string') {\n if (isEmptyString(str) || isEmptyString(pattern)) {\n return false;\n }\n\n if (str.includes(pattern) || (str.startsWith('./') && str.slice(2).includes(pattern))) {\n return true;\n }\n }\n\n return micromatch.isMatch(str, pattern, { ...options, contains: true });\n};\n\n/**\n * Filter the keys of the given object with the given `glob` pattern\n * and `options`. Does not attempt to match nested keys. If you need this feature,\n * use [glob-object][] instead.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.matchKeys(object, patterns[, options]);\n *\n * const obj = { aa: 'a', ab: 'b', ac: 'c' };\n * console.log(mm.matchKeys(obj, '*b'));\n * //=> { ab: 'b' }\n * ```\n * @param {Object} `object` The object with keys to filter.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Object} Returns an object with only keys that match the given patterns.\n * @api public\n */\n\nmicromatch.matchKeys = (obj, patterns, options) => {\n if (!utils.isObject(obj)) {\n throw new TypeError('Expected the first argument to be an object');\n }\n let keys = micromatch(Object.keys(obj), patterns, options);\n let res = {};\n for (let key of keys) res[key] = obj[key];\n return res;\n};\n\n/**\n * Returns true if some of the strings in the given `list` match any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.some(list, patterns[, options]);\n *\n * console.log(mm.some(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // true\n * console.log(mm.some(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test. Returns as soon as the first match is found.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any `patterns` matches any of the strings in `list`\n * @api public\n */\n\nmicromatch.some = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (items.some(item => isMatch(item))) {\n return true;\n }\n }\n return false;\n};\n\n/**\n * Returns true if every string in the given `list` matches\n * any of the given glob `patterns`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.every(list, patterns[, options]);\n *\n * console.log(mm.every('foo.js', ['foo.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js']));\n * // true\n * console.log(mm.every(['foo.js', 'bar.js'], ['*.js', '!foo.js']));\n * // false\n * console.log(mm.every(['foo.js'], ['*.js', '!foo.js']));\n * // false\n * ```\n * @param {String|Array} `list` The string or array of strings to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if all `patterns` matches all of the strings in `list`\n * @api public\n */\n\nmicromatch.every = (list, patterns, options) => {\n let items = [].concat(list);\n\n for (let pattern of [].concat(patterns)) {\n let isMatch = picomatch(String(pattern), options);\n if (!items.every(item => isMatch(item))) {\n return false;\n }\n }\n return true;\n};\n\n/**\n * Returns true if **all** of the given `patterns` match\n * the specified string.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.all(string, patterns[, options]);\n *\n * console.log(mm.all('foo.js', ['foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', '!foo.js']));\n * // false\n *\n * console.log(mm.all('foo.js', ['*.js', 'foo.js']));\n * // true\n *\n * console.log(mm.all('foo.js', ['*.js', 'f*', '*o*', '*o.js']));\n * // true\n * ```\n * @param {String|Array} `str` The string to test.\n * @param {String|Array} `patterns` One or more glob patterns to use for matching.\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Boolean} Returns true if any patterns match `str`\n * @api public\n */\n\nmicromatch.all = (str, patterns, options) => {\n if (typeof str !== 'string') {\n throw new TypeError(`Expected a string: \"${util.inspect(str)}\"`);\n }\n\n return [].concat(patterns).every(p => picomatch(p, options)(str));\n};\n\n/**\n * Returns an array of matches captured by `pattern` in `string, or `null` if the pattern did not match.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.capture(pattern, string[, options]);\n *\n * console.log(mm.capture('test/*.js', 'test/foo.js'));\n * //=> ['foo']\n * console.log(mm.capture('test/*.js', 'foo/bar.css'));\n * //=> null\n * ```\n * @param {String} `glob` Glob pattern to use for matching.\n * @param {String} `input` String to match\n * @param {Object} `options` See available [options](#options) for changing how matches are performed\n * @return {Array|null} Returns an array of captures if the input matches the glob pattern, otherwise `null`.\n * @api public\n */\n\nmicromatch.capture = (glob, input, options) => {\n let posix = utils.isWindows(options);\n let regex = picomatch.makeRe(String(glob), { ...options, capture: true });\n let match = regex.exec(posix ? utils.toPosixSlashes(input) : input);\n\n if (match) {\n return match.slice(1).map(v => v === void 0 ? '' : v);\n }\n};\n\n/**\n * Create a regular expression from the given glob `pattern`.\n *\n * ```js\n * const mm = require('micromatch');\n * // mm.makeRe(pattern[, options]);\n *\n * console.log(mm.makeRe('*.js'));\n * //=> /^(?:(\\.[\\\\\\/])?(?!\\.)(?=.)[^\\/]*?\\.js)$/\n * ```\n * @param {String} `pattern` A glob pattern to convert to regex.\n * @param {Object} `options`\n * @return {RegExp} Returns a regex created from the given pattern.\n * @api public\n */\n\nmicromatch.makeRe = (...args) => picomatch.makeRe(...args);\n\n/**\n * Scan a glob pattern to separate the pattern into segments. Used\n * by the [split](#split) method.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.scan(pattern[, options]);\n * ```\n * @param {String} `pattern`\n * @param {Object} `options`\n * @return {Object} Returns an object with\n * @api public\n */\n\nmicromatch.scan = (...args) => picomatch.scan(...args);\n\n/**\n * Parse a glob pattern to create the source string for a regular\n * expression.\n *\n * ```js\n * const mm = require('micromatch');\n * const state = mm.parse(pattern[, options]);\n * ```\n * @param {String} `glob`\n * @param {Object} `options`\n * @return {Object} Returns an object with useful properties and output to be used as regex source string.\n * @api public\n */\n\nmicromatch.parse = (patterns, options) => {\n let res = [];\n for (let pattern of [].concat(patterns || [])) {\n for (let str of braces(String(pattern), options)) {\n res.push(picomatch.parse(str, options));\n }\n }\n return res;\n};\n\n/**\n * Process the given brace `pattern`.\n *\n * ```js\n * const { braces } = require('micromatch');\n * console.log(braces('foo/{a,b,c}/bar'));\n * //=> [ 'foo/(a|b|c)/bar' ]\n *\n * console.log(braces('foo/{a,b,c}/bar', { expand: true }));\n * //=> [ 'foo/a/bar', 'foo/b/bar', 'foo/c/bar' ]\n * ```\n * @param {String} `pattern` String with brace pattern to process.\n * @param {Object} `options` Any [options](#options) to change how expansion is performed. See the [braces][] library for all available options.\n * @return {Array}\n * @api public\n */\n\nmicromatch.braces = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n if ((options && options.nobrace === true) || !hasBraces(pattern)) {\n return [pattern];\n }\n return braces(pattern, options);\n};\n\n/**\n * Expand braces\n */\n\nmicromatch.braceExpand = (pattern, options) => {\n if (typeof pattern !== 'string') throw new TypeError('Expected a string');\n return micromatch.braces(pattern, { ...options, expand: true });\n};\n\n/**\n * Expose micromatch\n */\n\n// exposed for tests\nmicromatch.hasBraces = hasBraces;\nmodule.exports = micromatch;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isAbsolute = exports.partitionAbsoluteAndRelative = exports.removeDuplicateSlashes = exports.matchAny = exports.convertPatternsToRe = exports.makeRe = exports.getPatternParts = exports.expandBraceExpansion = exports.expandPatternsWithBraceExpansion = exports.isAffectDepthOfReadingPattern = exports.endsWithSlashGlobStar = exports.hasGlobStar = exports.getBaseDirectory = exports.isPatternRelatedToParentDirectory = exports.getPatternsOutsideCurrentDirectory = exports.getPatternsInsideCurrentDirectory = exports.getPositivePatterns = exports.getNegativePatterns = exports.isPositivePattern = exports.isNegativePattern = exports.convertToNegativePattern = exports.convertToPositivePattern = exports.isDynamicPattern = exports.isStaticPattern = void 0;\nconst path = require(\"path\");\nconst globParent = require(\"glob-parent\");\nconst micromatch = require(\"micromatch\");\nconst GLOBSTAR = '**';\nconst ESCAPE_SYMBOL = '\\\\';\nconst COMMON_GLOB_SYMBOLS_RE = /[*?]|^!/;\nconst REGEX_CHARACTER_CLASS_SYMBOLS_RE = /\\[[^[]*]/;\nconst REGEX_GROUP_SYMBOLS_RE = /(?:^|[^!*+?@])\\([^(]*\\|[^|]*\\)/;\nconst GLOB_EXTENSION_SYMBOLS_RE = /[!*+?@]\\([^(]*\\)/;\nconst BRACE_EXPANSION_SEPARATORS_RE = /,|\\.\\./;\n/**\n * Matches a sequence of two or more consecutive slashes, excluding the first two slashes at the beginning of the string.\n * The latter is due to the presence of the device path at the beginning of the UNC path.\n */\nconst DOUBLE_SLASH_RE = /(?!^)\\/{2,}/g;\nfunction isStaticPattern(pattern, options = {}) {\n return !isDynamicPattern(pattern, options);\n}\nexports.isStaticPattern = isStaticPattern;\nfunction isDynamicPattern(pattern, options = {}) {\n /**\n * A special case with an empty string is necessary for matching patterns that start with a forward slash.\n * An empty string cannot be a dynamic pattern.\n * For example, the pattern `/lib/*` will be spread into parts: '', 'lib', '*'.\n */\n if (pattern === '') {\n return false;\n }\n /**\n * When the `caseSensitiveMatch` option is disabled, all patterns must be marked as dynamic, because we cannot check\n * filepath directly (without read directory).\n */\n if (options.caseSensitiveMatch === false || pattern.includes(ESCAPE_SYMBOL)) {\n return true;\n }\n if (COMMON_GLOB_SYMBOLS_RE.test(pattern) || REGEX_CHARACTER_CLASS_SYMBOLS_RE.test(pattern) || REGEX_GROUP_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.extglob !== false && GLOB_EXTENSION_SYMBOLS_RE.test(pattern)) {\n return true;\n }\n if (options.braceExpansion !== false && hasBraceExpansion(pattern)) {\n return true;\n }\n return false;\n}\nexports.isDynamicPattern = isDynamicPattern;\nfunction hasBraceExpansion(pattern) {\n const openingBraceIndex = pattern.indexOf('{');\n if (openingBraceIndex === -1) {\n return false;\n }\n const closingBraceIndex = pattern.indexOf('}', openingBraceIndex + 1);\n if (closingBraceIndex === -1) {\n return false;\n }\n const braceContent = pattern.slice(openingBraceIndex, closingBraceIndex);\n return BRACE_EXPANSION_SEPARATORS_RE.test(braceContent);\n}\nfunction convertToPositivePattern(pattern) {\n return isNegativePattern(pattern) ? pattern.slice(1) : pattern;\n}\nexports.convertToPositivePattern = convertToPositivePattern;\nfunction convertToNegativePattern(pattern) {\n return '!' + pattern;\n}\nexports.convertToNegativePattern = convertToNegativePattern;\nfunction isNegativePattern(pattern) {\n return pattern.startsWith('!') && pattern[1] !== '(';\n}\nexports.isNegativePattern = isNegativePattern;\nfunction isPositivePattern(pattern) {\n return !isNegativePattern(pattern);\n}\nexports.isPositivePattern = isPositivePattern;\nfunction getNegativePatterns(patterns) {\n return patterns.filter(isNegativePattern);\n}\nexports.getNegativePatterns = getNegativePatterns;\nfunction getPositivePatterns(patterns) {\n return patterns.filter(isPositivePattern);\n}\nexports.getPositivePatterns = getPositivePatterns;\n/**\n * Returns patterns that can be applied inside the current directory.\n *\n * @example\n * // ['./*', '*', 'a/*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsInsideCurrentDirectory(patterns) {\n return patterns.filter((pattern) => !isPatternRelatedToParentDirectory(pattern));\n}\nexports.getPatternsInsideCurrentDirectory = getPatternsInsideCurrentDirectory;\n/**\n * Returns patterns to be expanded relative to (outside) the current directory.\n *\n * @example\n * // ['../*', './../*']\n * getPatternsInsideCurrentDirectory(['./*', '*', 'a/*', '../*', './../*'])\n */\nfunction getPatternsOutsideCurrentDirectory(patterns) {\n return patterns.filter(isPatternRelatedToParentDirectory);\n}\nexports.getPatternsOutsideCurrentDirectory = getPatternsOutsideCurrentDirectory;\nfunction isPatternRelatedToParentDirectory(pattern) {\n return pattern.startsWith('..') || pattern.startsWith('./..');\n}\nexports.isPatternRelatedToParentDirectory = isPatternRelatedToParentDirectory;\nfunction getBaseDirectory(pattern) {\n return globParent(pattern, { flipBackslashes: false });\n}\nexports.getBaseDirectory = getBaseDirectory;\nfunction hasGlobStar(pattern) {\n return pattern.includes(GLOBSTAR);\n}\nexports.hasGlobStar = hasGlobStar;\nfunction endsWithSlashGlobStar(pattern) {\n return pattern.endsWith('/' + GLOBSTAR);\n}\nexports.endsWithSlashGlobStar = endsWithSlashGlobStar;\nfunction isAffectDepthOfReadingPattern(pattern) {\n const basename = path.basename(pattern);\n return endsWithSlashGlobStar(pattern) || isStaticPattern(basename);\n}\nexports.isAffectDepthOfReadingPattern = isAffectDepthOfReadingPattern;\nfunction expandPatternsWithBraceExpansion(patterns) {\n return patterns.reduce((collection, pattern) => {\n return collection.concat(expandBraceExpansion(pattern));\n }, []);\n}\nexports.expandPatternsWithBraceExpansion = expandPatternsWithBraceExpansion;\nfunction expandBraceExpansion(pattern) {\n const patterns = micromatch.braces(pattern, { expand: true, nodupes: true, keepEscaping: true });\n /**\n * Sort the patterns by length so that the same depth patterns are processed side by side.\n * `a/{b,}/{c,}/*` – `['a///*', 'a/b//*', 'a//c/*', 'a/b/c/*']`\n */\n patterns.sort((a, b) => a.length - b.length);\n /**\n * Micromatch can return an empty string in the case of patterns like `{a,}`.\n */\n return patterns.filter((pattern) => pattern !== '');\n}\nexports.expandBraceExpansion = expandBraceExpansion;\nfunction getPatternParts(pattern, options) {\n let { parts } = micromatch.scan(pattern, Object.assign(Object.assign({}, options), { parts: true }));\n /**\n * The scan method returns an empty array in some cases.\n * See micromatch/picomatch#58 for more details.\n */\n if (parts.length === 0) {\n parts = [pattern];\n }\n /**\n * The scan method does not return an empty part for the pattern with a forward slash.\n * This is another part of micromatch/picomatch#58.\n */\n if (parts[0].startsWith('/')) {\n parts[0] = parts[0].slice(1);\n parts.unshift('');\n }\n return parts;\n}\nexports.getPatternParts = getPatternParts;\nfunction makeRe(pattern, options) {\n return micromatch.makeRe(pattern, options);\n}\nexports.makeRe = makeRe;\nfunction convertPatternsToRe(patterns, options) {\n return patterns.map((pattern) => makeRe(pattern, options));\n}\nexports.convertPatternsToRe = convertPatternsToRe;\nfunction matchAny(entry, patternsRe) {\n return patternsRe.some((patternRe) => patternRe.test(entry));\n}\nexports.matchAny = matchAny;\n/**\n * This package only works with forward slashes as a path separator.\n * Because of this, we cannot use the standard `path.normalize` method, because on Windows platform it will use of backslashes.\n */\nfunction removeDuplicateSlashes(pattern) {\n return pattern.replace(DOUBLE_SLASH_RE, '/');\n}\nexports.removeDuplicateSlashes = removeDuplicateSlashes;\nfunction partitionAbsoluteAndRelative(patterns) {\n const absolute = [];\n const relative = [];\n for (const pattern of patterns) {\n if (isAbsolute(pattern)) {\n absolute.push(pattern);\n }\n else {\n relative.push(pattern);\n }\n }\n return [absolute, relative];\n}\nexports.partitionAbsoluteAndRelative = partitionAbsoluteAndRelative;\nfunction isAbsolute(pattern) {\n return path.isAbsolute(pattern);\n}\nexports.isAbsolute = isAbsolute;\n","'use strict'\n/*\n * merge2\n * https://github.com/teambition/merge2\n *\n * Copyright (c) 2014-2020 Teambition\n * Licensed under the MIT license.\n */\nconst Stream = require('stream')\nconst PassThrough = Stream.PassThrough\nconst slice = Array.prototype.slice\n\nmodule.exports = merge2\n\nfunction merge2 () {\n const streamsQueue = []\n const args = slice.call(arguments)\n let merging = false\n let options = args[args.length - 1]\n\n if (options && !Array.isArray(options) && options.pipe == null) {\n args.pop()\n } else {\n options = {}\n }\n\n const doEnd = options.end !== false\n const doPipeError = options.pipeError === true\n if (options.objectMode == null) {\n options.objectMode = true\n }\n if (options.highWaterMark == null) {\n options.highWaterMark = 64 * 1024\n }\n const mergedStream = PassThrough(options)\n\n function addStream () {\n for (let i = 0, len = arguments.length; i < len; i++) {\n streamsQueue.push(pauseStreams(arguments[i], options))\n }\n mergeStream()\n return this\n }\n\n function mergeStream () {\n if (merging) {\n return\n }\n merging = true\n\n let streams = streamsQueue.shift()\n if (!streams) {\n process.nextTick(endStream)\n return\n }\n if (!Array.isArray(streams)) {\n streams = [streams]\n }\n\n let pipesCount = streams.length + 1\n\n function next () {\n if (--pipesCount > 0) {\n return\n }\n merging = false\n mergeStream()\n }\n\n function pipe (stream) {\n function onend () {\n stream.removeListener('merge2UnpipeEnd', onend)\n stream.removeListener('end', onend)\n if (doPipeError) {\n stream.removeListener('error', onerror)\n }\n next()\n }\n function onerror (err) {\n mergedStream.emit('error', err)\n }\n // skip ended stream\n if (stream._readableState.endEmitted) {\n return next()\n }\n\n stream.on('merge2UnpipeEnd', onend)\n stream.on('end', onend)\n\n if (doPipeError) {\n stream.on('error', onerror)\n }\n\n stream.pipe(mergedStream, { end: false })\n // compatible for old stream\n stream.resume()\n }\n\n for (let i = 0; i < streams.length; i++) {\n pipe(streams[i])\n }\n\n next()\n }\n\n function endStream () {\n merging = false\n // emit 'queueDrain' when all streams merged.\n mergedStream.emit('queueDrain')\n if (doEnd) {\n mergedStream.end()\n }\n }\n\n mergedStream.setMaxListeners(0)\n mergedStream.add = addStream\n mergedStream.on('unpipe', function (stream) {\n stream.emit('merge2UnpipeEnd')\n })\n\n if (args.length) {\n addStream.apply(null, args)\n }\n return mergedStream\n}\n\n// check and pause streams for pipe.\nfunction pauseStreams (streams, options) {\n if (!Array.isArray(streams)) {\n // Backwards-compat with old-style streams\n if (!streams._readableState && streams.pipe) {\n streams = streams.pipe(PassThrough(options))\n }\n if (!streams._readableState || !streams.pause || !streams.pipe) {\n throw new Error('Only readable stream can be merged.')\n }\n streams.pause()\n } else {\n for (let i = 0, len = streams.length; i < len; i++) {\n streams[i] = pauseStreams(streams[i], options)\n }\n }\n return streams\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.merge = void 0;\nconst merge2 = require(\"merge2\");\nfunction merge(streams) {\n const mergedStream = merge2(streams);\n streams.forEach((stream) => {\n stream.once('error', (error) => mergedStream.emit('error', error));\n });\n mergedStream.once('close', () => propagateCloseEventToSources(streams));\n mergedStream.once('end', () => propagateCloseEventToSources(streams));\n return mergedStream;\n}\nexports.merge = merge;\nfunction propagateCloseEventToSources(streams) {\n streams.forEach((stream) => stream.emit('close'));\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.isEmpty = exports.isString = void 0;\nfunction isString(input) {\n return typeof input === 'string';\n}\nexports.isString = isString;\nfunction isEmpty(input) {\n return input === '';\n}\nexports.isEmpty = isEmpty;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.string = exports.stream = exports.pattern = exports.path = exports.fs = exports.errno = exports.array = void 0;\nconst array = require(\"./array\");\nexports.array = array;\nconst errno = require(\"./errno\");\nexports.errno = errno;\nconst fs = require(\"./fs\");\nexports.fs = fs;\nconst path = require(\"./path\");\nexports.path = path;\nconst pattern = require(\"./pattern\");\nexports.pattern = pattern;\nconst stream = require(\"./stream\");\nexports.stream = stream;\nconst string = require(\"./string\");\nexports.string = string;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.convertPatternGroupToTask = exports.convertPatternGroupsToTasks = exports.groupPatternsByBaseDirectory = exports.getNegativePatternsAsPositive = exports.getPositivePatterns = exports.convertPatternsToTasks = exports.generate = void 0;\nconst utils = require(\"../utils\");\nfunction generate(input, settings) {\n const patterns = processPatterns(input, settings);\n const ignore = processPatterns(settings.ignore, settings);\n const positivePatterns = getPositivePatterns(patterns);\n const negativePatterns = getNegativePatternsAsPositive(patterns, ignore);\n const staticPatterns = positivePatterns.filter((pattern) => utils.pattern.isStaticPattern(pattern, settings));\n const dynamicPatterns = positivePatterns.filter((pattern) => utils.pattern.isDynamicPattern(pattern, settings));\n const staticTasks = convertPatternsToTasks(staticPatterns, negativePatterns, /* dynamic */ false);\n const dynamicTasks = convertPatternsToTasks(dynamicPatterns, negativePatterns, /* dynamic */ true);\n return staticTasks.concat(dynamicTasks);\n}\nexports.generate = generate;\nfunction processPatterns(input, settings) {\n let patterns = input;\n /**\n * The original pattern like `{,*,**,a/*}` can lead to problems checking the depth when matching entry\n * and some problems with the micromatch package (see fast-glob issues: #365, #394).\n *\n * To solve this problem, we expand all patterns containing brace expansion. This can lead to a slight slowdown\n * in matching in the case of a large set of patterns after expansion.\n */\n if (settings.braceExpansion) {\n patterns = utils.pattern.expandPatternsWithBraceExpansion(patterns);\n }\n /**\n * If the `baseNameMatch` option is enabled, we must add globstar to patterns, so that they can be used\n * at any nesting level.\n *\n * We do this here, because otherwise we have to complicate the filtering logic. For example, we need to change\n * the pattern in the filter before creating a regular expression. There is no need to change the patterns\n * in the application. Only on the input.\n */\n if (settings.baseNameMatch) {\n patterns = patterns.map((pattern) => pattern.includes('/') ? pattern : `**/${pattern}`);\n }\n /**\n * This method also removes duplicate slashes that may have been in the pattern or formed as a result of expansion.\n */\n return patterns.map((pattern) => utils.pattern.removeDuplicateSlashes(pattern));\n}\n/**\n * Returns tasks grouped by basic pattern directories.\n *\n * Patterns that can be found inside (`./`) and outside (`../`) the current directory are handled separately.\n * This is necessary because directory traversal starts at the base directory and goes deeper.\n */\nfunction convertPatternsToTasks(positive, negative, dynamic) {\n const tasks = [];\n const patternsOutsideCurrentDirectory = utils.pattern.getPatternsOutsideCurrentDirectory(positive);\n const patternsInsideCurrentDirectory = utils.pattern.getPatternsInsideCurrentDirectory(positive);\n const outsideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsOutsideCurrentDirectory);\n const insideCurrentDirectoryGroup = groupPatternsByBaseDirectory(patternsInsideCurrentDirectory);\n tasks.push(...convertPatternGroupsToTasks(outsideCurrentDirectoryGroup, negative, dynamic));\n /*\n * For the sake of reducing future accesses to the file system, we merge all tasks within the current directory\n * into a global task, if at least one pattern refers to the root (`.`). In this case, the global task covers the rest.\n */\n if ('.' in insideCurrentDirectoryGroup) {\n tasks.push(convertPatternGroupToTask('.', patternsInsideCurrentDirectory, negative, dynamic));\n }\n else {\n tasks.push(...convertPatternGroupsToTasks(insideCurrentDirectoryGroup, negative, dynamic));\n }\n return tasks;\n}\nexports.convertPatternsToTasks = convertPatternsToTasks;\nfunction getPositivePatterns(patterns) {\n return utils.pattern.getPositivePatterns(patterns);\n}\nexports.getPositivePatterns = getPositivePatterns;\nfunction getNegativePatternsAsPositive(patterns, ignore) {\n const negative = utils.pattern.getNegativePatterns(patterns).concat(ignore);\n const positive = negative.map(utils.pattern.convertToPositivePattern);\n return positive;\n}\nexports.getNegativePatternsAsPositive = getNegativePatternsAsPositive;\nfunction groupPatternsByBaseDirectory(patterns) {\n const group = {};\n return patterns.reduce((collection, pattern) => {\n const base = utils.pattern.getBaseDirectory(pattern);\n if (base in collection) {\n collection[base].push(pattern);\n }\n else {\n collection[base] = [pattern];\n }\n return collection;\n }, group);\n}\nexports.groupPatternsByBaseDirectory = groupPatternsByBaseDirectory;\nfunction convertPatternGroupsToTasks(positive, negative, dynamic) {\n return Object.keys(positive).map((base) => {\n return convertPatternGroupToTask(base, positive[base], negative, dynamic);\n });\n}\nexports.convertPatternGroupsToTasks = convertPatternGroupsToTasks;\nfunction convertPatternGroupToTask(base, positive, negative, dynamic) {\n return {\n dynamic,\n positive,\n negative,\n base,\n patterns: [].concat(positive, negative.map(utils.pattern.convertToNegativePattern))\n };\n}\nexports.convertPatternGroupToTask = convertPatternGroupToTask;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings, callback) {\n settings.fs.lstat(path, (lstatError, lstat) => {\n if (lstatError !== null) {\n callFailureCallback(callback, lstatError);\n return;\n }\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n callSuccessCallback(callback, lstat);\n return;\n }\n settings.fs.stat(path, (statError, stat) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n callFailureCallback(callback, statError);\n return;\n }\n callSuccessCallback(callback, lstat);\n return;\n }\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n callSuccessCallback(callback, stat);\n });\n });\n}\nexports.read = read;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.read = void 0;\nfunction read(path, settings) {\n const lstat = settings.fs.lstatSync(path);\n if (!lstat.isSymbolicLink() || !settings.followSymbolicLink) {\n return lstat;\n }\n try {\n const stat = settings.fs.statSync(path);\n if (settings.markSymbolicLink) {\n stat.isSymbolicLink = () => true;\n }\n return stat;\n }\n catch (error) {\n if (!settings.throwErrorOnBrokenSymbolicLink) {\n return lstat;\n }\n throw error;\n }\n}\nexports.read = read;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLink = this._getValue(this._options.followSymbolicLink, true);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.markSymbolicLink = this._getValue(this._options.markSymbolicLink, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.statSync = exports.stat = exports.Settings = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction stat(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.stat = stat;\nfunction statSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.statSync = statSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","/*! queue-microtask. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nlet promise\n\nmodule.exports = typeof queueMicrotask === 'function'\n ? queueMicrotask.bind(typeof window !== 'undefined' ? window : global)\n // reuse resolved promise, and allocate it lazily\n : cb => (promise || (promise = Promise.resolve()))\n .then(cb)\n .catch(err => setTimeout(() => { throw err }, 0))\n","/*! run-parallel. MIT License. Feross Aboukhadijeh <https://feross.org/opensource> */\nmodule.exports = runParallel\n\nconst queueMicrotask = require('queue-microtask')\n\nfunction runParallel (tasks, cb) {\n let results, pending, keys\n let isSync = true\n\n if (Array.isArray(tasks)) {\n results = []\n pending = tasks.length\n } else {\n keys = Object.keys(tasks)\n results = {}\n pending = keys.length\n }\n\n function done (err) {\n function end () {\n if (cb) cb(err, results)\n cb = null\n }\n if (isSync) queueMicrotask(end)\n else end()\n }\n\n function each (i, err, result) {\n results[i] = result\n if (--pending === 0 || err) {\n done(err)\n }\n }\n\n if (!pending) {\n // empty\n done(null)\n } else if (keys) {\n // object\n keys.forEach(function (key) {\n tasks[key](function (err, result) { each(key, err, result) })\n })\n } else {\n // array\n tasks.forEach(function (task, i) {\n task(function (err, result) { each(i, err, result) })\n })\n }\n\n isSync = false\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = void 0;\nconst NODE_PROCESS_VERSION_PARTS = process.versions.node.split('.');\nif (NODE_PROCESS_VERSION_PARTS[0] === undefined || NODE_PROCESS_VERSION_PARTS[1] === undefined) {\n throw new Error(`Unexpected behavior. The 'process.versions.node' variable has invalid value: ${process.versions.node}`);\n}\nconst MAJOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[0], 10);\nconst MINOR_VERSION = Number.parseInt(NODE_PROCESS_VERSION_PARTS[1], 10);\nconst SUPPORTED_MAJOR_VERSION = 10;\nconst SUPPORTED_MINOR_VERSION = 10;\nconst IS_MATCHED_BY_MAJOR = MAJOR_VERSION > SUPPORTED_MAJOR_VERSION;\nconst IS_MATCHED_BY_MAJOR_AND_MINOR = MAJOR_VERSION === SUPPORTED_MAJOR_VERSION && MINOR_VERSION >= SUPPORTED_MINOR_VERSION;\n/**\n * IS `true` for Node.js 10.10 and greater.\n */\nexports.IS_SUPPORT_READDIR_WITH_FILE_TYPES = IS_MATCHED_BY_MAJOR || IS_MATCHED_BY_MAJOR_AND_MINOR;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createDirentFromStats = void 0;\nclass DirentFromStats {\n constructor(name, stats) {\n this.name = name;\n this.isBlockDevice = stats.isBlockDevice.bind(stats);\n this.isCharacterDevice = stats.isCharacterDevice.bind(stats);\n this.isDirectory = stats.isDirectory.bind(stats);\n this.isFIFO = stats.isFIFO.bind(stats);\n this.isFile = stats.isFile.bind(stats);\n this.isSocket = stats.isSocket.bind(stats);\n this.isSymbolicLink = stats.isSymbolicLink.bind(stats);\n }\n}\nfunction createDirentFromStats(name, stats) {\n return new DirentFromStats(name, stats);\n}\nexports.createDirentFromStats = createDirentFromStats;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.fs = void 0;\nconst fs = require(\"./fs\");\nexports.fs = fs;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = void 0;\nfunction joinPathSegments(a, b, separator) {\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst rpl = require(\"run-parallel\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings, callback) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n readdirWithFileTypes(directory, settings, callback);\n return;\n }\n readdir(directory, settings, callback);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings, callback) {\n settings.fs.readdir(directory, { withFileTypes: true }, (readdirError, dirents) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const entries = dirents.map((dirent) => ({\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n }));\n if (!settings.followSymbolicLinks) {\n callSuccessCallback(callback, entries);\n return;\n }\n const tasks = entries.map((entry) => makeRplTaskEntry(entry, settings));\n rpl(tasks, (rplError, rplEntries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, rplEntries);\n });\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction makeRplTaskEntry(entry, settings) {\n return (done) => {\n if (!entry.dirent.isSymbolicLink()) {\n done(null, entry);\n return;\n }\n settings.fs.stat(entry.path, (statError, stats) => {\n if (statError !== null) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n done(statError);\n return;\n }\n done(null, entry);\n return;\n }\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n done(null, entry);\n });\n };\n}\nfunction readdir(directory, settings, callback) {\n settings.fs.readdir(directory, (readdirError, names) => {\n if (readdirError !== null) {\n callFailureCallback(callback, readdirError);\n return;\n }\n const tasks = names.map((name) => {\n const path = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n return (done) => {\n fsStat.stat(path, settings.fsStatSettings, (error, stats) => {\n if (error !== null) {\n done(error);\n return;\n }\n const entry = {\n name,\n path,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n done(null, entry);\n });\n };\n });\n rpl(tasks, (rplError, entries) => {\n if (rplError !== null) {\n callFailureCallback(callback, rplError);\n return;\n }\n callSuccessCallback(callback, entries);\n });\n });\n}\nexports.readdir = readdir;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, result) {\n callback(null, result);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.readdir = exports.readdirWithFileTypes = exports.read = void 0;\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst constants_1 = require(\"../constants\");\nconst utils = require(\"../utils\");\nconst common = require(\"./common\");\nfunction read(directory, settings) {\n if (!settings.stats && constants_1.IS_SUPPORT_READDIR_WITH_FILE_TYPES) {\n return readdirWithFileTypes(directory, settings);\n }\n return readdir(directory, settings);\n}\nexports.read = read;\nfunction readdirWithFileTypes(directory, settings) {\n const dirents = settings.fs.readdirSync(directory, { withFileTypes: true });\n return dirents.map((dirent) => {\n const entry = {\n dirent,\n name: dirent.name,\n path: common.joinPathSegments(directory, dirent.name, settings.pathSegmentSeparator)\n };\n if (entry.dirent.isSymbolicLink() && settings.followSymbolicLinks) {\n try {\n const stats = settings.fs.statSync(entry.path);\n entry.dirent = utils.fs.createDirentFromStats(entry.name, stats);\n }\n catch (error) {\n if (settings.throwErrorOnBrokenSymbolicLink) {\n throw error;\n }\n }\n }\n return entry;\n });\n}\nexports.readdirWithFileTypes = readdirWithFileTypes;\nfunction readdir(directory, settings) {\n const names = settings.fs.readdirSync(directory);\n return names.map((name) => {\n const entryPath = common.joinPathSegments(directory, name, settings.pathSegmentSeparator);\n const stats = fsStat.statSync(entryPath, settings.fsStatSettings);\n const entry = {\n name,\n path: entryPath,\n dirent: utils.fs.createDirentFromStats(name, stats)\n };\n if (settings.stats) {\n entry.stats = stats;\n }\n return entry;\n });\n}\nexports.readdir = readdir;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createFileSystemAdapter = exports.FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nexports.FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n stat: fs.stat,\n lstatSync: fs.lstatSync,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nfunction createFileSystemAdapter(fsMethods) {\n if (fsMethods === undefined) {\n return exports.FILE_SYSTEM_ADAPTER;\n }\n return Object.assign(Object.assign({}, exports.FILE_SYSTEM_ADAPTER), fsMethods);\n}\nexports.createFileSystemAdapter = createFileSystemAdapter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fs = require(\"./adapters/fs\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, false);\n this.fs = fs.createFileSystemAdapter(this._options.fs);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.stats = this._getValue(this._options.stats, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, true);\n this.fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this.followSymbolicLinks,\n fs: this.fs,\n throwErrorOnBrokenSymbolicLink: this.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.scandirSync = exports.scandir = void 0;\nconst async = require(\"./providers/async\");\nconst sync = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction scandir(path, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n async.read(path, getSettings(), optionsOrSettingsOrCallback);\n return;\n }\n async.read(path, getSettings(optionsOrSettingsOrCallback), callback);\n}\nexports.scandir = scandir;\nfunction scandirSync(path, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n return sync.read(path, settings);\n}\nexports.scandirSync = scandirSync;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","'use strict'\n\nfunction reusify (Constructor) {\n var head = new Constructor()\n var tail = head\n\n function get () {\n var current = head\n\n if (current.next) {\n head = current.next\n } else {\n head = new Constructor()\n tail = head\n }\n\n current.next = null\n\n return current\n }\n\n function release (obj) {\n tail.next = obj\n tail = obj\n }\n\n return {\n get: get,\n release: release\n }\n}\n\nmodule.exports = reusify\n","'use strict'\n\n/* eslint-disable no-var */\n\nvar reusify = require('reusify')\n\nfunction fastqueue (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n if (!(_concurrency >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n\n var cache = reusify(Task)\n var queueHead = null\n var queueTail = null\n var _running = 0\n var errorHandler = null\n\n var self = {\n push: push,\n drain: noop,\n saturated: noop,\n pause: pause,\n paused: false,\n\n get concurrency () {\n return _concurrency\n },\n set concurrency (value) {\n if (!(value >= 1)) {\n throw new Error('fastqueue concurrency must be equal to or greater than 1')\n }\n _concurrency = value\n\n if (self.paused) return\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n },\n\n running: running,\n resume: resume,\n idle: idle,\n length: length,\n getQueue: getQueue,\n unshift: unshift,\n empty: noop,\n kill: kill,\n killAndDrain: killAndDrain,\n error: error,\n abort: abort\n }\n\n return self\n\n function running () {\n return _running\n }\n\n function pause () {\n self.paused = true\n }\n\n function length () {\n var current = queueHead\n var counter = 0\n\n while (current) {\n current = current.next\n counter++\n }\n\n return counter\n }\n\n function getQueue () {\n var current = queueHead\n var tasks = []\n\n while (current) {\n tasks.push(current.value)\n current = current.next\n }\n\n return tasks\n }\n\n function resume () {\n if (!self.paused) return\n self.paused = false\n if (queueHead === null) {\n _running++\n release()\n return\n }\n for (; queueHead && _running < _concurrency;) {\n _running++\n release()\n }\n }\n\n function idle () {\n return _running === 0 && self.length() === 0\n }\n\n function push (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueTail) {\n queueTail.next = current\n queueTail = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function unshift (value, done) {\n var current = cache.get()\n\n current.context = context\n current.release = release\n current.value = value\n current.callback = done || noop\n current.errorHandler = errorHandler\n\n if (_running >= _concurrency || self.paused) {\n if (queueHead) {\n current.next = queueHead\n queueHead = current\n } else {\n queueHead = current\n queueTail = current\n self.saturated()\n }\n } else {\n _running++\n worker.call(context, current.value, current.worked)\n }\n }\n\n function release (holder) {\n if (holder) {\n cache.release(holder)\n }\n var next = queueHead\n if (next && _running <= _concurrency) {\n if (!self.paused) {\n if (queueTail === queueHead) {\n queueTail = null\n }\n queueHead = next.next\n next.next = null\n worker.call(context, next.value, next.worked)\n if (queueTail === null) {\n self.empty()\n }\n } else {\n _running--\n }\n } else if (--_running === 0) {\n self.drain()\n }\n }\n\n function kill () {\n queueHead = null\n queueTail = null\n self.drain = noop\n }\n\n function killAndDrain () {\n queueHead = null\n queueTail = null\n self.drain()\n self.drain = noop\n }\n\n function abort () {\n var current = queueHead\n queueHead = null\n queueTail = null\n\n while (current) {\n var next = current.next\n var callback = current.callback\n var errorHandler = current.errorHandler\n var val = current.value\n var context = current.context\n\n // Reset the task state\n current.value = null\n current.callback = noop\n current.errorHandler = null\n\n // Call error handler if present\n if (errorHandler) {\n errorHandler(new Error('abort'), val)\n }\n\n // Call callback with error\n callback.call(context, new Error('abort'))\n\n // Release the task back to the pool\n current.release(current)\n\n current = next\n }\n\n self.drain = noop\n }\n\n function error (handler) {\n errorHandler = handler\n }\n}\n\nfunction noop () {}\n\nfunction Task () {\n this.value = null\n this.callback = noop\n this.next = null\n this.release = noop\n this.context = null\n this.errorHandler = null\n\n var self = this\n\n this.worked = function worked (err, result) {\n var callback = self.callback\n var errorHandler = self.errorHandler\n var val = self.value\n self.value = null\n self.callback = noop\n if (self.errorHandler) {\n errorHandler(err, val)\n }\n callback.call(self.context, err, result)\n self.release(self)\n }\n}\n\nfunction queueAsPromised (context, worker, _concurrency) {\n if (typeof context === 'function') {\n _concurrency = worker\n worker = context\n context = null\n }\n\n function asyncWrapper (arg, cb) {\n worker.call(this, arg)\n .then(function (res) {\n cb(null, res)\n }, cb)\n }\n\n var queue = fastqueue(context, asyncWrapper, _concurrency)\n\n var pushCb = queue.push\n var unshiftCb = queue.unshift\n\n queue.push = push\n queue.unshift = unshift\n queue.drained = drained\n\n return queue\n\n function push (value) {\n var p = new Promise(function (resolve, reject) {\n pushCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function unshift (value) {\n var p = new Promise(function (resolve, reject) {\n unshiftCb(value, function (err, result) {\n if (err) {\n reject(err)\n return\n }\n resolve(result)\n })\n })\n\n // Let's fork the promise chain to\n // make the error bubble up to the user but\n // not lead to a unhandledRejection\n p.catch(noop)\n\n return p\n }\n\n function drained () {\n var p = new Promise(function (resolve) {\n process.nextTick(function () {\n if (queue.idle()) {\n resolve()\n } else {\n var previousDrain = queue.drain\n queue.drain = function () {\n if (typeof previousDrain === 'function') previousDrain()\n resolve()\n queue.drain = previousDrain\n }\n }\n })\n })\n\n return p\n }\n}\n\nmodule.exports = fastqueue\nmodule.exports.promise = queueAsPromised\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.joinPathSegments = exports.replacePathSegmentSeparator = exports.isAppliedFilter = exports.isFatalError = void 0;\nfunction isFatalError(settings, error) {\n if (settings.errorFilter === null) {\n return true;\n }\n return !settings.errorFilter(error);\n}\nexports.isFatalError = isFatalError;\nfunction isAppliedFilter(filter, value) {\n return filter === null || filter(value);\n}\nexports.isAppliedFilter = isAppliedFilter;\nfunction replacePathSegmentSeparator(filepath, separator) {\n return filepath.split(/[/\\\\]/).join(separator);\n}\nexports.replacePathSegmentSeparator = replacePathSegmentSeparator;\nfunction joinPathSegments(a, b, separator) {\n if (a === '') {\n return b;\n }\n /**\n * The correct handling of cases when the first segment is a root (`/`, `C:/`) or UNC path (`//?/C:/`).\n */\n if (a.endsWith(separator)) {\n return a + b;\n }\n return a + separator + b;\n}\nexports.joinPathSegments = joinPathSegments;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst common = require(\"./common\");\nclass Reader {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._root = common.replacePathSegmentSeparator(_root, _settings.pathSegmentSeparator);\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst events_1 = require(\"events\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst fastq = require(\"fastq\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass AsyncReader extends reader_1.default {\n constructor(_root, _settings) {\n super(_root, _settings);\n this._settings = _settings;\n this._scandir = fsScandir.scandir;\n this._emitter = new events_1.EventEmitter();\n this._queue = fastq(this._worker.bind(this), this._settings.concurrency);\n this._isFatalError = false;\n this._isDestroyed = false;\n this._queue.drain = () => {\n if (!this._isFatalError) {\n this._emitter.emit('end');\n }\n };\n }\n read() {\n this._isFatalError = false;\n this._isDestroyed = false;\n setImmediate(() => {\n this._pushToQueue(this._root, this._settings.basePath);\n });\n return this._emitter;\n }\n get isDestroyed() {\n return this._isDestroyed;\n }\n destroy() {\n if (this._isDestroyed) {\n throw new Error('The reader is already destroyed');\n }\n this._isDestroyed = true;\n this._queue.killAndDrain();\n }\n onEntry(callback) {\n this._emitter.on('entry', callback);\n }\n onError(callback) {\n this._emitter.once('error', callback);\n }\n onEnd(callback) {\n this._emitter.once('end', callback);\n }\n _pushToQueue(directory, base) {\n const queueItem = { directory, base };\n this._queue.push(queueItem, (error) => {\n if (error !== null) {\n this._handleError(error);\n }\n });\n }\n _worker(item, done) {\n this._scandir(item.directory, this._settings.fsScandirSettings, (error, entries) => {\n if (error !== null) {\n done(error, undefined);\n return;\n }\n for (const entry of entries) {\n this._handleEntry(entry, item.base);\n }\n done(null, undefined);\n });\n }\n _handleError(error) {\n if (this._isDestroyed || !common.isFatalError(this._settings, error)) {\n return;\n }\n this._isFatalError = true;\n this._isDestroyed = true;\n this._emitter.emit('error', error);\n }\n _handleEntry(entry, base) {\n if (this._isDestroyed || this._isFatalError) {\n return;\n }\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._emitEntry(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _emitEntry(entry) {\n this._emitter.emit('entry', entry);\n }\n}\nexports.default = AsyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nclass AsyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._storage = [];\n }\n read(callback) {\n this._reader.onError((error) => {\n callFailureCallback(callback, error);\n });\n this._reader.onEntry((entry) => {\n this._storage.push(entry);\n });\n this._reader.onEnd(() => {\n callSuccessCallback(callback, this._storage);\n });\n this._reader.read();\n }\n}\nexports.default = AsyncProvider;\nfunction callFailureCallback(callback, error) {\n callback(error);\n}\nfunction callSuccessCallback(callback, entries) {\n callback(null, entries);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst async_1 = require(\"../readers/async\");\nclass StreamProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new async_1.default(this._root, this._settings);\n this._stream = new stream_1.Readable({\n objectMode: true,\n read: () => { },\n destroy: () => {\n if (!this._reader.isDestroyed) {\n this._reader.destroy();\n }\n }\n });\n }\n read() {\n this._reader.onError((error) => {\n this._stream.emit('error', error);\n });\n this._reader.onEntry((entry) => {\n this._stream.push(entry);\n });\n this._reader.onEnd(() => {\n this._stream.push(null);\n });\n this._reader.read();\n return this._stream;\n }\n}\nexports.default = StreamProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nconst common = require(\"./common\");\nconst reader_1 = require(\"./reader\");\nclass SyncReader extends reader_1.default {\n constructor() {\n super(...arguments);\n this._scandir = fsScandir.scandirSync;\n this._storage = [];\n this._queue = new Set();\n }\n read() {\n this._pushToQueue(this._root, this._settings.basePath);\n this._handleQueue();\n return this._storage;\n }\n _pushToQueue(directory, base) {\n this._queue.add({ directory, base });\n }\n _handleQueue() {\n for (const item of this._queue.values()) {\n this._handleDirectory(item.directory, item.base);\n }\n }\n _handleDirectory(directory, base) {\n try {\n const entries = this._scandir(directory, this._settings.fsScandirSettings);\n for (const entry of entries) {\n this._handleEntry(entry, base);\n }\n }\n catch (error) {\n this._handleError(error);\n }\n }\n _handleError(error) {\n if (!common.isFatalError(this._settings, error)) {\n return;\n }\n throw error;\n }\n _handleEntry(entry, base) {\n const fullpath = entry.path;\n if (base !== undefined) {\n entry.path = common.joinPathSegments(base, entry.name, this._settings.pathSegmentSeparator);\n }\n if (common.isAppliedFilter(this._settings.entryFilter, entry)) {\n this._pushToStorage(entry);\n }\n if (entry.dirent.isDirectory() && common.isAppliedFilter(this._settings.deepFilter, entry)) {\n this._pushToQueue(fullpath, base === undefined ? undefined : entry.path);\n }\n }\n _pushToStorage(entry) {\n this._storage.push(entry);\n }\n}\nexports.default = SyncReader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nclass SyncProvider {\n constructor(_root, _settings) {\n this._root = _root;\n this._settings = _settings;\n this._reader = new sync_1.default(this._root, this._settings);\n }\n read() {\n return this._reader.read();\n }\n}\nexports.default = SyncProvider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsScandir = require(\"@nodelib/fs.scandir\");\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.basePath = this._getValue(this._options.basePath, undefined);\n this.concurrency = this._getValue(this._options.concurrency, Number.POSITIVE_INFINITY);\n this.deepFilter = this._getValue(this._options.deepFilter, null);\n this.entryFilter = this._getValue(this._options.entryFilter, null);\n this.errorFilter = this._getValue(this._options.errorFilter, null);\n this.pathSegmentSeparator = this._getValue(this._options.pathSegmentSeparator, path.sep);\n this.fsScandirSettings = new fsScandir.Settings({\n followSymbolicLinks: this._options.followSymbolicLinks,\n fs: this._options.fs,\n pathSegmentSeparator: this._options.pathSegmentSeparator,\n stats: this._options.stats,\n throwErrorOnBrokenSymbolicLink: this._options.throwErrorOnBrokenSymbolicLink\n });\n }\n _getValue(option, value) {\n return option !== null && option !== void 0 ? option : value;\n }\n}\nexports.default = Settings;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Settings = exports.walkStream = exports.walkSync = exports.walk = void 0;\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nexports.Settings = settings_1.default;\nfunction walk(directory, optionsOrSettingsOrCallback, callback) {\n if (typeof optionsOrSettingsOrCallback === 'function') {\n new async_1.default(directory, getSettings()).read(optionsOrSettingsOrCallback);\n return;\n }\n new async_1.default(directory, getSettings(optionsOrSettingsOrCallback)).read(callback);\n}\nexports.walk = walk;\nfunction walkSync(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new sync_1.default(directory, settings);\n return provider.read();\n}\nexports.walkSync = walkSync;\nfunction walkStream(directory, optionsOrSettings) {\n const settings = getSettings(optionsOrSettings);\n const provider = new stream_1.default(directory, settings);\n return provider.read();\n}\nexports.walkStream = walkStream;\nfunction getSettings(settingsOrOptions = {}) {\n if (settingsOrOptions instanceof settings_1.default) {\n return settingsOrOptions;\n }\n return new settings_1.default(settingsOrOptions);\n}\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst utils = require(\"../utils\");\nclass Reader {\n constructor(_settings) {\n this._settings = _settings;\n this._fsStatSettings = new fsStat.Settings({\n followSymbolicLink: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n throwErrorOnBrokenSymbolicLink: this._settings.followSymbolicLinks\n });\n }\n _getFullEntryPath(filepath) {\n return path.resolve(this._settings.cwd, filepath);\n }\n _makeEntry(stats, pattern) {\n const entry = {\n name: pattern,\n path: pattern,\n dirent: utils.fs.createDirentFromStats(pattern, stats)\n };\n if (this._settings.stats) {\n entry.stats = stats;\n }\n return entry;\n }\n _isFatalError(error) {\n return !utils.errno.isEnoentCodeError(error) && !this._settings.suppressErrors;\n }\n}\nexports.default = Reader;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderStream extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkStream = fsWalk.walkStream;\n this._stat = fsStat.stat;\n }\n dynamic(root, options) {\n return this._walkStream(root, options);\n }\n static(patterns, options) {\n const filepaths = patterns.map(this._getFullEntryPath, this);\n const stream = new stream_1.PassThrough({ objectMode: true });\n stream._write = (index, _enc, done) => {\n return this._getEntry(filepaths[index], patterns[index], options)\n .then((entry) => {\n if (entry !== null && options.entryFilter(entry)) {\n stream.push(entry);\n }\n if (index === filepaths.length - 1) {\n stream.end();\n }\n done();\n })\n .catch(done);\n };\n for (let i = 0; i < filepaths.length; i++) {\n stream.write(i);\n }\n return stream;\n }\n _getEntry(filepath, pattern, options) {\n return this._getStat(filepath)\n .then((stats) => this._makeEntry(stats, pattern))\n .catch((error) => {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n });\n }\n _getStat(filepath) {\n return new Promise((resolve, reject) => {\n this._stat(filepath, this._fsStatSettings, (error, stats) => {\n return error === null ? resolve(stats) : reject(error);\n });\n });\n }\n}\nexports.default = ReaderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nconst stream_1 = require(\"./stream\");\nclass ReaderAsync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkAsync = fsWalk.walk;\n this._readerStream = new stream_1.default(this._settings);\n }\n dynamic(root, options) {\n return new Promise((resolve, reject) => {\n this._walkAsync(root, options, (error, entries) => {\n if (error === null) {\n resolve(entries);\n }\n else {\n reject(error);\n }\n });\n });\n }\n async static(patterns, options) {\n const entries = [];\n const stream = this._readerStream.static(patterns, options);\n // After #235, replace it with an asynchronous iterator.\n return new Promise((resolve, reject) => {\n stream.once('error', reject);\n stream.on('data', (entry) => entries.push(entry));\n stream.once('end', () => resolve(entries));\n });\n }\n}\nexports.default = ReaderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass Matcher {\n constructor(_patterns, _settings, _micromatchOptions) {\n this._patterns = _patterns;\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this._storage = [];\n this._fillStorage();\n }\n _fillStorage() {\n for (const pattern of this._patterns) {\n const segments = this._getPatternSegments(pattern);\n const sections = this._splitSegmentsIntoSections(segments);\n this._storage.push({\n complete: sections.length <= 1,\n pattern,\n segments,\n sections\n });\n }\n }\n _getPatternSegments(pattern) {\n const parts = utils.pattern.getPatternParts(pattern, this._micromatchOptions);\n return parts.map((part) => {\n const dynamic = utils.pattern.isDynamicPattern(part, this._settings);\n if (!dynamic) {\n return {\n dynamic: false,\n pattern: part\n };\n }\n return {\n dynamic: true,\n pattern: part,\n patternRe: utils.pattern.makeRe(part, this._micromatchOptions)\n };\n });\n }\n _splitSegmentsIntoSections(segments) {\n return utils.array.splitWhen(segments, (segment) => segment.dynamic && utils.pattern.hasGlobStar(segment.pattern));\n }\n}\nexports.default = Matcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst matcher_1 = require(\"./matcher\");\nclass PartialMatcher extends matcher_1.default {\n match(filepath) {\n const parts = filepath.split('/');\n const levels = parts.length;\n const patterns = this._storage.filter((info) => !info.complete || info.segments.length > levels);\n for (const pattern of patterns) {\n const section = pattern.sections[0];\n /**\n * In this case, the pattern has a globstar and we must read all directories unconditionally,\n * but only if the level has reached the end of the first group.\n *\n * fixtures/{a,b}/**\n * ^ true/false ^ always true\n */\n if (!pattern.complete && levels > section.length) {\n return true;\n }\n const match = parts.every((part, index) => {\n const segment = pattern.segments[index];\n if (segment.dynamic && segment.patternRe.test(part)) {\n return true;\n }\n if (!segment.dynamic && segment.pattern === part) {\n return true;\n }\n return false;\n });\n if (match) {\n return true;\n }\n }\n return false;\n }\n}\nexports.default = PartialMatcher;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nconst partial_1 = require(\"../matchers/partial\");\nclass DeepFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n }\n getFilter(basePath, positive, negative) {\n const matcher = this._getMatcher(positive);\n const negativeRe = this._getNegativePatternsRe(negative);\n return (entry) => this._filter(basePath, entry, matcher, negativeRe);\n }\n _getMatcher(patterns) {\n return new partial_1.default(patterns, this._settings, this._micromatchOptions);\n }\n _getNegativePatternsRe(patterns) {\n const affectDepthOfReadingPatterns = patterns.filter(utils.pattern.isAffectDepthOfReadingPattern);\n return utils.pattern.convertPatternsToRe(affectDepthOfReadingPatterns, this._micromatchOptions);\n }\n _filter(basePath, entry, matcher, negativeRe) {\n if (this._isSkippedByDeep(basePath, entry.path)) {\n return false;\n }\n if (this._isSkippedSymbolicLink(entry)) {\n return false;\n }\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._isSkippedByPositivePatterns(filepath, matcher)) {\n return false;\n }\n return this._isSkippedByNegativePatterns(filepath, negativeRe);\n }\n _isSkippedByDeep(basePath, entryPath) {\n /**\n * Avoid unnecessary depth calculations when it doesn't matter.\n */\n if (this._settings.deep === Infinity) {\n return false;\n }\n return this._getEntryLevel(basePath, entryPath) >= this._settings.deep;\n }\n _getEntryLevel(basePath, entryPath) {\n const entryPathDepth = entryPath.split('/').length;\n if (basePath === '') {\n return entryPathDepth;\n }\n const basePathDepth = basePath.split('/').length;\n return entryPathDepth - basePathDepth;\n }\n _isSkippedSymbolicLink(entry) {\n return !this._settings.followSymbolicLinks && entry.dirent.isSymbolicLink();\n }\n _isSkippedByPositivePatterns(entryPath, matcher) {\n return !this._settings.baseNameMatch && !matcher.match(entryPath);\n }\n _isSkippedByNegativePatterns(entryPath, patternsRe) {\n return !utils.pattern.matchAny(entryPath, patternsRe);\n }\n}\nexports.default = DeepFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryFilter {\n constructor(_settings, _micromatchOptions) {\n this._settings = _settings;\n this._micromatchOptions = _micromatchOptions;\n this.index = new Map();\n }\n getFilter(positive, negative) {\n const [absoluteNegative, relativeNegative] = utils.pattern.partitionAbsoluteAndRelative(negative);\n const patterns = {\n positive: {\n all: utils.pattern.convertPatternsToRe(positive, this._micromatchOptions)\n },\n negative: {\n absolute: utils.pattern.convertPatternsToRe(absoluteNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true })),\n relative: utils.pattern.convertPatternsToRe(relativeNegative, Object.assign(Object.assign({}, this._micromatchOptions), { dot: true }))\n }\n };\n return (entry) => this._filter(entry, patterns);\n }\n _filter(entry, patterns) {\n const filepath = utils.path.removeLeadingDotSegment(entry.path);\n if (this._settings.unique && this._isDuplicateEntry(filepath)) {\n return false;\n }\n if (this._onlyFileFilter(entry) || this._onlyDirectoryFilter(entry)) {\n return false;\n }\n const isMatched = this._isMatchToPatternsSet(filepath, patterns, entry.dirent.isDirectory());\n if (this._settings.unique && isMatched) {\n this._createIndexRecord(filepath);\n }\n return isMatched;\n }\n _isDuplicateEntry(filepath) {\n return this.index.has(filepath);\n }\n _createIndexRecord(filepath) {\n this.index.set(filepath, undefined);\n }\n _onlyFileFilter(entry) {\n return this._settings.onlyFiles && !entry.dirent.isFile();\n }\n _onlyDirectoryFilter(entry) {\n return this._settings.onlyDirectories && !entry.dirent.isDirectory();\n }\n _isMatchToPatternsSet(filepath, patterns, isDirectory) {\n const isMatched = this._isMatchToPatterns(filepath, patterns.positive.all, isDirectory);\n if (!isMatched) {\n return false;\n }\n const isMatchedByRelativeNegative = this._isMatchToPatterns(filepath, patterns.negative.relative, isDirectory);\n if (isMatchedByRelativeNegative) {\n return false;\n }\n const isMatchedByAbsoluteNegative = this._isMatchToAbsoluteNegative(filepath, patterns.negative.absolute, isDirectory);\n if (isMatchedByAbsoluteNegative) {\n return false;\n }\n return true;\n }\n _isMatchToAbsoluteNegative(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n const fullpath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n return this._isMatchToPatterns(fullpath, patternsRe, isDirectory);\n }\n _isMatchToPatterns(filepath, patternsRe, isDirectory) {\n if (patternsRe.length === 0) {\n return false;\n }\n // Trying to match files and directories by patterns.\n const isMatched = utils.pattern.matchAny(filepath, patternsRe);\n // A pattern with a trailling slash can be used for directory matching.\n // To apply such pattern, we need to add a tralling slash to the path.\n if (!isMatched && isDirectory) {\n return utils.pattern.matchAny(filepath + '/', patternsRe);\n }\n return isMatched;\n }\n}\nexports.default = EntryFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass ErrorFilter {\n constructor(_settings) {\n this._settings = _settings;\n }\n getFilter() {\n return (error) => this._isNonFatalError(error);\n }\n _isNonFatalError(error) {\n return utils.errno.isEnoentCodeError(error) || this._settings.suppressErrors;\n }\n}\nexports.default = ErrorFilter;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst utils = require(\"../../utils\");\nclass EntryTransformer {\n constructor(_settings) {\n this._settings = _settings;\n }\n getTransformer() {\n return (entry) => this._transform(entry);\n }\n _transform(entry) {\n let filepath = entry.path;\n if (this._settings.absolute) {\n filepath = utils.path.makeAbsolute(this._settings.cwd, filepath);\n filepath = utils.path.unixify(filepath);\n }\n if (this._settings.markDirectories && entry.dirent.isDirectory()) {\n filepath += '/';\n }\n if (!this._settings.objectMode) {\n return filepath;\n }\n return Object.assign(Object.assign({}, entry), { path: filepath });\n }\n}\nexports.default = EntryTransformer;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst path = require(\"path\");\nconst deep_1 = require(\"./filters/deep\");\nconst entry_1 = require(\"./filters/entry\");\nconst error_1 = require(\"./filters/error\");\nconst entry_2 = require(\"./transformers/entry\");\nclass Provider {\n constructor(_settings) {\n this._settings = _settings;\n this.errorFilter = new error_1.default(this._settings);\n this.entryFilter = new entry_1.default(this._settings, this._getMicromatchOptions());\n this.deepFilter = new deep_1.default(this._settings, this._getMicromatchOptions());\n this.entryTransformer = new entry_2.default(this._settings);\n }\n _getRootDirectory(task) {\n return path.resolve(this._settings.cwd, task.base);\n }\n _getReaderOptions(task) {\n const basePath = task.base === '.' ? '' : task.base;\n return {\n basePath,\n pathSegmentSeparator: '/',\n concurrency: this._settings.concurrency,\n deepFilter: this.deepFilter.getFilter(basePath, task.positive, task.negative),\n entryFilter: this.entryFilter.getFilter(task.positive, task.negative),\n errorFilter: this.errorFilter.getFilter(),\n followSymbolicLinks: this._settings.followSymbolicLinks,\n fs: this._settings.fs,\n stats: this._settings.stats,\n throwErrorOnBrokenSymbolicLink: this._settings.throwErrorOnBrokenSymbolicLink,\n transform: this.entryTransformer.getTransformer()\n };\n }\n _getMicromatchOptions() {\n return {\n dot: this._settings.dot,\n matchBase: this._settings.baseNameMatch,\n nobrace: !this._settings.braceExpansion,\n nocase: !this._settings.caseSensitiveMatch,\n noext: !this._settings.extglob,\n noglobstar: !this._settings.globstar,\n posix: true,\n strictSlashes: false\n };\n }\n}\nexports.default = Provider;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst async_1 = require(\"../readers/async\");\nconst provider_1 = require(\"./provider\");\nclass ProviderAsync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new async_1.default(this._settings);\n }\n async read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = await this.api(root, task, options);\n return entries.map((entry) => options.transform(entry));\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderAsync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst stream_1 = require(\"stream\");\nconst stream_2 = require(\"../readers/stream\");\nconst provider_1 = require(\"./provider\");\nclass ProviderStream extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new stream_2.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const source = this.api(root, task, options);\n const destination = new stream_1.Readable({ objectMode: true, read: () => { } });\n source\n .once('error', (error) => destination.emit('error', error))\n .on('data', (entry) => destination.emit('data', options.transform(entry)))\n .once('end', () => destination.emit('end'));\n destination\n .once('close', () => source.destroy());\n return destination;\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderStream;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst fsStat = require(\"@nodelib/fs.stat\");\nconst fsWalk = require(\"@nodelib/fs.walk\");\nconst reader_1 = require(\"./reader\");\nclass ReaderSync extends reader_1.default {\n constructor() {\n super(...arguments);\n this._walkSync = fsWalk.walkSync;\n this._statSync = fsStat.statSync;\n }\n dynamic(root, options) {\n return this._walkSync(root, options);\n }\n static(patterns, options) {\n const entries = [];\n for (const pattern of patterns) {\n const filepath = this._getFullEntryPath(pattern);\n const entry = this._getEntry(filepath, pattern, options);\n if (entry === null || !options.entryFilter(entry)) {\n continue;\n }\n entries.push(entry);\n }\n return entries;\n }\n _getEntry(filepath, pattern, options) {\n try {\n const stats = this._getStat(filepath);\n return this._makeEntry(stats, pattern);\n }\n catch (error) {\n if (options.errorFilter(error)) {\n return null;\n }\n throw error;\n }\n }\n _getStat(filepath) {\n return this._statSync(filepath, this._fsStatSettings);\n }\n}\nexports.default = ReaderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nconst sync_1 = require(\"../readers/sync\");\nconst provider_1 = require(\"./provider\");\nclass ProviderSync extends provider_1.default {\n constructor() {\n super(...arguments);\n this._reader = new sync_1.default(this._settings);\n }\n read(task) {\n const root = this._getRootDirectory(task);\n const options = this._getReaderOptions(task);\n const entries = this.api(root, task, options);\n return entries.map(options.transform);\n }\n api(root, task, options) {\n if (task.dynamic) {\n return this._reader.dynamic(root, options);\n }\n return this._reader.static(task.patterns, options);\n }\n}\nexports.default = ProviderSync;\n","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = void 0;\nconst fs = require(\"fs\");\nconst os = require(\"os\");\n/**\n * The `os.cpus` method can return zero. We expect the number of cores to be greater than zero.\n * https://github.com/nodejs/node/blob/7faeddf23a98c53896f8b574a6e66589e8fb1eb8/lib/os.js#L106-L107\n */\nconst CPU_COUNT = Math.max(os.cpus().length, 1);\nexports.DEFAULT_FILE_SYSTEM_ADAPTER = {\n lstat: fs.lstat,\n lstatSync: fs.lstatSync,\n stat: fs.stat,\n statSync: fs.statSync,\n readdir: fs.readdir,\n readdirSync: fs.readdirSync\n};\nclass Settings {\n constructor(_options = {}) {\n this._options = _options;\n this.absolute = this._getValue(this._options.absolute, false);\n this.baseNameMatch = this._getValue(this._options.baseNameMatch, false);\n this.braceExpansion = this._getValue(this._options.braceExpansion, true);\n this.caseSensitiveMatch = this._getValue(this._options.caseSensitiveMatch, true);\n this.concurrency = this._getValue(this._options.concurrency, CPU_COUNT);\n this.cwd = this._getValue(this._options.cwd, process.cwd());\n this.deep = this._getValue(this._options.deep, Infinity);\n this.dot = this._getValue(this._options.dot, false);\n this.extglob = this._getValue(this._options.extglob, true);\n this.followSymbolicLinks = this._getValue(this._options.followSymbolicLinks, true);\n this.fs = this._getFileSystemMethods(this._options.fs);\n this.globstar = this._getValue(this._options.globstar, true);\n this.ignore = this._getValue(this._options.ignore, []);\n this.markDirectories = this._getValue(this._options.markDirectories, false);\n this.objectMode = this._getValue(this._options.objectMode, false);\n this.onlyDirectories = this._getValue(this._options.onlyDirectories, false);\n this.onlyFiles = this._getValue(this._options.onlyFiles, true);\n this.stats = this._getValue(this._options.stats, false);\n this.suppressErrors = this._getValue(this._options.suppressErrors, false);\n this.throwErrorOnBrokenSymbolicLink = this._getValue(this._options.throwErrorOnBrokenSymbolicLink, false);\n this.unique = this._getValue(this._options.unique, true);\n if (this.onlyDirectories) {\n this.onlyFiles = false;\n }\n if (this.stats) {\n this.objectMode = true;\n }\n // Remove the cast to the array in the next major (#404).\n this.ignore = [].concat(this.ignore);\n }\n _getValue(option, value) {\n return option === undefined ? value : option;\n }\n _getFileSystemMethods(methods = {}) {\n return Object.assign(Object.assign({}, exports.DEFAULT_FILE_SYSTEM_ADAPTER), methods);\n }\n}\nexports.default = Settings;\n","\"use strict\";\nconst taskManager = require(\"./managers/tasks\");\nconst async_1 = require(\"./providers/async\");\nconst stream_1 = require(\"./providers/stream\");\nconst sync_1 = require(\"./providers/sync\");\nconst settings_1 = require(\"./settings\");\nconst utils = require(\"./utils\");\nasync function FastGlob(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, async_1.default, options);\n const result = await Promise.all(works);\n return utils.array.flatten(result);\n}\n// https://github.com/typescript-eslint/typescript-eslint/issues/60\n// eslint-disable-next-line no-redeclare\n(function (FastGlob) {\n FastGlob.glob = FastGlob;\n FastGlob.globSync = sync;\n FastGlob.globStream = stream;\n FastGlob.async = FastGlob;\n function sync(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, sync_1.default, options);\n return utils.array.flatten(works);\n }\n FastGlob.sync = sync;\n function stream(source, options) {\n assertPatternsInput(source);\n const works = getWorks(source, stream_1.default, options);\n /**\n * The stream returned by the provider cannot work with an asynchronous iterator.\n * To support asynchronous iterators, regardless of the number of tasks, we always multiplex streams.\n * This affects performance (+25%). I don't see best solution right now.\n */\n return utils.stream.merge(works);\n }\n FastGlob.stream = stream;\n function generateTasks(source, options) {\n assertPatternsInput(source);\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n return taskManager.generate(patterns, settings);\n }\n FastGlob.generateTasks = generateTasks;\n function isDynamicPattern(source, options) {\n assertPatternsInput(source);\n const settings = new settings_1.default(options);\n return utils.pattern.isDynamicPattern(source, settings);\n }\n FastGlob.isDynamicPattern = isDynamicPattern;\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escape(source);\n }\n FastGlob.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPathToPattern(source);\n }\n FastGlob.convertPathToPattern = convertPathToPattern;\n let posix;\n (function (posix) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapePosixPath(source);\n }\n posix.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertPosixPathToPattern(source);\n }\n posix.convertPathToPattern = convertPathToPattern;\n })(posix = FastGlob.posix || (FastGlob.posix = {}));\n let win32;\n (function (win32) {\n function escapePath(source) {\n assertPatternsInput(source);\n return utils.path.escapeWindowsPath(source);\n }\n win32.escapePath = escapePath;\n function convertPathToPattern(source) {\n assertPatternsInput(source);\n return utils.path.convertWindowsPathToPattern(source);\n }\n win32.convertPathToPattern = convertPathToPattern;\n })(win32 = FastGlob.win32 || (FastGlob.win32 = {}));\n})(FastGlob || (FastGlob = {}));\nfunction getWorks(source, _Provider, options) {\n const patterns = [].concat(source);\n const settings = new settings_1.default(options);\n const tasks = taskManager.generate(patterns, settings);\n const provider = new _Provider(settings);\n return tasks.map(provider.read, provider);\n}\nfunction assertPatternsInput(input) {\n const source = [].concat(input);\n const isValidSource = source.every((item) => utils.string.isString(item) && !utils.string.isEmpty(item));\n if (!isValidSource) {\n throw new TypeError('Patterns must be a string (non empty) or an array of strings');\n }\n}\nmodule.exports = FastGlob;\n","import { mkdir, readFile, writeFile } from 'node:fs/promises';\nimport path from 'node:path';\nimport fg from 'fast-glob';\nimport type { WorkflowGlobOptions } from './types.js';\n\n/** 读取文本文件 */\nexport async function readTextFile(filePath: string): Promise<string> {\n return readFile(filePath, 'utf8');\n}\n\n/** 写入文本文件,并自动创建父目录 */\nexport async function writeTextFile(filePath: string, content: string): Promise<void> {\n await mkdir(path.dirname(filePath), { recursive: true });\n await writeFile(filePath, content, 'utf8');\n}\n\n/** 读取 JSON 文件并解析成对象 */\nexport async function readJson<TValue = unknown>(filePath: string): Promise<TValue> {\n return JSON.parse(await readTextFile(filePath)) as TValue;\n}\n\n/** 写入 JSON 文件,并使用稳定缩进与换行 */\nexport async function writeJson(filePath: string, value: unknown): Promise<void> {\n await writeTextFile(filePath, `${JSON.stringify(value, null, 2)}\\n`);\n}\n\n/** 读取、更新并回写 JSON 文件 */\nexport async function patchJson<TValue extends Record<string, unknown>>(\n filePath: string,\n updater: (current: TValue) => Promise<TValue> | TValue,\n): Promise<TValue> {\n const current = await readJson<TValue>(filePath);\n const next = await updater(current);\n await writeJson(filePath, next);\n return next;\n}\n\n/** 基于 `fast-glob` 提供高性能 glob helper */\nexport async function globFiles(\n pattern: string,\n options: WorkflowGlobOptions = {},\n): Promise<string[]> {\n const cwd = options.cwd ?? process.cwd();\n return fg(pattern, {\n absolute: options.absolute ?? false,\n cwd,\n dot: true,\n onlyFiles: true,\n unique: true,\n });\n}\n","import picocolors from 'picocolors';\nimport { defaultPromptRuntime } from '../runtime/clack.js';\nimport { WorkflowExecutionError } from '../shared/errors.js';\nimport {\n globFiles,\n patchJson,\n readJson,\n readTextFile,\n writeJson,\n writeTextFile,\n} from '../shared/files.js';\nimport { sleep } from '../shared/helpers.js';\nimport type {\n WorkflowRendererBoxOptions,\n WorkflowRendererLogOptions,\n WorkflowRendererNoteOptions,\n WorkflowRunEvent,\n WorkflowRuntimeContext,\n} from '../shared/types.js';\nimport type { WorkflowExecutionContext } from './types.js';\n\n/** 判断对象上是否存在一个非 `undefined` 的自有值 */\nexport function hasDefinedValue(values: Record<string, unknown>, key: string): boolean {\n return Object.hasOwn(values, key) && values[key] !== undefined;\n}\n\n/** 判断对象上是否至少存在一个非 `undefined` 的自有值 */\nexport function hasAnyDefinedValue(values: Record<string, unknown>): boolean {\n return Object.values(values).some((value) => value !== undefined);\n}\n\n/** 将值安全地写入动态 values 容器 */\nexport function setValue<TValues extends Record<string, unknown>>(\n values: Partial<TValues>,\n key: string,\n value: unknown,\n): void {\n (values as Record<string, unknown>)[key] = value;\n}\n\n/** 创建工作流上下文中可直接复用的工具集合 */\nexport function createContextTools(engineContext: WorkflowExecutionContext) {\n const tools = {\n clack: defaultPromptRuntime,\n globFiles,\n patchJson,\n projectRoot: engineContext.projectRoot,\n readFile: readTextFile,\n readJson,\n sleep,\n writeJson,\n writeFile: writeTextFile,\n };\n\n for (const extendTools of engineContext.contextToolExtenders) {\n const extraTools = extendTools(tools);\n if (extraTools) Object.assign(tools, extraTools);\n }\n\n return tools;\n}\n\n/** 创建供 resolver、hook 和步骤共享的运行时上下文 */\nexport function createRuntimeContext<TValues extends Record<string, unknown>>(options: {\n engineContext: WorkflowExecutionContext;\n locale: string;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n runId: string;\n t: (key: string, params?: Record<string, boolean | null | number | string | undefined>) => string;\n timeZone: string;\n values: Partial<TValues>;\n workflowId: string;\n results: Record<string, unknown>;\n}): WorkflowRuntimeContext<TValues> {\n const tools = createContextTools(options.engineContext);\n\n /** 记录并输出一条普通日志消息 */\n function log(\n level: 'error' | 'info' | 'message' | 'step' | 'success' | 'warn' | 'warning',\n message: string | string[],\n renderOptions?: WorkflowRendererLogOptions,\n ): void {\n options.engineContext.renderer.log(level, message, renderOptions);\n options.record({\n level,\n message: Array.isArray(message) ? message.join('\\n') : message,\n type: 'message',\n });\n }\n\n /** 记录并输出一条结构化 note */\n function note(\n message?: string,\n title?: string,\n renderOptions?: WorkflowRendererNoteOptions,\n ): void {\n options.engineContext.renderer.note(message, title, renderOptions);\n const event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'> = { type: 'note' };\n\n if (message !== undefined) event.message = message;\n if (title !== undefined) event.data = { title };\n options.record(event);\n }\n\n /** 记录并输出一条结构化 box */\n function box(message?: string, title?: string, renderOptions?: WorkflowRendererBoxOptions): void {\n const renderBox = options.engineContext.renderer.box;\n if (!renderBox) {\n throw new WorkflowExecutionError('Renderer does not support box rendering', {\n stepId: '__workflow_box__',\n workflowId: options.workflowId,\n });\n }\n renderBox(message, title, renderOptions);\n const event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'> = { type: 'box' };\n if (message !== undefined) event.message = message;\n if (title !== undefined) event.data = { title };\n options.record(event);\n }\n\n return {\n box,\n colors: picocolors,\n locale: options.locale,\n log,\n note,\n runId: options.runId,\n t: options.t,\n timeZone: options.timeZone,\n tools,\n results: options.results,\n values: options.values,\n workflowId: options.workflowId,\n };\n}\n","import { PromptCancelledError } from './errors.js';\nimport type { WorkflowRenderer } from './types.js';\n\n/** 检查渲染器返回值是否表示“用户取消” */\nexport function assertNotCancelled<TValue>(\n value: TValue | symbol,\n context: {\n renderer: WorkflowRenderer;\n showCancelMessage: boolean;\n stepId: string;\n t: (key: string) => string;\n workflowId: string;\n },\n): TValue {\n if (context.renderer.isCancel?.(value)) {\n if (context.showCancelMessage) context.renderer.cancel?.(context.t('prompt.cancelled'));\n throw new PromptCancelledError(context.t('prompt.cancelled'), {\n key: context.stepId,\n scope: context.workflowId,\n });\n }\n\n return value as TValue;\n}\n","import { hasDefinedValue } from '../../session/run-session.js';\nimport type { WorkflowExecutionContext } from '../../session/types.js';\nimport { WorkflowExecutionError } from '../../shared/errors.js';\nimport { formatFieldLabel } from '../../shared/helpers.js';\nimport { assertNotCancelled } from '../../shared/prompt.js';\nimport { resolveValue } from '../../shared/resolvers.js';\nimport type {\n WorkflowAutocompleteMultiSelectStep,\n WorkflowAutocompleteStep,\n WorkflowConfirmStep,\n WorkflowGroupMultiSelectStep,\n WorkflowMultiSelectStep,\n WorkflowPasswordStep,\n WorkflowPathStep,\n WorkflowRuntimeContext,\n WorkflowSelectKeyStep,\n WorkflowSelectOption,\n WorkflowSelectStep,\n WorkflowTextStep,\n WorkflowValidator,\n WorkflowValueResolver,\n} from '../../shared/types.js';\n\n/** 生成默认的 required 文案 */\nfunction createRequiredMessage(key: string, locale: string): string {\n if (locale.toLowerCase().startsWith('zh')) return `${formatFieldLabel(key)} 必填`;\n return `${formatFieldLabel(key)} is required`;\n}\n\n/** 把 validate 返回值统一收口成字符串 */\nfunction normalizeValidationMessage(result: Error | string | undefined): string | undefined {\n if (result instanceof Error) return result.message;\n return result;\n}\n\n/** 判断一个条目是否已经是标准化选项结构 */\nfunction isSelectOption<TValue>(value: unknown): value is WorkflowSelectOption<TValue> {\n return typeof value === 'object' && value !== null && 'label' in value && 'value' in value;\n}\n\n/** 将选择类步骤的输入数组标准化为统一 options */\nexport function normalizeSelectOptions<TValue>(\n values: readonly TValue[] | readonly WorkflowSelectOption<TValue>[],\n): WorkflowSelectOption<TValue>[] {\n return values.map((item) => {\n if (isSelectOption<TValue>(item)) return item;\n\n return {\n label: String(item),\n value: item,\n };\n });\n}\n\n/** 将分组选项中的原始值统一转换成标准化选项 */\nfunction normalizeGroupedSelectOptions<TValue>(\n groups: Record<string, readonly TValue[] | readonly WorkflowSelectOption<TValue>[]>,\n): Record<string, WorkflowSelectOption<TValue>[]> {\n return Object.fromEntries(\n Object.entries(groups).map(([groupName, options]) => [\n groupName,\n normalizeSelectOptions(options),\n ]),\n );\n}\n\n/** 生成统一的步骤校验错误 */\nfunction createValidationError(\n message: string,\n stepId: string,\n workflowId: string,\n): WorkflowExecutionError {\n return new WorkflowExecutionError(message, {\n stepId,\n workflowId,\n });\n}\n\n/** 解析步骤的默认值来源 */\nasync function resolveDefaultValue<TValue, TValues extends Record<string, unknown>>(\n step: {\n defaultValue?: WorkflowValueResolver<TValue | undefined>;\n id: string;\n },\n context: WorkflowRuntimeContext<TValues>,\n values: Partial<TValues>,\n): Promise<TValue | undefined> {\n if (hasDefinedValue(values as Record<string, unknown>, step.id))\n return (values as Record<string, unknown>)[step.id] as TValue;\n\n const explicitDefaultValue = await resolveValue(step.defaultValue, context);\n if (explicitDefaultValue !== undefined) return explicitDefaultValue as TValue;\n\n return undefined;\n}\n\n/** 计算文本步骤的校验结果 */\nasync function getTextValidationMessage<TValues extends Record<string, unknown>>(\n step: WorkflowTextStep<string>,\n value: string,\n context: WorkflowRuntimeContext<TValues>,\n): Promise<string | undefined> {\n if (step.required) {\n const message =\n typeof step.required === 'string'\n ? step.required\n : createRequiredMessage(step.id, context.locale);\n if (!value.trim()) return message;\n }\n\n return normalizeValidationMessage(await step.validate?.(value, context));\n}\n\n/** 计算多选步骤的校验结果 */\nasync function getMultiSelectValidationMessage<TValue, TValues extends Record<string, unknown>>(\n step: {\n id: string;\n required?: boolean | string;\n validate?: WorkflowValidator<TValue[]>;\n },\n value: TValue[],\n context: WorkflowRuntimeContext<TValues>,\n): Promise<string | undefined> {\n if (step.required) {\n const message =\n typeof step.required === 'string'\n ? step.required\n : createRequiredMessage(step.id, context.locale);\n if (value.length === 0) return message;\n }\n\n return normalizeValidationMessage(await step.validate?.(value, context));\n}\n\n/** 计算布尔与选择步骤的校验结果 */\nasync function getValueValidationMessage<TValue, TValues extends Record<string, unknown>>(\n step: {\n validate?: WorkflowValidator<TValue>;\n },\n value: TValue,\n context: WorkflowRuntimeContext<TValues>,\n): Promise<string | undefined> {\n const validator = step.validate as\n | ((\n value: TValue,\n context: WorkflowRuntimeContext<TValues>,\n ) => Promise<Error | string | undefined>)\n | ((value: TValue, context: WorkflowRuntimeContext<TValues>) => Error | string | undefined)\n | undefined;\n return normalizeValidationMessage(await validator?.(value, context));\n}\n\n/** 生成选择值不在候选项中的校验文案 */\nfunction createInvalidSelectOptionMessage<TValue, TValues extends Record<string, unknown>>(\n stepId: string,\n value: TValue,\n options: readonly WorkflowSelectOption<TValue>[],\n context: WorkflowRuntimeContext<TValues>,\n): string {\n return context.t('workflow.step.invalidChoice', {\n options: options.map((item) => String(item.value)).join(', '),\n stepId: formatFieldLabel(stepId),\n value: String(value),\n });\n}\n\n/** 校验单值选择步骤的值是否在候选项中 */\nasync function getSelectOptionValidationMessage<TValue, TValues extends Record<string, unknown>>(\n step: {\n id: string;\n options: WorkflowValueResolver<readonly TValue[] | readonly WorkflowSelectOption<TValue>[]>;\n validate?: WorkflowValidator<TValue>;\n },\n value: TValue,\n context: WorkflowRuntimeContext<TValues>,\n): Promise<string | undefined> {\n const source = (await resolveValue(step.options, context)) ?? [];\n const normalizedOptions = normalizeSelectOptions(source);\n if (!normalizedOptions.some((item) => Object.is(item.value, value))) {\n return createInvalidSelectOptionMessage(step.id, value, normalizedOptions, context);\n }\n return getValueValidationMessage(step, value, context);\n}\n\n/** 执行文本步骤 */\nexport async function runTextStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowTextStep<string>;\n values: Partial<TValues>;\n}): Promise<string> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = String(defaultValue ?? '');\n const validationMessage = await getTextValidationMessage(options.step, value, options.context);\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const placeholder = await resolveValue(options.step.placeholder, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await options.engineContext.renderer.text({\n ...(defaultValue === undefined ? {} : { initialValue: String(defaultValue) }),\n ...(placeholder === undefined ? {} : { placeholder }),\n message,\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getTextValidationMessage(options.step, value, options.context);\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行密码步骤 */\nexport async function runPasswordStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowPasswordStep<string>;\n values: Partial<TValues>;\n}): Promise<string> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = String(defaultValue ?? '');\n const validationMessage = await getTextValidationMessage(\n {\n ...options.step,\n kind: 'text',\n },\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const password = options.engineContext.renderer.password;\n if (!password) {\n throw new WorkflowExecutionError('Renderer does not support password prompts.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const clearOnError = await resolveValue(options.step.clearOnError, options.context);\n const mask = await resolveValue(options.step.mask, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await password({\n ...(clearOnError === undefined ? {} : { clearOnError }),\n ...(mask === undefined ? {} : { mask }),\n message,\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getTextValidationMessage(\n {\n ...options.step,\n kind: 'text',\n },\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行路径步骤 */\nexport async function runPathStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowPathStep<string>;\n values: Partial<TValues>;\n}): Promise<string> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = String(defaultValue ?? '');\n const validationMessage = await getTextValidationMessage(\n {\n ...options.step,\n kind: 'text',\n },\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const pathPrompt = options.engineContext.renderer.path;\n if (!pathPrompt) {\n throw new WorkflowExecutionError('Renderer does not support path prompts.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n const directory = await resolveValue(options.step.directory, options.context);\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const root = await resolveValue(options.step.root, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await pathPrompt({\n ...(directory === undefined ? {} : { directory }),\n ...(defaultValue === undefined ? {} : { initialValue: String(defaultValue) }),\n message,\n ...(root === undefined ? {} : { root }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getTextValidationMessage(\n {\n ...options.step,\n kind: 'text',\n },\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行确认步骤 */\nexport async function runConfirmStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowConfirmStep<string>;\n values: Partial<TValues>;\n}): Promise<boolean> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = Boolean(defaultValue);\n const validationMessage = await getValueValidationMessage(options.step, value, options.context);\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const active = await resolveValue(options.step.active, options.context);\n const inactive = await resolveValue(options.step.inactive, options.context);\n const vertical = await resolveValue(options.step.vertical, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await options.engineContext.renderer.confirm({\n ...(active === undefined ? {} : { active }),\n ...(inactive === undefined ? {} : { inactive }),\n ...(defaultValue === undefined ? {} : { initialValue: Boolean(defaultValue) }),\n message,\n ...(vertical === undefined ? {} : { vertical }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getValueValidationMessage(options.step, value, options.context);\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行单选步骤 */\nexport async function runSelectStep<TValue, TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowSelectStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n const source = (await resolveValue(options.step.options, options.context)) ?? [];\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = defaultValue as TValue;\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const maxItems = await resolveValue(options.step.maxItems, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await options.engineContext.renderer.select({\n ...(defaultValue === undefined ? {} : { initialValue: defaultValue as TValue }),\n ...(maxItems === undefined ? {} : { maxItems }),\n message,\n options: normalizeSelectOptions(source),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行自动补全步骤 */\nexport async function runAutocompleteStep<\n TValue,\n TValues extends Record<string, unknown>,\n>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowAutocompleteStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n const source = (await resolveValue(options.step.options, options.context)) ?? [];\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = defaultValue as TValue;\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const filter = options.step.filter;\n const initialUserInput = await resolveValue(options.step.initialUserInput, options.context);\n const maxItems = await resolveValue(options.step.maxItems, options.context);\n const placeholder = await resolveValue(options.step.placeholder, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await options.engineContext.renderer.autocomplete({\n ...(defaultValue === undefined ? {} : { initialValue: defaultValue as TValue }),\n ...(filter === undefined ? {} : { filter }),\n ...(initialUserInput === undefined ? {} : { initialUserInput }),\n ...(maxItems === undefined ? {} : { maxItems }),\n message,\n options: normalizeSelectOptions(source),\n ...(placeholder === undefined ? {} : { placeholder }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行带快捷键的单选步骤 */\nexport async function runSelectKeyStep<\n TValue extends string,\n TValues extends Record<string, unknown>,\n>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowSelectKeyStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n const source = (await resolveValue(options.step.options, options.context)) ?? [];\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = defaultValue as TValue;\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const selectKey = options.engineContext.renderer.selectKey;\n if (!selectKey) {\n throw new WorkflowExecutionError('Renderer does not support selectKey prompts.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n const caseSensitive = await resolveValue(options.step.caseSensitive, options.context);\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await selectKey({\n ...(caseSensitive === undefined ? {} : { caseSensitive }),\n ...(defaultValue === undefined ? {} : { initialValue: defaultValue as TValue }),\n message,\n options: normalizeSelectOptions(source) as WorkflowSelectOption<TValue>[],\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getSelectOptionValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行多选步骤 */\nexport async function runMultiSelectStep<TValue, TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowMultiSelectStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue[]> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = (defaultValue as TValue[] | undefined) ?? [];\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const cursorAt = await resolveValue(options.step.cursorAt, options.context);\n const maxItems = await resolveValue(options.step.maxItems, options.context);\n const source = (await resolveValue(options.step.options, options.context)) ?? [];\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await options.engineContext.renderer.multiselect({\n ...(cursorAt === undefined ? {} : { cursorAt }),\n ...(Array.isArray(defaultValue) ? { initialValues: defaultValue as TValue[] } : {}),\n ...(maxItems === undefined ? {} : { maxItems }),\n message,\n options: normalizeSelectOptions(source),\n ...(options.step.required === undefined ? {} : { required: Boolean(options.step.required) }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行自动补全多选步骤 */\nexport async function runAutocompleteMultiSelectStep<\n TValue,\n TValues extends Record<string, unknown>,\n>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowAutocompleteMultiSelectStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue[]> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = (defaultValue as TValue[] | undefined) ?? [];\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const autocompleteMultiselect = options.engineContext.renderer.autocompleteMultiselect;\n if (!autocompleteMultiselect) {\n throw new WorkflowExecutionError(\n 'Renderer does not support autocomplete multiselect prompts.',\n {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n },\n );\n }\n\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const filter = options.step.filter;\n const maxItems = await resolveValue(options.step.maxItems, options.context);\n const placeholder = await resolveValue(options.step.placeholder, options.context);\n const source = (await resolveValue(options.step.options, options.context)) ?? [];\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await autocompleteMultiselect({\n ...(filter === undefined ? {} : { filter }),\n ...(Array.isArray(defaultValue) ? { initialValues: defaultValue as TValue[] } : {}),\n ...(maxItems === undefined ? {} : { maxItems }),\n message,\n options: normalizeSelectOptions(source),\n ...(placeholder === undefined ? {} : { placeholder }),\n ...(options.step.required === undefined ? {} : { required: Boolean(options.step.required) }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n\n/** 执行分组多选步骤 */\nexport async function runGroupMultiSelectStep<\n TValue,\n TValues extends Record<string, unknown>,\n>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowGroupMultiSelectStep<string, TValue>;\n values: Partial<TValues>;\n}): Promise<TValue[]> {\n const defaultValue = await resolveDefaultValue(options.step, options.context, options.values);\n if (hasDefinedValue(options.values as Record<string, unknown>, options.step.id)) {\n const value = (defaultValue as TValue[] | undefined) ?? [];\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (validationMessage)\n throw createValidationError(validationMessage, options.step.id, options.context.workflowId);\n return value;\n }\n\n const groupMultiselect = options.engineContext.renderer.groupMultiselect;\n if (!groupMultiselect) {\n throw new WorkflowExecutionError('Renderer does not support group multiselect prompts.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n const cursorAt = await resolveValue(options.step.cursorAt, options.context);\n const groupSpacing = await resolveValue(options.step.groupSpacing, options.context);\n const message = (await resolveValue(options.step.message, options.context)) ?? options.step.id;\n const source = (await resolveValue(options.step.options, options.context)) ?? {};\n const selectableGroups = await resolveValue(options.step.selectableGroups, options.context);\n const withGuide = await resolveValue(options.step.withGuide, options.context);\n\n while (true) {\n const raw = await groupMultiselect({\n ...(cursorAt === undefined ? {} : { cursorAt }),\n ...(groupSpacing === undefined ? {} : { groupSpacing }),\n ...(Array.isArray(defaultValue) ? { initialValues: defaultValue as TValue[] } : {}),\n message,\n options: normalizeGroupedSelectOptions(source),\n ...(options.step.required === undefined ? {} : { required: Boolean(options.step.required) }),\n ...(selectableGroups === undefined ? {} : { selectableGroups }),\n ...(withGuide === undefined ? {} : { withGuide }),\n });\n const value = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: options.step.id,\n t: (key) => options.context.t(key),\n workflowId: options.context.workflowId,\n });\n const validationMessage = await getMultiSelectValidationMessage(\n options.step,\n value,\n options.context,\n );\n if (!validationMessage) return value;\n options.engineContext.renderer.log('error', validationMessage);\n }\n}\n","import { AsyncLocalStorage } from 'node:async_hooks';\nimport { format, type InspectOptions, inspect } from 'node:util';\n\n/** 当前命令步骤需要接收的 console 输出 */\ninterface WorkflowCapturedConsole {\n stderr: (chunk: string) => void;\n stdout: (chunk: string) => void;\n}\n\nconst capturedConsoleStore = new AsyncLocalStorage<WorkflowCapturedConsole>();\nlet activeCaptureCount = 0;\nlet restoreConsole: (() => void) | null = null;\n\n/** 为 console 输出补齐末尾换行,避免 task-log 拼接异常 */\nfunction ensureTrailingNewline(message: string): string {\n return message.endsWith('\\n') ? message : `${message}\\n`;\n}\n\n/** 获取当前 async 上下文绑定的 console 捕获器 */\nfunction getCapturedConsole(): WorkflowCapturedConsole | undefined {\n return capturedConsoleStore.getStore();\n}\n\n/** 按需补丁 console,未捕获的上下文仍保持原始行为 */\nfunction patchConsole(): void {\n if (restoreConsole) return;\n const originalDebug = console.debug;\n const originalDir = console.dir;\n const originalError = console.error;\n const originalInfo = console.info;\n const originalLog = console.log;\n const originalWarn = console.warn;\n\n console.log = (...args: unknown[]) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalLog, console, args);\n captured.stdout(ensureTrailingNewline(format(...args)));\n };\n\n console.info = (...args: unknown[]) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalInfo, console, args);\n captured.stdout(ensureTrailingNewline(format(...args)));\n };\n\n console.debug = (...args: unknown[]) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalDebug, console, args);\n captured.stdout(ensureTrailingNewline(format(...args)));\n };\n\n console.warn = (...args: unknown[]) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalWarn, console, args);\n captured.stderr(ensureTrailingNewline(format(...args)));\n };\n\n console.error = (...args: unknown[]) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalError, console, args);\n captured.stderr(ensureTrailingNewline(format(...args)));\n };\n\n console.dir = (value: unknown, options?: InspectOptions) => {\n const captured = getCapturedConsole();\n if (!captured) return Reflect.apply(originalDir, console, [value, options] as const);\n captured.stdout(ensureTrailingNewline(inspect(value, options)));\n };\n\n restoreConsole = () => {\n console.debug = originalDebug;\n console.dir = originalDir;\n console.error = originalError;\n console.info = originalInfo;\n console.log = originalLog;\n console.warn = originalWarn;\n restoreConsole = null;\n };\n}\n\n/** 当没有活动捕获上下文时恢复原始 console */\nfunction unpatchConsoleIfIdle(): void {\n if (activeCaptureCount > 0) return;\n restoreConsole?.();\n}\n\n/** 在当前 async 上下文中捕获 console 输出,并转发到命令步骤日志 */\nexport async function withCapturedConsole<TValue>(\n captured: WorkflowCapturedConsole,\n run: () => Promise<TValue> | TValue,\n): Promise<TValue> {\n activeCaptureCount += 1;\n patchConsole();\n\n try {\n return await capturedConsoleStore.run(captured, run);\n } finally {\n activeCaptureCount = Math.max(0, activeCaptureCount - 1);\n unpatchConsoleIfIdle();\n }\n}\n","import path from 'node:path';\nimport process from 'node:process';\nimport picocolors from 'picocolors';\nimport { defaultPromptRuntime } from '../../runtime/clack.js';\nimport { withCapturedConsole } from '../../runtime/console.js';\nimport type { WorkflowExecutionContext } from '../../session/types.js';\nimport { isWorkflowExecutionError, WorkflowExecutionError } from '../../shared/errors.js';\nimport { readTextFile } from '../../shared/files.js';\nimport { sleep } from '../../shared/helpers.js';\nimport { resolveValue } from '../../shared/resolvers.js';\nimport type {\n WorkflowCommandExecutionResult,\n WorkflowCommandPresenter,\n WorkflowCommandPresenterOptions,\n WorkflowCommandStep,\n WorkflowRunEvent,\n WorkflowRuntimeContext,\n WorkflowValueResolver,\n} from '../../shared/types.js';\n\nconst MAX_TIMER_DELAY_MS = 2_147_483_647;\n\ntype CommandChunkState = {\n combined: string[];\n stderr: string[];\n stdout: string[];\n};\n\n/** 判断未知值是否是标准命令执行记录 */\nfunction isCommandExecutionResult(value: unknown): value is WorkflowCommandExecutionResult {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'code' in value &&\n typeof value.code === 'number' &&\n 'combined' in value &&\n typeof value.combined === 'string' &&\n 'stderr' in value &&\n typeof value.stderr === 'string' &&\n 'stdout' in value &&\n typeof value.stdout === 'string'\n );\n}\n\n/** 将当前缓存输出与退出码整理成标准执行记录 */\nfunction createCommandExecutionResult(\n state: CommandChunkState,\n code: number | null | undefined,\n): WorkflowCommandExecutionResult {\n return {\n code: code ?? 1,\n combined: state.combined.join(''),\n stderr: state.stderr.join(''),\n stdout: state.stdout.join(''),\n };\n}\n\n/** 合并嵌套命令的退出码,保证任一失败都会反映到当前步骤 */\nfunction mergeNestedExitCode(current: number, next: number): number {\n if (next !== 0) return next;\n return current;\n}\n\n/** 将命令输出块写入 presenter、事件流和缓存 */\nfunction forwardCommandChunk(options: {\n chunk: string;\n presenter: WorkflowCommandPresenter | null;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n renderer: 'inherit' | 'quiet' | 'task-log';\n state: CommandChunkState;\n stepId: string;\n stream: 'stderr' | 'stdout';\n}): void {\n options.state.combined.push(options.chunk);\n\n if (options.stream === 'stdout') {\n options.state.stdout.push(options.chunk);\n options.presenter?.stdout(options.chunk);\n if (options.renderer === 'inherit') process.stdout.write(options.chunk);\n } else {\n options.state.stderr.push(options.chunk);\n options.presenter?.stderr(options.chunk);\n if (options.renderer === 'inherit') process.stderr.write(options.chunk);\n }\n\n options.record({\n data: {\n chunk: options.chunk,\n stream: options.stream,\n },\n message: options.chunk,\n stepId: options.stepId,\n type: 'command-output',\n });\n}\n\n/** 解析 command 重试配置 */\nfunction resolveRetryOptions(\n retry:\n | boolean\n | { backoff?: 'exponential' | 'fixed' | 'linear'; delayMs?: number; maxAttempts?: number }\n | undefined,\n): { backoff: 'exponential' | 'fixed' | 'linear'; delayMs: number; maxAttempts: number } | null {\n if (!retry) return null;\n if (retry === true) {\n return {\n backoff: 'fixed',\n delayMs: 100,\n maxAttempts: 3,\n };\n }\n\n return {\n backoff: retry.backoff ?? 'fixed',\n delayMs: retry.delayMs ?? 100,\n maxAttempts: Math.max(1, retry.maxAttempts ?? 3),\n };\n}\n\n/** 计算当前 attempt 之后的重试等待时间 */\nfunction getRetryDelay(\n attempt: number,\n retry: { backoff: 'exponential' | 'fixed' | 'linear'; delayMs: number },\n): number {\n const rawDelay =\n retry.backoff === 'linear'\n ? retry.delayMs * attempt\n : retry.backoff === 'exponential'\n ? retry.delayMs * 2 ** (attempt - 1)\n : retry.delayMs;\n\n if (!Number.isFinite(rawDelay)) return MAX_TIMER_DELAY_MS;\n return Math.max(0, Math.min(rawDelay, MAX_TIMER_DELAY_MS));\n}\n\n/** 将相对项目根目录的路径解析成绝对路径;绝对路径会原样返回 */\nfunction resolveProjectPath(projectRoot: string, targetPath: string): string {\n return path.isAbsolute(targetPath) ? targetPath : path.join(projectRoot, targetPath);\n}\n\n/** 获取默认 shell 启动命令;运行时会把脚本文本追加到参数末尾 */\nfunction getDefaultShellInvocation(): { args: string[]; command: string } {\n if (process.platform === 'win32') {\n return {\n args: ['/d', '/s', '/c'],\n command: process.env.ComSpec ?? 'cmd.exe',\n };\n }\n\n return {\n args: ['-c'],\n command: process.env.SHELL ?? '/bin/sh',\n };\n}\n\n/** 从 shebang 第一行中解析解释器及其前置参数 */\nfunction parseShebangInterpreter(line: string): { args: string[]; command: string } | null {\n if (!line.startsWith('#!')) return null;\n\n /** 将 shebang 命令行按 shell 规则拆成参数,支持引号与反斜杠转义 */\n function splitShellWords(commandLine: string): string[] {\n const parts: string[] = [];\n let current = '';\n let quote: '\"' | \"'\" | null = null;\n let escaping = false;\n\n for (const char of commandLine) {\n if (escaping) {\n current += char;\n escaping = false;\n continue;\n }\n\n if (char === '\\\\') {\n escaping = true;\n continue;\n }\n\n if (quote) {\n if (char === quote) {\n quote = null;\n } else {\n current += char;\n }\n continue;\n }\n\n if (char === '\"' || char === \"'\") {\n quote = char;\n continue;\n }\n\n if (/\\s/u.test(char)) {\n if (current) {\n parts.push(current);\n current = '';\n }\n continue;\n }\n\n current += char;\n }\n\n if (escaping) current += '\\\\';\n if (current) parts.push(current);\n return parts;\n }\n\n const parts = splitShellWords(line.slice(2).trim());\n if (parts.length === 0) return null;\n const [command, ...args] = parts;\n if (!command) return null;\n\n if (command === '/usr/bin/env' && args[0] === '-S') {\n const [resolvedCommand, ...resolvedArgs] = args.slice(1);\n if (!resolvedCommand) return null;\n return {\n args: resolvedArgs,\n command: resolvedCommand,\n };\n }\n\n if (command === '/usr/bin/env' && args[0]) {\n return {\n args: args.slice(1),\n command: args[0],\n };\n }\n\n return {\n args,\n command,\n };\n}\n\n/** 为脚本文件自动推断解释器;优先 shebang,其次扩展名,最后回退到平台默认 shell */\nasync function detectScriptFileInvocation(\n scriptFile: string,\n): Promise<{ args: string[]; command: string }> {\n const [firstLine = ''] = (await readTextFile(scriptFile)).split(/\\r?\\n/, 1);\n const shebang = parseShebangInterpreter(firstLine);\n if (shebang) return shebang;\n\n const extension = path.extname(scriptFile).toLowerCase();\n if (process.platform === 'win32') {\n if (extension === '.ps1') {\n return {\n args: ['-File'],\n command: 'powershell.exe',\n };\n }\n\n if (extension === '.bat' || extension === '.cmd') {\n return {\n args: ['/d', '/s', '/c'],\n command: process.env.ComSpec ?? 'cmd.exe',\n };\n }\n }\n\n return {\n args: [],\n command: process.env.SHELL ?? '/bin/sh',\n };\n}\n\n/** 验证 shell.args 的运行时值,避免字符串被扩展成字符数组 */\nfunction normalizeShellArgs(options: {\n stepId: string;\n value: unknown;\n workflowId: string;\n}): string[] | undefined {\n if (options.value === undefined) return undefined;\n if (!Array.isArray(options.value) || options.value.some((item) => typeof item !== 'string')) {\n throw new WorkflowExecutionError('shell.args must resolve to a string array.', {\n stepId: options.stepId,\n workflowId: options.workflowId,\n });\n }\n\n return options.value;\n}\n\n/** 解析命令步骤最终展示标题 */\nexport async function resolveCommandStepTitle<TValues extends Record<string, unknown>>(\n step: WorkflowCommandStep<string>,\n context: WorkflowRuntimeContext<TValues>,\n): Promise<string> {\n return (\n (await resolveValue(step.title, context)) ??\n ('command' in step\n ? ((await resolveValue(step.command, context)) ?? step.id)\n : 'scriptFile' in step\n ? ((await resolveValue(step.scriptFile, context)) ?? step.id)\n : 'Task') ??\n step.id\n );\n}\n\n/** 为多行命令输出增加缩进,便于放进 note 中阅读 */\nfunction indentMultilineText(value: string): string {\n return value\n .trimEnd()\n .split(/\\r?\\n/)\n .map((line) => ` ${line}`)\n .join('\\n');\n}\n\n/** 将命令执行结果格式化成 note 中可读的分段文本 */\nfunction formatDeferredCommandOutput(result: WorkflowCommandExecutionResult): string {\n const sections = [`exitCode: ${result.code}`];\n const stdout = result.stdout.trim();\n const stderr = result.stderr.trim();\n\n if (stdout) sections.push(`stdout:\\n${indentMultilineText(result.stdout)}`);\n if (stderr) sections.push(`stderr:\\n${indentMultilineText(result.stderr)}`);\n\n return sections.join('\\n');\n}\n\n/** 从失败异常中提取命令执行结果,方便并行组在失败后也能展示输出 */\nfunction getFailedCommandResult(error: unknown): WorkflowCommandExecutionResult | null {\n if (isCommandExecutionResult(error)) return error;\n if (!(error instanceof Error)) return null;\n return isCommandExecutionResult(error.cause) ? error.cause : null;\n}\n\n/** 以分块方式渲染并行命令的输出,减少不同步骤日志交错 */\nexport async function renderParallelCommandOutputs<\n TValues extends Record<string, unknown>,\n>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n executions: PromiseSettledResult<void>[];\n steps: readonly WorkflowCommandStep<string>[];\n titles: readonly string[];\n}): Promise<void> {\n for (let index = 0; index < options.steps.length; index += 1) {\n const step = options.steps[index];\n const execution = options.executions[index];\n if (!step || !execution) continue;\n\n let result: WorkflowCommandExecutionResult | null = null;\n if (execution.status === 'fulfilled') {\n result = options.engineContext.commandExecutions.get(step.id) ?? null;\n } else {\n result =\n getFailedCommandResult(execution.reason) ??\n options.engineContext.commandExecutions.get(step.id) ??\n null;\n }\n if (!result) continue;\n\n const title = options.titles[index] ?? step.id;\n const hasOutput = Boolean(result.stdout.trim() || result.stderr.trim());\n if (!hasOutput) {\n if (result.code === 0) {\n options.context.log(\n 'success',\n options.context.t('workflow.parallel.completedNoOutput', {\n title,\n }),\n );\n } else {\n options.context.log('error', `${title} failed with exit code ${result.code}.`);\n }\n continue;\n }\n\n options.context.note(\n formatDeferredCommandOutput(result),\n result.code === 0 ? title : `${title} (exit ${result.code})`,\n );\n }\n}\n\n/** 执行命令步骤 */\nexport async function runCommandStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n outputMode?: 'buffered' | 'streaming';\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n step: WorkflowCommandStep<string>;\n}): Promise<unknown> {\n const title = await resolveCommandStepTitle(options.step, options.context);\n const renderer = options.step.renderer ?? 'task-log';\n const outputMode = options.outputMode ?? 'streaming';\n const state: CommandChunkState = {\n combined: [] as string[],\n stderr: [] as string[],\n stdout: [] as string[],\n };\n const exitState = {\n code: 0,\n };\n const inlineStep = 'run' in options.step ? options.step : null;\n const externalStep =\n 'run' in options.step ? null : 'command' in options.step ? options.step : null;\n const scriptFileStep =\n 'run' in options.step ? null : 'scriptFile' in options.step ? options.step : null;\n const retry = resolveRetryOptions(options.step.retry);\n const maxAttempts = retry?.maxAttempts ?? 1;\n let attempt = 1;\n\n /** 统一把命令 cwd 解析成基于项目根目录的绝对路径 */\n function resolveStepCwd(cwd: string | undefined): string {\n return cwd\n ? resolveProjectPath(options.engineContext.projectRoot, cwd)\n : options.engineContext.projectRoot;\n }\n\n /** 显式设置当前命令步骤退出码,并校验调用方输入 */\n function setExitCode(code: number): void {\n if (!Number.isInteger(code)) {\n throw new WorkflowExecutionError('Command step exit code must be an integer.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n exitState.code = code;\n }\n\n /** 统一记录当前步骤最新的命令执行记录 */\n function storeCommandExecution(\n result: WorkflowCommandExecutionResult,\n ): WorkflowCommandExecutionResult {\n const buffered = createCommandExecutionResult(state, result.code);\n const execution = {\n code: buffered.code,\n combined: buffered.combined || result.combined,\n stderr: buffered.stderr || result.stderr,\n stdout: buffered.stdout || result.stdout,\n };\n\n options.engineContext.commandExecutions.set(options.step.id, execution);\n return execution;\n }\n\n /** 根据当前命令步骤上下文创建展示器 */\n function createPresenter(\n presenterOptions: Omit<\n WorkflowCommandPresenterOptions,\n 'outputMode' | 'renderer' | 'runId' | 'stepId' | 'title' | 'workflowId'\n >,\n ): WorkflowCommandPresenter | null {\n if (outputMode === 'buffered' || renderer !== 'task-log') return null;\n return (\n options.engineContext.renderer.createCommandPresenter?.({\n ...presenterOptions,\n outputMode,\n renderer,\n runId: options.context.runId,\n stepId: options.step.id,\n ...(options.step.taskLog === undefined ? {} : { taskLog: options.step.taskLog }),\n title,\n workflowId: options.context.workflowId,\n }) ?? null\n );\n }\n\n const inlinePresenter = inlineStep ? createPresenter({ source: 'inline' }) : null;\n const spawnedCommand =\n inlineStep !== null\n ? null\n : await (async () => {\n if (externalStep) {\n const command = await resolveValue(externalStep.command, options.context);\n if (!command) {\n throw new WorkflowExecutionError('Command step requires a command.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n const cwd = resolveStepCwd(await resolveValue(externalStep.cwd, options.context));\n const env = await resolveValue(externalStep.env, options.context);\n const resolvedShellArgs = normalizeShellArgs({\n stepId: options.step.id,\n value: await resolveValue(externalStep.shell?.args, options.context),\n workflowId: options.context.workflowId,\n });\n const defaultShell = getDefaultShellInvocation();\n const shellArgs = [...(resolvedShellArgs ?? defaultShell.args), command];\n const shellCommand =\n (await resolveValue(externalStep.shell?.command, options.context)) ??\n defaultShell.command;\n\n return {\n args: shellArgs,\n command: shellCommand,\n cwd,\n env,\n presenter: createPresenter({\n args: shellArgs,\n command: shellCommand,\n commandLine: command,\n cwd,\n source: 'shell',\n }),\n stdin: externalStep.stdin,\n };\n }\n\n if (scriptFileStep) {\n const scriptFileValue = await resolveValue(scriptFileStep.scriptFile, options.context);\n if (!scriptFileValue) {\n throw new WorkflowExecutionError('Command step requires a script file.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n const scriptFile = resolveProjectPath(\n options.engineContext.projectRoot,\n scriptFileValue,\n );\n const detectedShell = await detectScriptFileInvocation(scriptFile);\n const resolvedShellArgs = normalizeShellArgs({\n stepId: options.step.id,\n value: await resolveValue(scriptFileStep.shell?.args, options.context),\n workflowId: options.context.workflowId,\n });\n const shellCommand =\n (await resolveValue(scriptFileStep.shell?.command, options.context)) ??\n detectedShell.command;\n const args = [...(resolvedShellArgs ?? detectedShell.args), scriptFile];\n const cwd = resolveStepCwd(await resolveValue(scriptFileStep.cwd, options.context));\n const env = await resolveValue(scriptFileStep.env, options.context);\n\n return {\n args,\n command: shellCommand,\n cwd,\n env,\n presenter: createPresenter({\n args,\n command: shellCommand,\n cwd,\n scriptFile,\n source: 'shell',\n }),\n stdin: scriptFileStep.stdin,\n };\n }\n\n throw new WorkflowExecutionError(\n 'Command step requires a command, scriptFile, or run().',\n {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n },\n );\n })();\n\n while (true) {\n state.combined.length = 0;\n state.stderr.length = 0;\n state.stdout.length = 0;\n exitState.code = 0;\n\n try {\n let execution: WorkflowCommandExecutionResult;\n let resultValue: unknown;\n\n if (inlineStep) {\n const stderr = (chunk: string) =>\n forwardCommandChunk({\n chunk,\n presenter: inlinePresenter,\n record: options.record,\n renderer,\n state,\n stepId: options.step.id,\n stream: 'stderr',\n });\n const stdout = (chunk: string) =>\n forwardCommandChunk({\n chunk,\n presenter: inlinePresenter,\n record: options.record,\n renderer,\n state,\n stepId: options.step.id,\n stream: 'stdout',\n });\n const exec = async (\n commandLine: string,\n execOptions?: {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n shell?: {\n args?: WorkflowValueResolver<string[] | undefined>;\n command?: WorkflowValueResolver<string | undefined>;\n };\n stdin?: 'ignore' | 'inherit';\n },\n ): Promise<WorkflowCommandExecutionResult> => {\n if (!commandLine.trim()) {\n throw new WorkflowExecutionError('Command step exec requires a command.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n const defaultShell = getDefaultShellInvocation();\n const resolvedShellArgs = normalizeShellArgs({\n stepId: options.step.id,\n value: await resolveValue(execOptions?.shell?.args, options.context),\n workflowId: options.context.workflowId,\n });\n const shellCommand =\n (await resolveValue(execOptions?.shell?.command, options.context)) ??\n defaultShell.command;\n\n const executionResult = await options.engineContext.executor.execute({\n args: [...(resolvedShellArgs ?? defaultShell.args), commandLine],\n command: shellCommand,\n cwd: resolveStepCwd(execOptions?.cwd),\n ...(execOptions?.env === undefined ? {} : { env: execOptions.env }),\n onStderr: stderr,\n onStdout: stdout,\n renderer,\n ...(execOptions?.stdin === undefined ? {} : { stdin: execOptions.stdin }),\n ...(title ? { title } : {}),\n });\n exitState.code = mergeNestedExitCode(exitState.code, executionResult.code);\n return executionResult;\n };\n const execScriptFile = async (\n scriptFile: string,\n execOptions?: {\n cwd?: string;\n env?: NodeJS.ProcessEnv;\n shell?: {\n args?: WorkflowValueResolver<string[] | undefined>;\n command?: WorkflowValueResolver<string | undefined>;\n };\n stdin?: 'ignore' | 'inherit';\n },\n ): Promise<WorkflowCommandExecutionResult> => {\n const resolvedScriptFile = resolveProjectPath(\n options.engineContext.projectRoot,\n scriptFile,\n );\n const detectedShell = await detectScriptFileInvocation(resolvedScriptFile);\n const resolvedShellArgs = normalizeShellArgs({\n stepId: options.step.id,\n value: await resolveValue(execOptions?.shell?.args, options.context),\n workflowId: options.context.workflowId,\n });\n const shellCommand =\n (await resolveValue(execOptions?.shell?.command, options.context)) ??\n detectedShell.command;\n\n const executionResult = await options.engineContext.executor.execute({\n args: [...(resolvedShellArgs ?? detectedShell.args), resolvedScriptFile],\n command: shellCommand,\n cwd: resolveStepCwd(execOptions?.cwd),\n ...(execOptions?.env === undefined ? {} : { env: execOptions.env }),\n onStderr: stderr,\n onStdout: stdout,\n renderer,\n ...(execOptions?.stdin === undefined ? {} : { stdin: execOptions.stdin }),\n ...(title ? { title } : {}),\n });\n exitState.code = mergeNestedExitCode(exitState.code, executionResult.code);\n return executionResult;\n };\n resultValue = await withCapturedConsole(\n { stderr, stdout },\n async () =>\n await inlineStep.run(options.context, {\n box: options.context.box,\n clack: defaultPromptRuntime,\n colors: picocolors,\n exec,\n execScriptFile,\n log: options.context.log,\n note: options.context.note,\n projectRoot: options.engineContext.projectRoot,\n setExitCode,\n sleep,\n stderr,\n stdout,\n ...(options.step.taskLog === undefined ? {} : { taskLog: options.step.taskLog }),\n }),\n );\n execution = createCommandExecutionResult(state, exitState.code);\n options.engineContext.commandExecutions.set(options.step.id, execution);\n } else {\n if (!spawnedCommand) {\n throw new WorkflowExecutionError(\n 'Command step requires a command, scriptFile, or run().',\n {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n },\n );\n }\n const result = await options.engineContext.executor.execute({\n ...(spawnedCommand.args.length > 0 ? { args: spawnedCommand.args } : {}),\n command: spawnedCommand.command,\n ...(spawnedCommand.cwd === undefined ? {} : { cwd: spawnedCommand.cwd }),\n ...(spawnedCommand.env === undefined ? {} : { env: spawnedCommand.env }),\n onStderr(chunk) {\n forwardCommandChunk({\n chunk,\n presenter: spawnedCommand.presenter,\n record: options.record,\n renderer,\n state,\n stepId: options.step.id,\n stream: 'stderr',\n });\n },\n onStdout(chunk) {\n forwardCommandChunk({\n chunk,\n presenter: spawnedCommand.presenter,\n record: options.record,\n renderer,\n state,\n stepId: options.step.id,\n stream: 'stdout',\n });\n },\n renderer,\n ...(spawnedCommand.stdin === undefined ? {} : { stdin: spawnedCommand.stdin }),\n ...(title ? { title } : {}),\n });\n execution = storeCommandExecution(result);\n }\n\n if (execution.code === 0 || attempt >= maxAttempts) {\n (inlinePresenter ?? spawnedCommand?.presenter)?.finish(execution.code);\n if (execution.code !== 0 && !options.step.allowFailure) {\n throw new WorkflowExecutionError(\n `Command step failed with exit code ${execution.code}.`,\n {\n cause: execution,\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n },\n );\n }\n\n if (!inlineStep) {\n const resolveResult = externalStep?.result ?? scriptFileStep?.result;\n resultValue = resolveResult ? await resolveResult(execution, options.context) : undefined;\n }\n\n return resultValue;\n }\n\n if (!retry) {\n throw new WorkflowExecutionError('Command step retry configuration is missing.', {\n stepId: options.step.id,\n workflowId: options.context.workflowId,\n });\n }\n\n const delay = getRetryDelay(attempt, retry);\n const message = `${options.step.id} failed with exit code ${execution.code}. Retrying in ${delay}ms (${attempt + 1}/${maxAttempts}).`;\n options.engineContext.renderer.log('warn', message);\n options.record({\n data: {\n attempt: attempt + 1,\n delay,\n maxAttempts,\n reason: `exit=${execution.code}`,\n },\n message,\n stepId: options.step.id,\n type: 'step-retried',\n });\n if (delay > 0) await sleep(delay);\n attempt += 1;\n } catch (error) {\n const execution = createCommandExecutionResult(\n state,\n exitState.code === 0 ? 1 : exitState.code,\n );\n options.engineContext.commandExecutions.set(options.step.id, execution);\n\n if (!retry || attempt >= maxAttempts) {\n if (!isWorkflowExecutionError(error))\n (inlinePresenter ?? spawnedCommand?.presenter)?.finish(execution.code);\n\n if (options.step.allowFailure && !isWorkflowExecutionError(error)) {\n if (!inlineStep) {\n const resolveResult = externalStep?.result ?? scriptFileStep?.result;\n return resolveResult ? await resolveResult(execution, options.context) : undefined;\n }\n\n return undefined;\n }\n\n throw error;\n }\n\n const delay = getRetryDelay(attempt, retry);\n const message = `${options.step.id} failed. Retrying in ${delay}ms (${attempt + 1}/${maxAttempts}).`;\n options.engineContext.renderer.log('warn', message);\n options.record({\n data: {\n attempt: attempt + 1,\n delay,\n error: error instanceof Error ? error.message : String(error),\n maxAttempts,\n },\n message,\n stepId: options.step.id,\n type: 'step-retried',\n });\n if (delay > 0) await sleep(delay);\n attempt += 1;\n }\n }\n}\n","import { runBoxStep, runLogStep, runNoteStep } from '../nodes/display/handlers.js';\nimport {\n runAutocompleteMultiSelectStep,\n runAutocompleteStep,\n runConfirmStep,\n runGroupMultiSelectStep,\n runMultiSelectStep,\n runPasswordStep,\n runPathStep,\n runSelectKeyStep,\n runSelectStep,\n runTextStep,\n} from '../nodes/input/handlers.js';\nimport {\n renderParallelCommandOutputs,\n resolveCommandStepTitle,\n runCommandStep,\n} from '../nodes/task/command-handler.js';\nimport { hasDefinedValue, setValue } from '../session/run-session.js';\nimport type { WorkflowExecutionContext } from '../session/types.js';\nimport { formatPromptValue } from '../shared/helpers.js';\nimport { resolveValue } from '../shared/resolvers.js';\nimport type {\n WorkflowAutocompleteMultiSelectStep,\n WorkflowAutocompleteStep,\n WorkflowBoxStep,\n WorkflowBuiltinDisplayStep,\n WorkflowBuiltinValueStep,\n WorkflowCheckpointReason,\n WorkflowCommandStep,\n WorkflowConfirmStep,\n WorkflowExecutableStep,\n WorkflowGroupMultiSelectStep,\n WorkflowLogStep,\n WorkflowMultiSelectStep,\n WorkflowNoteStep,\n WorkflowPasswordStep,\n WorkflowPathStep,\n WorkflowPluginStep,\n WorkflowRunEvent,\n WorkflowRunOptions,\n WorkflowRuntimeContext,\n WorkflowSelectKeyStep,\n WorkflowSelectStep,\n WorkflowStepDefinition,\n WorkflowTextStep,\n} from '../shared/types.js';\n\n/** 判断一个节点是否为命令步骤 */\nexport function isCommandStep(step: WorkflowStepDefinition): step is WorkflowCommandStep<string> {\n return step.kind === 'command';\n}\n\n/** 判断一个节点是否为展示类步骤 */\nexport function isDisplayStep(step: WorkflowStepDefinition): step is WorkflowBuiltinDisplayStep {\n return step.kind === 'box' || step.kind === 'log' || step.kind === 'note';\n}\n\n/** 判断一个节点是否会写入 values */\nexport function isValueStep(step: WorkflowStepDefinition): step is WorkflowBuiltinValueStep {\n return !isCommandStep(step) && !isDisplayStep(step);\n}\n\n/** 写入步骤产物,并在同一轮运行里提示重复 step id 覆盖 */\nfunction storeStepValue<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowExecutableStep;\n stepId: string;\n value: unknown;\n values: Partial<TValues>;\n}): void {\n if (isDisplayStep(options.step)) return;\n\n if (hasDefinedValue(options.context.results, options.stepId)) {\n options.context.log(\n 'warn',\n options.context.t('workflow.step.overwritten', {\n stepId: options.stepId,\n }),\n );\n }\n\n if (isValueStep(options.step)) {\n setValue(options.values, options.stepId, options.value);\n }\n setValue(options.context.results, options.stepId, options.value);\n}\n\n/** 统一记录步骤被跳过的原因;重复 id 会额外输出 warning */\nfunction skipExecutableStep<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n reason: 'checkpoint' | 'duplicate-id' | 'when';\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n stepId: string;\n}): void {\n if (options.reason === 'duplicate-id') {\n options.context.log(\n 'warn',\n options.context.t('workflow.step.duplicateSkipped', {\n stepId: options.stepId,\n }),\n );\n }\n\n options.record({\n data: { reason: options.reason },\n stepId: options.stepId,\n type: 'step-skipped',\n });\n}\n\n/** 生成步骤完成事件里的消息与附加数据 */\nfunction createCompletedStepEvent(options: {\n engineContext: WorkflowExecutionContext;\n step: WorkflowExecutableStep;\n value: unknown;\n}): { data: Record<string, unknown>; message: string } {\n const { engineContext, step, value } = options;\n switch (step.kind) {\n case 'password':\n return {\n data: { value: '***' },\n message: '***',\n };\n case 'note':\n return {\n data: { value: 'note' },\n message: String((value as { message?: string }).message ?? ''),\n };\n case 'box':\n return {\n data: { value: 'box' },\n message: String((value as { message?: string }).message ?? ''),\n };\n case 'log':\n return {\n data: { level: (value as { level?: string }).level ?? 'info' },\n message: String((value as { message?: string }).message ?? ''),\n };\n case 'command': {\n const execution = engineContext.commandExecutions.get(step.id);\n return {\n data: execution ? { code: execution.code } : {},\n message: execution ? `exit=${execution.code}` : '',\n };\n }\n case 'confirm':\n return {\n data: { value },\n message: String(value),\n };\n case 'text':\n case 'path':\n case 'select-key':\n return {\n data: { value },\n message: String(value),\n };\n case 'select':\n case 'autocomplete':\n case 'autocomplete-multiselect':\n case 'multiselect':\n case 'group-multiselect': {\n const formattedValue = formatPromptValue(value);\n return {\n data: { value: formattedValue },\n message: formattedValue,\n };\n }\n default: {\n const formattedValue = formatPromptValue(value);\n return {\n data: { value: formattedValue },\n message: formattedValue,\n };\n }\n }\n}\n\n/** 统一处理步骤完成后的存值、事件记录与 checkpoint 保存 */\nasync function completeExecutableStep<TValues extends Record<string, unknown>>(options: {\n completedStepIds: Set<string>;\n context: WorkflowRuntimeContext<TValues>;\n deferCheckpointSave?: boolean;\n engineContext: WorkflowExecutionContext;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n saveCheckpoint: (reason?: WorkflowCheckpointReason) => Promise<void>;\n step: WorkflowExecutableStep;\n value: unknown;\n values: Partial<TValues>;\n}): Promise<void> {\n storeStepValue({\n context: options.context,\n step: options.step,\n stepId: options.step.id,\n value: options.value,\n values: options.values,\n });\n const completedEvent = createCompletedStepEvent({\n engineContext: options.engineContext,\n step: options.step,\n value: options.value,\n });\n options.record({\n data: completedEvent.data,\n message: completedEvent.message,\n stepId: options.step.id,\n type: 'step-completed',\n });\n options.completedStepIds.add(options.step.id);\n if (!options.deferCheckpointSave) await options.saveCheckpoint();\n}\n\n/** 执行一个可执行步骤 */\nexport async function executeExecutableStep<TValues extends Record<string, unknown>>(options: {\n commandOutputMode?: 'buffered' | 'streaming';\n completedStepIds: Set<string>;\n context: WorkflowRuntimeContext<TValues>;\n deferCheckpointSave?: boolean;\n engineContext: WorkflowExecutionContext;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n restoredStepIds: ReadonlySet<string>;\n saveCheckpoint: (reason?: WorkflowCheckpointReason) => Promise<void>;\n skipWhenCheck?: boolean;\n step: WorkflowExecutableStep;\n values: Partial<TValues>;\n}): Promise<void> {\n if (options.completedStepIds.has(options.step.id)) {\n skipExecutableStep({\n context: options.context,\n reason: options.restoredStepIds.has(options.step.id) ? 'checkpoint' : 'duplicate-id',\n record: options.record,\n stepId: options.step.id,\n });\n return;\n }\n\n if (!options.skipWhenCheck) {\n const shouldRun = (await resolveValue(options.step.when, options.context)) ?? true;\n if (!shouldRun) {\n skipExecutableStep({\n context: options.context,\n reason: 'when',\n record: options.record,\n stepId: options.step.id,\n });\n return;\n }\n }\n\n options.record({\n stepId: options.step.id,\n type: 'step-started',\n });\n\n let value: unknown;\n\n switch (options.step.kind) {\n case 'text':\n value = await runTextStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowTextStep<string>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'password':\n value = await runPasswordStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowPasswordStep<string>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'path':\n value = await runPathStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowPathStep<string>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'confirm':\n value = await runConfirmStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowConfirmStep<string>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'select-key':\n value = await runSelectKeyStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowSelectKeyStep<string, string>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'select':\n value = await runSelectStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowSelectStep<string, unknown>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'autocomplete':\n value = await runAutocompleteStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowAutocompleteStep<string, unknown>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'autocomplete-multiselect':\n value = await runAutocompleteMultiSelectStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowAutocompleteMultiSelectStep<string, unknown>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'multiselect':\n value = await runMultiSelectStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowMultiSelectStep<string, unknown>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'group-multiselect':\n value = await runGroupMultiSelectStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n step: WorkflowGroupMultiSelectStep<string, unknown>;\n values: Partial<TValues>;\n },\n );\n break;\n case 'note':\n value = await runNoteStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowNoteStep<string>;\n },\n );\n break;\n case 'box':\n value = await runBoxStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowBoxStep<string>;\n },\n );\n break;\n case 'log':\n value = await runLogStep(\n options as {\n context: WorkflowRuntimeContext<TValues>;\n step: WorkflowLogStep<string>;\n },\n );\n break;\n case 'command':\n value = await runCommandStep({\n context: options.context,\n engineContext: options.engineContext,\n record: options.record,\n ...(options.commandOutputMode === undefined\n ? {}\n : { outputMode: options.commandOutputMode }),\n step: options.step as WorkflowCommandStep<string>,\n });\n break;\n default: {\n const handler = options.engineContext.stepHandlers.get(options.step.kind);\n if (!handler) {\n throw new Error(`Unsupported workflow step kind: ${options.step.kind}.`);\n }\n value = await handler({\n context: options.context,\n record: options.record,\n step: options.step as WorkflowPluginStep,\n values: options.values,\n });\n }\n }\n\n await completeExecutableStep({\n completedStepIds: options.completedStepIds,\n context: options.context,\n record: options.record,\n saveCheckpoint: options.saveCheckpoint,\n engineContext: options.engineContext,\n step: options.step,\n value,\n values: options.values,\n ...(options.deferCheckpointSave === undefined\n ? {}\n : { deferCheckpointSave: options.deferCheckpointSave }),\n });\n}\n\n/** 递归执行步骤节点列表 */\nexport async function executeNodes<TValues extends Record<string, unknown>>(options: {\n checkpoint: WorkflowRunOptions<Record<string, unknown>>['checkpoint'];\n completedStepIds: Set<string>;\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n nodes: readonly WorkflowStepDefinition[];\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n restoredStepIds: ReadonlySet<string>;\n saveCheckpoint: (reason?: WorkflowCheckpointReason) => Promise<void>;\n values: Partial<TValues>;\n}): Promise<void> {\n for (let index = 0; index < options.nodes.length; index += 1) {\n const node = options.nodes[index];\n if (!node) continue;\n\n if (isCommandStep(node) && node.parallel) {\n const parallelSteps = [node];\n let nextIndex = index + 1;\n\n while (nextIndex < options.nodes.length) {\n const nextNode = options.nodes[nextIndex];\n if (!nextNode || !isCommandStep(nextNode) || nextNode.parallel !== node.parallel) break;\n parallelSteps.push(nextNode);\n nextIndex += 1;\n }\n if (parallelSteps.length === 1) {\n await executeExecutableStep({\n completedStepIds: options.completedStepIds,\n context: options.context,\n engineContext: options.engineContext,\n record: options.record,\n restoredStepIds: options.restoredStepIds,\n saveCheckpoint: options.saveCheckpoint,\n step: node,\n values: options.values,\n });\n continue;\n }\n\n const runnableParallelSteps: WorkflowCommandStep<string>[] = [];\n const seenParallelStepIds = new Set<string>();\n for (const step of parallelSteps) {\n if (options.completedStepIds.has(step.id)) {\n skipExecutableStep({\n context: options.context,\n reason: options.restoredStepIds.has(step.id) ? 'checkpoint' : 'duplicate-id',\n record: options.record,\n stepId: step.id,\n });\n continue;\n }\n if (seenParallelStepIds.has(step.id)) {\n skipExecutableStep({\n context: options.context,\n reason: 'duplicate-id',\n record: options.record,\n stepId: step.id,\n });\n continue;\n }\n\n const shouldRun = (await resolveValue(step.when, options.context)) ?? true;\n if (!shouldRun) {\n skipExecutableStep({\n context: options.context,\n reason: 'when',\n record: options.record,\n stepId: step.id,\n });\n continue;\n }\n\n seenParallelStepIds.add(step.id);\n runnableParallelSteps.push(step);\n }\n\n if (runnableParallelSteps.length === 0) {\n index = nextIndex - 1;\n continue;\n }\n\n if (runnableParallelSteps.length === 1) {\n const [singleStep] = runnableParallelSteps;\n if (!singleStep) continue;\n await executeExecutableStep({\n completedStepIds: options.completedStepIds,\n context: options.context,\n engineContext: options.engineContext,\n record: options.record,\n restoredStepIds: options.restoredStepIds,\n saveCheckpoint: options.saveCheckpoint,\n skipWhenCheck: true,\n step: singleStep,\n values: options.values,\n });\n index = nextIndex - 1;\n continue;\n }\n\n const titles = await Promise.all(\n runnableParallelSteps.map((step) => resolveCommandStepTitle(step, options.context)),\n );\n options.engineContext.renderer.log(\n 'step',\n options.context.t('workflow.parallel.started', {\n count: runnableParallelSteps.length,\n titles: titles.join(', '),\n }),\n );\n\n const executions = await Promise.allSettled(\n runnableParallelSteps.map((step) =>\n executeExecutableStep({\n commandOutputMode: 'buffered',\n completedStepIds: options.completedStepIds,\n context: options.context,\n deferCheckpointSave: true,\n engineContext: options.engineContext,\n record: options.record,\n restoredStepIds: options.restoredStepIds,\n saveCheckpoint: options.saveCheckpoint,\n skipWhenCheck: true,\n step,\n values: options.values,\n }),\n ),\n );\n\n await renderParallelCommandOutputs({\n context: options.context,\n engineContext: options.engineContext,\n executions,\n steps: runnableParallelSteps,\n titles,\n });\n await options.saveCheckpoint();\n const rejected = executions.find(\n (execution): execution is PromiseRejectedResult => execution.status === 'rejected',\n );\n if (rejected) throw rejected.reason;\n\n index = nextIndex - 1;\n continue;\n }\n\n await executeExecutableStep({\n completedStepIds: options.completedStepIds,\n context: options.context,\n engineContext: options.engineContext,\n record: options.record,\n restoredStepIds: options.restoredStepIds,\n saveCheckpoint: options.saveCheckpoint,\n step: node,\n values: options.values,\n });\n }\n}\n","/** 将文本时间戳格式化为更适合提示展示的字符串 */\nexport function formatRuntimeTimestamp(\n timestamp: string,\n locale: string,\n timeZone: string,\n): string {\n try {\n const formatter = new Intl.DateTimeFormat(locale, {\n day: '2-digit',\n hour: '2-digit',\n hour12: false,\n minute: '2-digit',\n month: '2-digit',\n second: '2-digit',\n timeZone,\n year: 'numeric',\n });\n return formatter.format(new Date(timestamp));\n } catch {\n return timestamp;\n }\n}\n","import type { WorkflowExecutionContext } from '../session/types.js';\nimport { assertNotCancelled } from '../shared/prompt.js';\nimport type {\n WorkflowCheckpointEntry,\n WorkflowCheckpointReason,\n WorkflowCheckpointResumeMode,\n WorkflowRunEvent,\n WorkflowRunOptions,\n WorkflowRuntimeContext,\n} from '../shared/types.js';\nimport { formatRuntimeTimestamp } from './time.js';\n\n/** 解析本次运行的 checkpoint 恢复策略 */\nfunction resolveCheckpointResumeMode(options: {\n checkpoint: WorkflowRunOptions<Record<string, unknown>>['checkpoint'];\n hasInitialValues: boolean;\n isInteractive: boolean;\n}): WorkflowCheckpointResumeMode {\n if (options.checkpoint === false) return 'never';\n if (options.checkpoint?.resume) return options.checkpoint.resume;\n if (options.hasInitialValues) return 'never';\n return options.isInteractive ? 'ask' : 'never';\n}\n\n/** 判断本次运行是否应该保存 checkpoint */\nfunction shouldSaveCheckpoint(\n checkpoint: WorkflowRunOptions<Record<string, unknown>>['checkpoint'],\n): boolean {\n if (checkpoint === false) return false;\n return checkpoint?.save !== false;\n}\n\n/** 从 checkpoint 恢复 values、results 与已完成步骤集合 */\nexport async function applyCheckpointResume(options: {\n checkpoint: WorkflowRunOptions<Record<string, unknown>>['checkpoint'];\n completedStepIds: Set<string>;\n context: WorkflowRuntimeContext<Record<string, unknown>>;\n engineContext: WorkflowExecutionContext;\n hasInitialValues: boolean;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n restoredStepIds: Set<string>;\n results: Record<string, unknown>;\n values: Record<string, unknown>;\n workflow: {\n id: string;\n };\n}): Promise<void> {\n if (!options.engineContext.checkpointStore) return;\n\n const checkpoint = await options.engineContext.checkpointStore.getLatest<Record<string, unknown>>(\n options.workflow.id,\n );\n if (!checkpoint) return;\n\n if (\n options.hasInitialValues &&\n options.checkpoint !== false &&\n options.checkpoint?.resume === undefined\n ) {\n options.context.log('info', options.context.t('workflow.checkpoint.skippedInitialValues'));\n options.record({\n data: {\n reason: 'initial-values',\n timestamp: checkpoint.timestamp,\n },\n message: checkpoint.timestamp,\n type: 'checkpoint-skipped',\n });\n return;\n }\n\n const resumeMode = resolveCheckpointResumeMode({\n checkpoint: options.checkpoint,\n hasInitialValues: options.hasInitialValues,\n isInteractive: options.engineContext.renderer.isInteractive(),\n });\n if (resumeMode === 'never') return;\n\n let shouldResume = resumeMode === 'always';\n if (resumeMode === 'ask' && options.engineContext.renderer.isInteractive()) {\n const raw = await options.engineContext.renderer.confirm({\n initialValue: true,\n message: options.context.t('workflow.checkpoint.message', {\n timestamp: formatRuntimeTimestamp(\n checkpoint.timestamp,\n options.context.locale,\n checkpoint.timeZone ?? options.context.timeZone,\n ),\n }),\n });\n shouldResume = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: '__workflow_checkpoint__',\n t: (key) => options.context.t(key),\n workflowId: options.workflow.id,\n });\n }\n\n if (!shouldResume) return;\n\n const preservedValues = { ...options.values };\n Object.assign(options.results, checkpoint.results);\n Object.assign(options.values, checkpoint.values, preservedValues);\n for (const stepId of checkpoint.completedStepIds) {\n options.completedStepIds.add(stepId);\n options.restoredStepIds.add(stepId);\n }\n\n const checkpointMessageKey =\n checkpoint.reason === 'cancelled'\n ? 'workflow.checkpoint.appliedCancelled'\n : checkpoint.reason === 'failed'\n ? 'workflow.checkpoint.appliedFailed'\n : 'workflow.checkpoint.applied';\n const restoredStepsMessage =\n checkpoint.completedStepIds.length === 0\n ? ''\n : `\\n\\n${options.context.t('workflow.checkpoint.restoredSteps', {\n steps: checkpoint.completedStepIds.map((stepId) => `- ${stepId}`).join('\\n'),\n })}`;\n options.context.note(\n `${options.context.t(checkpointMessageKey, {\n count: checkpoint.completedStepIds.length,\n timestamp: formatRuntimeTimestamp(\n checkpoint.timestamp,\n options.context.locale,\n checkpoint.timeZone ?? options.context.timeZone,\n ),\n })}${restoredStepsMessage}`,\n 'Checkpoint',\n );\n options.record({\n data: {\n completedStepIds: checkpoint.completedStepIds,\n previousRunId: checkpoint.runId,\n reason: checkpoint.reason ?? null,\n timestamp: checkpoint.timestamp,\n },\n message: checkpoint.timestamp,\n type: 'checkpoint-loaded',\n });\n}\n\n/** 按当前运行状态保存 checkpoint */\nexport async function saveWorkflowCheckpoint<TValues extends Record<string, unknown>>(options: {\n checkpoint: WorkflowRunOptions<Record<string, unknown>>['checkpoint'];\n completedStepIds: Set<string>;\n context: WorkflowRuntimeContext<TValues>;\n engineContext: WorkflowExecutionContext;\n reason?: WorkflowCheckpointReason;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n}): Promise<void> {\n if (!options.engineContext.checkpointStore) return;\n if (!shouldSaveCheckpoint(options.checkpoint)) return;\n\n const entry: WorkflowCheckpointEntry<Record<string, unknown>> = {\n completedStepIds: [...options.completedStepIds],\n locale: options.context.locale,\n timeZone: options.context.timeZone,\n results: { ...(options.context.results as Record<string, unknown>) },\n ...(options.reason === undefined ? {} : { reason: options.reason }),\n runId: options.context.runId,\n timestamp: new Date().toISOString(),\n values: { ...(options.context.values as Record<string, unknown>) },\n workflowId: options.context.workflowId,\n };\n\n await options.engineContext.checkpointStore.save(entry);\n options.record({\n data: {\n completedStepIds: entry.completedStepIds,\n timestamp: entry.timestamp,\n },\n message: entry.timestamp,\n type: 'checkpoint-saved',\n });\n}\n\n/** 在 workflow 成功结束后清理 checkpoint */\nexport async function clearWorkflowCheckpoint(options: {\n context: WorkflowRuntimeContext<Record<string, unknown>>;\n engineContext: WorkflowExecutionContext;\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n}): Promise<void> {\n if (!options.engineContext.checkpointStore) return;\n\n await options.engineContext.checkpointStore.clear(options.context.workflowId);\n options.record({\n type: 'checkpoint-cleared',\n });\n}\n","import { isValueStep } from '../graph/scheduler.js';\nimport { hasDefinedValue, setValue } from '../session/run-session.js';\nimport { formatPromptValue } from '../shared/helpers.js';\nimport { resolveValue } from '../shared/resolvers.js';\nimport type {\n WorkflowRuntimeContext,\n WorkflowStepDefinition,\n WorkflowSummaryPreset,\n} from '../shared/types.js';\n\nconst SUMMARY_COLORS = {\n boolean: '\\u001B[35m',\n key: '\\u001B[36m',\n null: '\\u001B[90m',\n number: '\\u001B[33m',\n reset: '\\u001B[0m',\n string: '\\u001B[32m',\n};\n\n/** 使用 ANSI 颜色高亮 JSON 文本 */\nfunction colorizeJson(value: string): string {\n return value.replace(\n /^( *)(\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\")(?=: )|\"(?:\\\\u[\\da-fA-F]{4}|\\\\[^u]|[^\\\\\"])*\"|-?\\d+(?:\\.\\d+)?(?:[eE][+-]?\\d+)?|\\btrue\\b|\\bfalse\\b|\\bnull\\b/gm,\n (match, indentation?: string, keyToken?: string) => {\n if (keyToken) {\n return `${indentation ?? ''}${SUMMARY_COLORS.key}${keyToken}${SUMMARY_COLORS.reset}`;\n }\n\n if (match.startsWith('\"')) return `${SUMMARY_COLORS.string}${match}${SUMMARY_COLORS.reset}`;\n if (match === 'true' || match === 'false')\n return `${SUMMARY_COLORS.boolean}${match}${SUMMARY_COLORS.reset}`;\n if (match === 'null') return `${SUMMARY_COLORS.null}${match}${SUMMARY_COLORS.reset}`;\n return `${SUMMARY_COLORS.number}${match}${SUMMARY_COLORS.reset}`;\n },\n );\n}\n\n/** 将 values 渲染为 key=value 摘要 */\nfunction formatKeyValueSummary(values: Record<string, unknown>): string {\n return Object.entries(values)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${key}=${formatPromptValue(value)}`)\n .join('\\n');\n}\n\n/** 将 values 渲染为彩色 JSON 摘要 */\nfunction formatJsonSummary(values: Record<string, unknown>): string {\n return colorizeJson(JSON.stringify(values, null, 2));\n}\n\n/** 根据预设渲染默认摘要 */\nfunction formatValuesSummary(\n values: Record<string, unknown>,\n preset: WorkflowSummaryPreset,\n): string {\n if (Object.keys(values).length === 0) return '';\n return preset === 'json' ? formatJsonSummary(values) : formatKeyValueSummary(values);\n}\n\n/** 从步骤树中提取 values 字段 key */\nfunction collectValueKeys(steps: readonly WorkflowStepDefinition[]): string[] {\n const keys: string[] = [];\n\n for (const step of steps) {\n if (!isValueStep(step)) continue;\n if ('id' in step) keys.push(step.id);\n }\n\n return [...new Set(keys)];\n}\n\n/** 从最终 values 中提取可作为“输入快照”的字段 */\nexport function collectStepValues<TValues extends Record<string, unknown>>(\n steps: readonly WorkflowStepDefinition[],\n values: Partial<TValues>,\n): Partial<TValues> {\n const keys = collectValueKeys(steps);\n const picked: Partial<TValues> = {};\n\n for (const key of keys) {\n if (!hasDefinedValue(values as Record<string, unknown>, key)) continue;\n setValue(picked, key, (values as Record<string, unknown>)[key]);\n }\n\n return picked;\n}\n\n/** 执行默认的完成摘要输出 */\nexport async function runDefaultOnComplete<TValues extends Record<string, unknown>>(options: {\n context: WorkflowRuntimeContext<TValues>;\n summary?:\n | false\n | {\n enabled?: boolean;\n preset?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<WorkflowSummaryPreset | undefined> | WorkflowSummaryPreset | undefined;\n title?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined;\n };\n workflow: {\n steps: readonly WorkflowStepDefinition[];\n };\n}): Promise<void> {\n if (options.summary === false || options.summary?.enabled === false) return;\n const values = collectStepValues(options.workflow.steps, options.context.values);\n const preset =\n (await resolveValue(\n options.summary?.preset as\n | ((\n context: WorkflowRuntimeContext<TValues>,\n ) => Promise<WorkflowSummaryPreset | undefined> | WorkflowSummaryPreset | undefined)\n | WorkflowSummaryPreset\n | undefined,\n options.context,\n )) ?? 'key-value';\n const summary = formatValuesSummary(values as Record<string, unknown>, preset);\n if (!summary) return;\n const title =\n (await resolveValue(\n options.summary?.title as\n | ((\n context: WorkflowRuntimeContext<TValues>,\n ) => Promise<string | undefined> | string | undefined)\n | string\n | undefined,\n options.context,\n )) ?? 'Summary';\n options.context.note(summary, title);\n}\n","import type { WorkflowExecutionContext } from '../session/types.js';\nimport { formatPromptValue } from '../shared/helpers.js';\nimport { assertNotCancelled } from '../shared/prompt.js';\nimport type {\n WorkflowRunEvent,\n WorkflowRunOptions,\n WorkflowRuntimeContext,\n WorkflowStepDefinition,\n} from '../shared/types.js';\nimport { collectStepValues } from './summary.js';\nimport { formatRuntimeTimestamp } from './time.js';\n\n/** 根据快照值生成默认标签 */\nfunction formatSnapshotLabel(values: Record<string, unknown>): string {\n return Object.entries(values)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]) => `${key}=${formatPromptValue(value)}`)\n .join(' ');\n}\n\n/** 处理 workflow 级快照复用逻辑 */\nexport async function applySnapshotReuse(options: {\n context: WorkflowRuntimeContext<Record<string, unknown>>;\n engineContext: WorkflowExecutionContext;\n hasInitialValues: boolean;\n history: WorkflowRunOptions<Record<string, unknown>>['history'];\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n values: Record<string, unknown>;\n workflow: {\n id: string;\n };\n}): Promise<void> {\n if (!options.engineContext.historyStore || options.history === false) return;\n if (options.hasInitialValues && options.history?.reuse === undefined) return;\n\n const reuseMode = options.history?.reuse ?? 'ask';\n if (reuseMode === 'off') return;\n\n const snapshots = await options.engineContext.historyStore.listSnapshots<Record<string, unknown>>(\n {\n limit: options.engineContext.maxSnapshotsPerWorkflow,\n workflowId: options.workflow.id,\n },\n );\n if (snapshots.length === 0) return;\n\n let selected = null as (typeof snapshots)[number] | null;\n\n if (reuseMode === 'latest') {\n selected = snapshots[0] ?? null;\n } else if (reuseMode === 'history') {\n selected = snapshots[0] ?? null;\n if (options.engineContext.renderer.isInteractive()) {\n const raw = await options.engineContext.renderer.select({\n message: options.context.t('workflow.reuse.choose'),\n options: snapshots.map((snapshot) => ({\n hint: options.context.t('workflow.savedAt', {\n timestamp: formatRuntimeTimestamp(\n snapshot.timestamp,\n options.context.locale,\n snapshot.timeZone ?? options.context.timeZone,\n ),\n }),\n label: snapshot.label,\n value: snapshot,\n })),\n });\n selected = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: '__workflow_history__',\n t: (key) => options.context.t(key),\n workflowId: options.workflow.id,\n });\n }\n } else if (options.engineContext.renderer.isInteractive()) {\n const raw = await options.engineContext.renderer.select({\n message: options.context.t('workflow.reuse.message'),\n options: [\n {\n hint: options.context.t('workflow.reuse.newHint'),\n label: options.context.t('workflow.reuse.new'),\n value: '__new__',\n },\n {\n hint: options.context.t('workflow.reuse.latestHint'),\n label: options.context.t('workflow.reuse.latest'),\n value: '__latest__',\n },\n {\n hint: options.context.t('workflow.reuse.chooseHint', { count: snapshots.length }),\n label: options.context.t('workflow.reuse.choose'),\n value: '__history__',\n },\n ],\n });\n const mode = assertNotCancelled(raw, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: '__workflow_history_mode__',\n t: (key) => options.context.t(key),\n workflowId: options.workflow.id,\n });\n\n if (mode === '__latest__') {\n selected = snapshots[0] ?? null;\n } else if (mode === '__history__') {\n const chosen = await options.engineContext.renderer.select({\n message: options.context.t('workflow.reuse.choose'),\n options: snapshots.map((snapshot) => ({\n hint: options.context.t('workflow.savedAt', {\n timestamp: formatRuntimeTimestamp(\n snapshot.timestamp,\n options.context.locale,\n snapshot.timeZone ?? options.context.timeZone,\n ),\n }),\n label: snapshot.label,\n value: snapshot,\n })),\n });\n selected = assertNotCancelled(chosen, {\n renderer: options.engineContext.renderer,\n showCancelMessage: options.engineContext.showCancelMessage,\n stepId: '__workflow_history__',\n t: (key) => options.context.t(key),\n workflowId: options.workflow.id,\n });\n }\n }\n\n if (!selected) return;\n\n Object.assign(options.values, {\n ...selected.values,\n ...(options.values as Record<string, unknown>),\n });\n options.context.note(\n options.context.t('workflow.reuse.applied', { label: selected.label }),\n 'History',\n );\n options.record({\n data: {\n label: selected.label,\n timestamp: selected.timestamp,\n },\n message: selected.label,\n type: 'snapshot-loaded',\n });\n}\n\n/** 保存 workflow 级历史快照 */\nexport async function saveWorkflowSnapshot(options: {\n context: WorkflowRuntimeContext<Record<string, unknown>>;\n engineContext: WorkflowExecutionContext;\n history: WorkflowRunOptions<Record<string, unknown>>['history'];\n record: (event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'>) => void;\n values: Record<string, unknown>;\n workflow: {\n id: string;\n snapshot?: {\n enabled?: boolean;\n label?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string> | string;\n };\n steps: readonly WorkflowStepDefinition[];\n };\n}): Promise<void> {\n if (!options.engineContext.historyStore) return;\n if (options.workflow.snapshot?.enabled === false) return;\n if (options.history === false || options.history?.saveSnapshot === false) return;\n\n const snapshotValues = collectStepValues(options.workflow.steps, options.values);\n if (Object.keys(snapshotValues).length === 0) return;\n\n const label =\n (await options.workflow.snapshot?.label?.(options.context)) ??\n formatSnapshotLabel(snapshotValues as Record<string, unknown>);\n const entry = {\n label,\n locale: options.context.locale,\n timestamp: new Date().toISOString(),\n timeZone: options.context.timeZone,\n values: snapshotValues,\n workflowId: options.workflow.id,\n };\n\n await options.engineContext.historyStore.saveSnapshot(entry, {\n maxSnapshotsPerWorkflow: options.engineContext.maxSnapshotsPerWorkflow,\n });\n options.record({\n data: { label },\n message: label,\n type: 'snapshot-saved',\n });\n}\n","import type { WorkflowExecutionContext } from '../session/types.js';\nimport { formatFieldLabel, renderAsciiArt } from '../shared/helpers.js';\nimport { resolveValue } from '../shared/resolvers.js';\nimport type { WorkflowRuntimeContext } from '../shared/types.js';\n\n/** 解析 intro 的 ASCII banner 与标题 */\nexport async function resolveIntroPresentation(options: {\n context: WorkflowRuntimeContext<Record<string, unknown>>;\n engineContext: WorkflowExecutionContext;\n workflow: {\n asciiArt?:\n | ((\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<boolean | string | undefined> | boolean | string | undefined)\n | boolean\n | string;\n id: string;\n intro?:\n | false\n | ((\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined)\n | string;\n title?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined;\n };\n}): Promise<{ asciiArt?: string; title?: string }> {\n const intro = options.workflow.intro;\n\n if (intro === undefined) {\n const title =\n (await resolveValue(options.workflow.title, options.context)) ??\n formatFieldLabel(options.workflow.id);\n const asciiSource = options.engineContext.asciiArt\n ? await resolveValue(options.workflow.asciiArt ?? true, options.context)\n : undefined;\n const asciiArt =\n asciiSource === true\n ? title\n ? renderAsciiArt(title)\n : undefined\n : typeof asciiSource === 'string'\n ? asciiSource.trimEnd()\n : undefined;\n return {\n ...(asciiArt ? { asciiArt } : {}),\n ...(title ? { title } : {}),\n };\n }\n\n if (intro === false) return {};\n\n if (typeof intro === 'string' || typeof intro === 'function') {\n const title = await resolveValue(intro, options.context);\n const asciiSource = options.engineContext.asciiArt\n ? await resolveValue(options.workflow.asciiArt ?? true, options.context)\n : undefined;\n const asciiArt =\n asciiSource === true\n ? title\n ? renderAsciiArt(title)\n : undefined\n : typeof asciiSource === 'string'\n ? asciiSource.trimEnd()\n : undefined;\n return {\n ...(asciiArt ? { asciiArt } : {}),\n ...(title ? { title } : {}),\n };\n }\n\n return {};\n}\n","import { randomUUID } from 'node:crypto';\nimport { executeNodes } from '../graph/scheduler.js';\nimport { createRuntimeContext, hasAnyDefinedValue } from '../session/run-session.js';\nimport type { WorkflowExecutionContext } from '../session/types.js';\nimport { isPromptCancelledError } from '../shared/errors.js';\nimport { assertNotCancelled } from '../shared/prompt.js';\nimport { resolveValue } from '../shared/resolvers.js';\nimport type {\n WorkflowConfirmSaveLogContext,\n WorkflowConfirmSaveLogOptions,\n WorkflowDefinition,\n WorkflowRunEvent,\n WorkflowRunOptions,\n WorkflowRunResult,\n WorkflowRuntimeContext,\n WorkflowStepDefinition,\n WorkflowSummaryPreset,\n} from '../shared/types.js';\nimport { createNoopLogStore, createWorkflowLogSession } from '../storage/log.js';\nimport {\n applyCheckpointResume,\n clearWorkflowCheckpoint,\n saveWorkflowCheckpoint,\n} from './checkpoint-state.js';\nimport { applySnapshotReuse, saveWorkflowSnapshot } from './history-state.js';\nimport { resolveIntroPresentation } from './intro.js';\nimport { runDefaultOnComplete } from './summary.js';\n\n/** 执行一个完整的 workflow */\nexport async function executeWorkflow(\n workflow: WorkflowDefinition<readonly WorkflowStepDefinition[]>,\n options: WorkflowRunOptions<Record<string, unknown>> | undefined,\n engineContext: WorkflowExecutionContext,\n): Promise<WorkflowRunResult<Record<string, unknown>>> {\n const locale = options?.locale ?? engineContext.i18n.locale;\n const timeZone = options?.timeZone ?? engineContext.timeZone;\n const runId = randomUUID();\n const results = {} as Record<string, unknown>;\n const completedStepIds = new Set<string>();\n const restoredStepIds = new Set<string>();\n const values = {\n ...(options?.initialValues ?? {}),\n } as Partial<Record<string, unknown>>;\n const hasInitialValues = hasAnyDefinedValue(values as Record<string, unknown>);\n const runLogOptions = options?.logs === false ? undefined : options?.logs;\n const workflowLogOptions = (workflow as { log?: unknown }).log as\n | {\n completion?:\n | false\n | {\n afterComplete?: (\n context: WorkflowConfirmSaveLogContext<Record<string, unknown>>,\n ) => Promise<void> | void;\n initialValue?: boolean;\n message?: string;\n mode?: 'confirm' | 'save';\n path?: string;\n };\n saveOnFailure?: boolean;\n }\n | undefined;\n const activeLogStore =\n options?.logs === false || runLogOptions?.enabled === false ? null : engineContext.logStore;\n const logCompletion =\n activeLogStore === null ? false : (workflowLogOptions?.completion ?? ({} as const));\n const shouldAutoSaveLogOnFailure =\n activeLogStore !== null && workflowLogOptions?.saveOnFailure !== false;\n const logSessionOptions: Parameters<typeof createWorkflowLogSession<Record<string, unknown>>>[0] =\n {\n locale,\n runId,\n store: activeLogStore ?? createNoopLogStore(),\n timeZone,\n workflowId: workflow.id,\n };\n if (options?.meta !== undefined) logSessionOptions.meta = options.meta;\n\n const logSession = createWorkflowLogSession<Record<string, unknown>>(logSessionOptions);\n const translate = (\n key: string,\n params?: Record<string, boolean | null | number | string | undefined>,\n ) => engineContext.i18n.translate(locale, key, params);\n const runtimeContext = createRuntimeContext<Record<string, unknown>>({\n engineContext,\n locale,\n record: logSession.record,\n runId,\n t: translate,\n timeZone,\n results,\n values,\n workflowId: workflow.id,\n });\n const workflowHooks = workflow as unknown as {\n onComplete?: (context: WorkflowRuntimeContext<Record<string, unknown>>) => Promise<void> | void;\n onStart?: (context: WorkflowRuntimeContext<Record<string, unknown>>) => Promise<void> | void;\n outro?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined;\n };\n const workflowSummary = (workflow as { summary?: unknown }).summary as\n | false\n | {\n enabled?: boolean;\n preset?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<WorkflowSummaryPreset | undefined> | WorkflowSummaryPreset | undefined;\n title?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined;\n }\n | undefined;\n\n logSession.record({\n type: 'workflow-started',\n });\n\n try {\n const intro = await resolveIntroPresentation({\n context: runtimeContext,\n engineContext,\n workflow: workflow as unknown as {\n asciiArt?:\n | ((\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<boolean | string | undefined> | boolean | string | undefined)\n | boolean\n | string;\n id: string;\n intro?:\n | false\n | ((\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined)\n | string;\n title?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string | undefined> | string | undefined;\n },\n });\n if (intro.asciiArt) engineContext.renderer.banner?.(intro.asciiArt);\n if (intro.title) engineContext.renderer.intro?.(intro.title);\n\n await applySnapshotReuse({\n context: runtimeContext as WorkflowRuntimeContext<Record<string, unknown>>,\n engineContext,\n hasInitialValues,\n history: options?.history,\n record: logSession.record,\n values: values as Record<string, unknown>,\n workflow: workflow as unknown as {\n id: string;\n },\n });\n await applyCheckpointResume({\n checkpoint: options?.checkpoint,\n completedStepIds,\n context: runtimeContext,\n engineContext,\n hasInitialValues,\n record: logSession.record,\n restoredStepIds,\n results,\n values: values as Record<string, unknown>,\n workflow: workflow as unknown as {\n id: string;\n },\n });\n\n await workflowHooks.onStart?.(runtimeContext);\n await executeNodes({\n checkpoint: options?.checkpoint,\n completedStepIds,\n context: runtimeContext,\n engineContext,\n nodes: workflow.steps,\n record: logSession.record,\n restoredStepIds,\n saveCheckpoint: async (reason) =>\n await saveWorkflowCheckpoint({\n checkpoint: options?.checkpoint,\n completedStepIds,\n context: runtimeContext,\n engineContext,\n ...(reason === undefined ? {} : { reason }),\n record: logSession.record,\n }),\n values,\n });\n\n if (workflowHooks.onComplete) {\n await workflowHooks.onComplete(runtimeContext);\n } else {\n await runDefaultOnComplete({\n context: runtimeContext,\n ...(workflowSummary === undefined ? {} : { summary: workflowSummary }),\n workflow,\n });\n }\n\n await saveWorkflowSnapshot({\n context: runtimeContext,\n engineContext,\n history: options?.history,\n record: logSession.record,\n values: values as Record<string, unknown>,\n workflow: workflow as unknown as {\n id: string;\n snapshot?: {\n enabled?: boolean;\n label?: (\n context: WorkflowRuntimeContext<Record<string, unknown>>,\n ) => Promise<string> | string;\n };\n steps: readonly WorkflowStepDefinition[];\n },\n });\n await clearWorkflowCheckpoint({\n context: runtimeContext,\n engineContext,\n record: logSession.record,\n });\n\n const outro = await resolveValue(workflowHooks.outro, runtimeContext);\n if (outro) engineContext.renderer.outro?.(outro);\n\n logSession.record({\n type: 'workflow-completed',\n });\n logSession.complete('completed', values, results);\n let savedLogPath: string | null = null;\n\n /** 保存当前运行日志 */\n async function saveLog(saveOptions?: { path?: string }): Promise<string> {\n if (!activeLogStore) return '';\n const path = await logSession.save(saveOptions);\n if (path) {\n savedLogPath = path;\n result.savedLogPath = path;\n }\n return path;\n }\n\n const result: WorkflowRunResult<Record<string, unknown>> = {\n confirmSaveLog,\n confirmSaveLogSafely,\n events: logSession.snapshot().events,\n locale,\n runId,\n savedLogPath,\n saveLog,\n snapshot() {\n return logSession.snapshot();\n },\n status: 'completed',\n results,\n values: values as Record<string, unknown>,\n workflowId: workflow.id,\n };\n\n /** 根据交互环境决定是否询问并保存日志 */\n async function confirmSaveLog(\n saveOptions?: WorkflowConfirmSaveLogOptions<Record<string, unknown>>,\n ): Promise<string | null> {\n if (!activeLogStore) {\n await saveOptions?.afterConfirm?.({\n confirmed: false,\n path: null,\n results: result.results,\n values: result.values,\n workflowId: workflow.id,\n });\n return null;\n }\n\n const defaultInitialValue = !engineContext.renderer.isInteractive();\n const initialValue = saveOptions?.initialValue ?? defaultInitialValue;\n let confirmed = initialValue;\n let path: string | null = null;\n\n if (engineContext.renderer.isInteractive()) {\n const raw = await engineContext.renderer.confirm({\n initialValue,\n message: saveOptions?.message ?? translate('log.confirmSave'),\n });\n confirmed = assertNotCancelled(raw, {\n renderer: engineContext.renderer,\n showCancelMessage: engineContext.showCancelMessage,\n stepId: '__save_log__',\n t: (key) => translate(key),\n workflowId: workflow.id,\n });\n }\n\n if (confirmed) {\n path = await saveLog(\n saveOptions?.path === undefined ? undefined : { path: saveOptions.path },\n );\n }\n if (path) engineContext.renderer.log('success', translate('log.saved', { path }));\n\n await saveOptions?.afterConfirm?.({\n confirmed,\n path,\n results: result.results,\n values: result.values,\n workflowId: workflow.id,\n });\n\n return path;\n }\n\n /** 安全询问是否保存日志;用户取消时返回 null */\n async function confirmSaveLogSafely(\n saveOptions?: WorkflowConfirmSaveLogOptions<Record<string, unknown>>,\n ): Promise<string | null> {\n try {\n return await confirmSaveLog(saveOptions);\n } catch (error) {\n if (isPromptCancelledError(error)) return null;\n throw error;\n }\n }\n\n if (logCompletion) {\n const logCompletionMode = logCompletion.mode ?? 'confirm';\n if (logCompletionMode === 'save') {\n const path = await saveLog(\n logCompletion.path === undefined ? undefined : { path: logCompletion.path },\n );\n if (path) engineContext.renderer.log('success', translate('log.saved', { path }));\n await logCompletion.afterComplete?.({\n confirmed: path.length > 0,\n path: path || null,\n results: result.results,\n values: result.values,\n workflowId: workflow.id,\n });\n } else {\n const confirmOptions: Parameters<typeof confirmSaveLog>[0] = {};\n if (logCompletion.afterComplete !== undefined)\n confirmOptions.afterConfirm = logCompletion.afterComplete;\n if (logCompletion.initialValue !== undefined)\n confirmOptions.initialValue = logCompletion.initialValue;\n if (logCompletion.message !== undefined) confirmOptions.message = logCompletion.message;\n if (logCompletion.path !== undefined) confirmOptions.path = logCompletion.path;\n await confirmSaveLog(confirmOptions);\n }\n }\n\n return result;\n } catch (error) {\n if (isPromptCancelledError(error)) {\n await saveWorkflowCheckpoint({\n checkpoint: options?.checkpoint,\n completedStepIds,\n context: runtimeContext,\n engineContext,\n reason: 'cancelled',\n record: logSession.record,\n });\n logSession.record({\n message: error.message,\n type: 'workflow-cancelled',\n });\n logSession.complete('cancelled', values, results);\n throw error;\n }\n\n const event: Omit<WorkflowRunEvent, 'runId' | 'timestamp' | 'workflowId'> = {\n message: error instanceof Error ? error.message : String(error),\n type: 'workflow-failed',\n };\n if (error instanceof Error) event.data = { name: error.name };\n await saveWorkflowCheckpoint({\n checkpoint: options?.checkpoint,\n completedStepIds,\n context: runtimeContext,\n engineContext,\n reason: 'failed',\n record: logSession.record,\n });\n logSession.record(event);\n logSession.complete('failed', values, results);\n if (shouldAutoSaveLogOnFailure) {\n try {\n const path = await logSession.save();\n if (path) engineContext.renderer.log('warn', translate('log.savedOnFailure', { path }));\n } catch (saveError) {\n engineContext.renderer.log(\n 'error',\n translate('log.saveFailed', {\n message: saveError instanceof Error ? saveError.message : String(saveError),\n }),\n );\n }\n }\n throw error;\n }\n}\n","import process from 'node:process';\nimport type {\n WorkflowClackRendererOptions,\n WorkflowCommandPresenter,\n WorkflowCommandPresenterOptions,\n WorkflowCommandTaskLogOptions,\n WorkflowLogLevel,\n WorkflowRenderer,\n WorkflowRendererAutocompleteMultiSelectOptions,\n WorkflowRendererAutocompleteOptions,\n WorkflowRendererBoxOptions,\n WorkflowRendererConfirmOptions,\n WorkflowRendererGroupMultiSelectOptions,\n WorkflowRendererLogOptions,\n WorkflowRendererMultiSelectOptions,\n WorkflowRendererNoteOptions,\n WorkflowRendererPasswordOptions,\n WorkflowRendererPathOptions,\n WorkflowRendererSelectKeyOptions,\n WorkflowRendererSelectOptions,\n WorkflowRendererTextOptions,\n} from '../shared/types.js';\nimport { defaultPromptRuntime, type PromptRuntime } from './clack.js';\n\nconst LINE_BREAK_PATTERN = /\\r?\\n/g;\n\n/** Clack 渲染器的创建选项 */\nexport interface CreateClackRendererOptions extends WorkflowClackRendererOptions {}\n\n/** 把 taskLog viewer 包装成统一的命令展示器接口 */\nfunction createTaskLogPresenter(\n runtime: PromptRuntime,\n options: WorkflowCommandPresenterOptions,\n taskLogOptions?: WorkflowCommandTaskLogOptions,\n): WorkflowCommandPresenter {\n const resolvedTaskLogOptions = {\n ...taskLogOptions,\n ...options.taskLog,\n };\n const view = runtime.taskLog({\n limit: resolvedTaskLogOptions.limit ?? 10,\n retainLog: resolvedTaskLogOptions.retainLog ?? false,\n title: options.title,\n });\n\n /** 将输出块拆成行后写入 taskLog */\n function writeChunk(chunk: string, stream: 'stderr' | 'stdout'): void {\n for (const line of chunk.split(LINE_BREAK_PATTERN).filter(Boolean))\n view.message(stream === 'stderr' ? `[stderr] ${line}` : line);\n }\n\n /** 透传 stdout */\n function stdout(chunk: string): void {\n writeChunk(chunk, 'stdout');\n }\n\n /** 透传 stderr */\n function stderr(chunk: string): void {\n writeChunk(chunk, 'stderr');\n }\n\n /** 根据退出码标记命令结束状态 */\n function finish(code: number): void {\n if (code === 0) {\n view.success(`Command completed: ${options.title}`);\n return;\n }\n\n view.error(`Command failed with exit code ${code}`, { showLog: true });\n }\n\n return {\n finish,\n stderr,\n stdout,\n };\n}\n\n/** 将统一 options 转换成 Clack 需要的结构 */\nfunction normalizeOptions<TValue>(\n options: Array<{ disabled?: boolean; hint?: string; label: string; value: TValue }>,\n): Array<{ disabled?: boolean; hint?: string; label: string; value: TValue }> {\n return options.map((option) => ({\n ...(option.disabled === undefined ? {} : { disabled: option.disabled }),\n ...(option.hint === undefined ? {} : { hint: option.hint }),\n label: option.label,\n value: option.value,\n }));\n}\n\n/** 将分组选项转换成 Clack 需要的嵌套结构 */\nfunction normalizeGroupedOptions<TValue>(\n options: Record<\n string,\n Array<{ disabled?: boolean; hint?: string; label: string; value: TValue }>\n >,\n): Record<string, Array<{ disabled?: boolean; hint?: string; label: string; value: TValue }>> {\n return Object.fromEntries(\n Object.entries(options).map(([groupName, groupOptions]) => [\n groupName,\n normalizeOptions(groupOptions),\n ]),\n );\n}\n\n/** 创建默认的 Clack 渲染器适配器 */\nexport function createClackRenderer(options: CreateClackRendererOptions = {}): WorkflowRenderer {\n const runtime: PromptRuntime = { ...defaultPromptRuntime, ...options.prompts };\n\n /** 统一把 withGuide 透传给 Clack */\n function withGuideOption(options: { withGuide?: boolean | undefined }): { withGuide?: boolean } {\n return options.withGuide === undefined ? {} : { withGuide: options.withGuide };\n }\n\n /** 判定当前环境是否适合真实交互 */\n function isInteractive(): boolean {\n if (options.interactive) return options.interactive();\n if (runtime.isCI()) return false;\n return runtime.isTTY(process.stdout) ?? Boolean(process.stdin.isTTY && process.stdout.isTTY);\n }\n\n /** 在 intro 之前输出 ASCII banner */\n function banner(message: string): void {\n if (!message) return;\n process.stdout.write(`${message}\\n\\n`);\n }\n\n /** 展示工作流开场标题 */\n function intro(message?: string): void {\n if (!message) return;\n runtime.intro(message);\n }\n\n /** 展示工作流结束语 */\n function outro(message?: string): void {\n if (!message) return;\n runtime.outro(message);\n }\n\n /** 输出说明性 note */\n function note(message?: string, title?: string, options?: WorkflowRendererNoteOptions): void {\n runtime.note(message, title, {\n ...withGuideOption(options ?? {}),\n ...(options?.format === undefined ? {} : { format: options.format }),\n });\n }\n\n /** 输出结构化 box */\n function box(message?: string, title?: string, options?: WorkflowRendererBoxOptions): void {\n runtime.box(message, title, {\n ...withGuideOption(options ?? {}),\n ...(options?.contentAlign === undefined ? {} : { contentAlign: options.contentAlign }),\n ...(options?.contentPadding === undefined ? {} : { contentPadding: options.contentPadding }),\n ...(options?.formatBorder === undefined ? {} : { formatBorder: options.formatBorder }),\n ...(options?.rounded === undefined ? {} : { rounded: options.rounded }),\n ...(options?.titleAlign === undefined ? {} : { titleAlign: options.titleAlign }),\n ...(options?.titlePadding === undefined ? {} : { titlePadding: options.titlePadding }),\n ...(options?.width === undefined ? {} : { width: options.width }),\n });\n }\n\n /** 统一输出不同级别的消息 */\n function log(\n level: WorkflowLogLevel,\n message: string | string[],\n options?: WorkflowRendererLogOptions,\n ): void {\n const logOptions = {\n ...withGuideOption(options ?? {}),\n ...(options?.secondarySymbol === undefined\n ? {}\n : { secondarySymbol: options.secondarySymbol }),\n ...(options?.spacing === undefined ? {} : { spacing: options.spacing }),\n ...(options?.symbol === undefined ? {} : { symbol: options.symbol }),\n };\n\n if (level === 'message') {\n runtime.log.message(message, logOptions);\n return;\n }\n\n const normalizedMessage = Array.isArray(message) ? message.join('\\n') : message;\n if (level === 'error') {\n runtime.log.error(normalizedMessage, logOptions);\n return;\n }\n\n if (level === 'warn' || level === 'warning') {\n runtime.log.warn?.(normalizedMessage, logOptions);\n return;\n }\n\n if (level === 'success') {\n runtime.log.success(normalizedMessage, logOptions);\n return;\n }\n\n if (level === 'step') {\n runtime.log.step(normalizedMessage, logOptions);\n return;\n }\n\n runtime.log.info(normalizedMessage, logOptions);\n }\n\n /** 渲染文本输入 */\n async function text(options: WorkflowRendererTextOptions): Promise<string | symbol> {\n return runtime.text({\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n ...(options.placeholder === undefined ? {} : { placeholder: options.placeholder }),\n message: options.message,\n ...withGuideOption(options),\n });\n }\n\n /** 渲染密码输入 */\n async function password(options: WorkflowRendererPasswordOptions): Promise<string | symbol> {\n return runtime.password({\n ...(options.clearOnError === undefined ? {} : { clearOnError: options.clearOnError }),\n ...(options.mask === undefined ? {} : { mask: options.mask }),\n message: options.message,\n ...withGuideOption(options),\n });\n }\n\n /** 渲染路径输入 */\n async function path(options: WorkflowRendererPathOptions): Promise<string | symbol> {\n return runtime.path({\n ...(options.directory === undefined ? {} : { directory: options.directory }),\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n message: options.message,\n ...(options.root === undefined ? {} : { root: options.root }),\n ...withGuideOption(options),\n });\n }\n\n /** 渲染确认输入 */\n async function confirm(options: WorkflowRendererConfirmOptions): Promise<boolean | symbol> {\n return runtime.confirm({\n ...(options.active === undefined ? {} : { active: options.active }),\n ...(options.inactive === undefined ? {} : { inactive: options.inactive }),\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n message: options.message,\n ...(options.vertical === undefined ? {} : { vertical: options.vertical }),\n ...withGuideOption(options),\n });\n }\n\n /** 渲染单选输入 */\n async function select<TValue>(\n options: WorkflowRendererSelectOptions<TValue>,\n ): Promise<TValue | symbol> {\n return runtime.select({\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n ...(options.maxItems === undefined ? {} : { maxItems: options.maxItems }),\n message: options.message,\n options: normalizeOptions(options.options) as Parameters<typeof runtime.select>[0]['options'],\n ...withGuideOption(options),\n }) as Promise<TValue | symbol>;\n }\n\n /** 渲染自动补全输入 */\n async function autocomplete<TValue>(\n options: WorkflowRendererAutocompleteOptions<TValue>,\n ): Promise<TValue | symbol> {\n const filter = options.filter as\n | Parameters<typeof runtime.autocomplete>[0]['filter']\n | undefined;\n\n return runtime.autocomplete({\n ...(filter === undefined ? {} : { filter }),\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n ...(options.initialUserInput === undefined\n ? {}\n : { initialUserInput: options.initialUserInput }),\n ...(options.maxItems === undefined ? {} : { maxItems: options.maxItems }),\n message: options.message,\n ...(options.placeholder === undefined ? {} : { placeholder: options.placeholder }),\n options: normalizeOptions(options.options) as Parameters<\n typeof runtime.autocomplete\n >[0]['options'],\n ...withGuideOption(options),\n }) as Promise<TValue | symbol>;\n }\n\n /** 渲染自动补全多选输入 */\n async function autocompleteMultiselect<TValue>(\n options: WorkflowRendererAutocompleteMultiSelectOptions<TValue>,\n ): Promise<TValue[] | symbol> {\n const filter = options.filter as\n | Parameters<typeof runtime.autocompleteMultiselect>[0]['filter']\n | undefined;\n return runtime.autocompleteMultiselect({\n ...(filter === undefined ? {} : { filter }),\n ...(options.initialValues === undefined ? {} : { initialValues: options.initialValues }),\n ...(options.maxItems === undefined ? {} : { maxItems: options.maxItems }),\n message: options.message,\n options: normalizeOptions(options.options) as Parameters<\n typeof runtime.autocompleteMultiselect\n >[0]['options'],\n ...(options.placeholder === undefined ? {} : { placeholder: options.placeholder }),\n ...(options.required === undefined ? {} : { required: options.required }),\n ...withGuideOption(options),\n }) as Promise<TValue[] | symbol>;\n }\n\n /** 渲染多选输入 */\n async function multiselect<TValue>(\n options: WorkflowRendererMultiSelectOptions<TValue>,\n ): Promise<TValue[] | symbol> {\n return runtime.multiselect({\n ...(options.cursorAt === undefined ? {} : { cursorAt: options.cursorAt }),\n ...(options.initialValues === undefined ? {} : { initialValues: options.initialValues }),\n ...(options.maxItems === undefined ? {} : { maxItems: options.maxItems }),\n message: options.message,\n options: normalizeOptions(options.options) as Parameters<\n typeof runtime.multiselect\n >[0]['options'],\n ...(options.required === undefined ? {} : { required: options.required }),\n ...withGuideOption(options),\n }) as Promise<TValue[] | symbol>;\n }\n\n /** 渲染分组多选输入 */\n async function groupMultiselect<TValue>(\n options: WorkflowRendererGroupMultiSelectOptions<TValue>,\n ): Promise<TValue[] | symbol> {\n return runtime.groupMultiselect({\n ...(options.cursorAt === undefined ? {} : { cursorAt: options.cursorAt }),\n ...(options.groupSpacing === undefined ? {} : { groupSpacing: options.groupSpacing }),\n ...(options.initialValues === undefined ? {} : { initialValues: options.initialValues }),\n message: options.message,\n options: normalizeGroupedOptions(options.options) as Parameters<\n typeof runtime.groupMultiselect\n >[0]['options'],\n ...(options.required === undefined ? {} : { required: options.required }),\n ...(options.selectableGroups === undefined\n ? {}\n : { selectableGroups: options.selectableGroups }),\n ...withGuideOption(options),\n }) as Promise<TValue[] | symbol>;\n }\n\n /** 渲染带快捷键的单选输入 */\n async function selectKey<TValue extends string>(\n options: WorkflowRendererSelectKeyOptions<TValue>,\n ): Promise<TValue | symbol> {\n return runtime.selectKey({\n ...(options.caseSensitive === undefined ? {} : { caseSensitive: options.caseSensitive }),\n ...(options.initialValue === undefined ? {} : { initialValue: options.initialValue }),\n message: options.message,\n options: normalizeOptions(options.options) as Parameters<\n typeof runtime.selectKey\n >[0]['options'],\n ...withGuideOption(options),\n }) as Promise<TValue | symbol>;\n }\n\n /** 渲染取消提示 */\n function cancel(message: string): void {\n runtime.cancel(message);\n }\n\n /** 判定结果是否属于 Clack 的取消符号 */\n function isCancel(value: unknown): boolean {\n return runtime.isCancel(value);\n }\n\n /** 创建命令输出展示器 */\n function createCommandPresenter(\n presenterOptions: WorkflowCommandPresenterOptions,\n ): WorkflowCommandPresenter | null {\n if (!isInteractive()) return null;\n return createTaskLogPresenter(runtime, presenterOptions, options.taskLogOptions);\n }\n\n return {\n autocompleteMultiselect,\n autocomplete,\n box,\n banner,\n cancel,\n confirm,\n createCommandPresenter,\n groupMultiselect,\n intro,\n isCancel,\n isInteractive,\n log,\n multiselect,\n note,\n outro,\n password,\n path,\n selectKey,\n select,\n text,\n };\n}\n","import path from 'node:path';\nimport process from 'node:process';\nimport { isPromptCancelledError } from '../shared/errors.js';\nimport { createWorkflowI18n } from '../shared/i18n.js';\nimport { detectTimeZone } from '../shared/timezone.js';\nimport type {\n CreateWorkflowKitOptions,\n WorkflowCheckpointStore,\n WorkflowContextTools,\n WorkflowDefinition,\n WorkflowHistoryStore,\n WorkflowKit,\n WorkflowKitCheckpointOptions,\n WorkflowKitHistoryOptions,\n WorkflowKitLogOptions,\n WorkflowLogStore,\n WorkflowPluginStepHandler,\n WorkflowRunOptions,\n WorkflowRunResult,\n WorkflowStepDefinition,\n} from '../shared/types.js';\nimport { createFileCheckpointStore } from '../storage/checkpoint.js';\nimport { createFileHistoryStore } from '../storage/history.js';\nimport { createFileLogStore } from '../storage/log.js';\nimport { createCommandExecutor } from './command.js';\nimport { executeWorkflow } from './engine.js';\nimport { createClackRenderer } from './renderer.js';\n\n/** 按配置创建默认历史存储 */\nfunction getDefaultHistoryStore(\n projectRoot: string,\n options?: WorkflowKitHistoryOptions,\n): WorkflowHistoryStore {\n const storeOptions: Parameters<typeof createFileHistoryStore>[0] = {\n filePath: options?.filePath ?? path.join(projectRoot, '.clack-kit', 'history.json'),\n };\n\n if (options?.maxSnapshotsPerWorkflow !== undefined)\n storeOptions.maxSnapshotsPerWorkflow = options.maxSnapshotsPerWorkflow;\n\n return options?.store ?? createFileHistoryStore(storeOptions);\n}\n\n/** 按配置创建默认 checkpoint 存储 */\nfunction getDefaultCheckpointStore(\n projectRoot: string,\n options?: WorkflowKitCheckpointOptions,\n): WorkflowCheckpointStore {\n const storeOptions: Parameters<typeof createFileCheckpointStore>[0] = {\n filePath: options?.filePath ?? path.join(projectRoot, '.clack-kit', 'checkpoints.json'),\n };\n\n return options?.store ?? createFileCheckpointStore(storeOptions);\n}\n\n/** 按配置创建默认日志存储 */\nfunction getDefaultLogStore(\n projectRoot: string,\n options?: WorkflowKitLogOptions,\n): WorkflowLogStore {\n const storeOptions: Parameters<typeof createFileLogStore>[0] = {\n directory: options?.directory ?? path.join(projectRoot, '.clack-kit', 'logs'),\n };\n\n if (options?.format !== undefined) storeOptions.format = options.format;\n\n return options?.store ?? createFileLogStore(storeOptions);\n}\n\n/** 标准化 history 配置 */\nfunction normalizeHistoryOptions(\n options: CreateWorkflowKitOptions['history'],\n): WorkflowKitHistoryOptions | undefined {\n if (options === undefined || options === false) return undefined;\n return options === true ? {} : options;\n}\n\n/** 标准化 checkpoint 配置 */\nfunction normalizeCheckpointOptions(\n options: CreateWorkflowKitOptions['checkpoints'],\n): WorkflowKitCheckpointOptions | undefined {\n if (options === undefined || options === false) return undefined;\n return options === true ? {} : options;\n}\n\n/** 标准化日志配置 */\nfunction normalizeLogOptions(\n options: CreateWorkflowKitOptions['logs'],\n): WorkflowKitLogOptions | undefined {\n if (options === undefined || options === false) return undefined;\n return options === true ? {} : options;\n}\n\n/** 创建一个以 workflow 为中心的 clack-kit 实例 */\nexport function createWorkflowKit(options: CreateWorkflowKitOptions = {}): WorkflowKit {\n const i18nOptions: Parameters<typeof createWorkflowI18n>[0] = {};\n const checkpointOptions = normalizeCheckpointOptions(options.checkpoints);\n const historyOptions = normalizeHistoryOptions(options.history);\n const logOptions = normalizeLogOptions(options.logs);\n const plugins = options.plugins ?? [];\n const projectRoot = options.projectRoot ?? process.cwd();\n\n if (options.locale !== undefined) i18nOptions.locale = options.locale;\n if (options.locales !== undefined) i18nOptions.locales = options.locales;\n if (options.resolveLocale !== undefined) i18nOptions.resolveLocale = options.resolveLocale;\n\n const i18n = createWorkflowI18n(i18nOptions);\n const historyStore =\n options.history === undefined || options.history === false || historyOptions?.enabled === false\n ? null\n : getDefaultHistoryStore(projectRoot, historyOptions);\n const checkpointStore =\n options.checkpoints === undefined ||\n options.checkpoints === false ||\n checkpointOptions?.enabled === false\n ? null\n : getDefaultCheckpointStore(projectRoot, checkpointOptions);\n const logStore =\n options.logs === undefined || options.logs === false || logOptions?.enabled === false\n ? null\n : getDefaultLogStore(projectRoot, logOptions);\n const stepHandlers = new Map<string, WorkflowPluginStepHandler>();\n const contextToolExtenders: Array<\n (tools: WorkflowContextTools) => Record<string, unknown> | undefined\n > = [];\n const pluginApi = {\n registerStepHandler(kind: string, handler: WorkflowPluginStepHandler) {\n stepHandlers.set(kind, handler);\n },\n };\n\n for (const plugin of plugins) {\n plugin.setup?.(pluginApi);\n if (plugin.extendContextTools) contextToolExtenders.push(plugin.extendContextTools);\n }\n\n let renderer = options.renderer ?? createClackRenderer(options.rendererOptions);\n let executor = options.executor ?? createCommandExecutor(options.executorType);\n\n for (const plugin of plugins) {\n if (plugin.wrapRenderer) renderer = plugin.wrapRenderer(renderer);\n if (plugin.wrapExecutor) executor = plugin.wrapExecutor(executor);\n }\n\n const timeZone = options.timeZone ?? options.resolveTimeZone?.() ?? detectTimeZone();\n const maxSnapshotsPerWorkflow = historyOptions?.maxSnapshotsPerWorkflow ?? 20;\n\n /** 用当前 kit 执行 workflow */\n async function run(\n workflow: WorkflowDefinition<readonly WorkflowStepDefinition[]>,\n runOptions?: WorkflowRunOptions<Record<string, unknown>>,\n ): Promise<WorkflowRunResult<Record<string, unknown>>> {\n return executeWorkflow(workflow, runOptions, {\n asciiArt: options.asciiArt !== false,\n checkpointStore,\n commandExecutions: new Map(),\n contextToolExtenders,\n executor,\n historyStore,\n i18n,\n logStore,\n maxSnapshotsPerWorkflow,\n projectRoot,\n renderer,\n showCancelMessage: options.showCancelMessage !== false,\n stepHandlers,\n timeZone,\n });\n }\n\n /** 安全执行 workflow;用户取消时返回 null */\n async function runSafely(\n workflow: WorkflowDefinition<readonly WorkflowStepDefinition[]>,\n runOptions?: WorkflowRunOptions<Record<string, unknown>>,\n ): Promise<WorkflowRunResult<Record<string, unknown>> | null> {\n try {\n return await run(workflow, runOptions);\n } catch (error) {\n if (isPromptCancelledError(error)) return null;\n throw error;\n }\n }\n\n const kit = {\n executor,\n checkpointStore,\n historyStore,\n logStore,\n renderer,\n run,\n runSafely,\n t(key: string, params?: Record<string, boolean | null | number | string | undefined>) {\n return i18n.t(key, params);\n },\n };\n\n return kit as unknown as WorkflowKit;\n}\n\n/** 不显式创建 kit,直接运行 workflow */\nexport async function runWorkflow(\n workflow: WorkflowDefinition<readonly WorkflowStepDefinition[]>,\n options?: WorkflowRunOptions<Record<string, unknown>>,\n): Promise<WorkflowRunResult<Record<string, unknown>>> {\n return createWorkflowKit().run(workflow, options);\n}\n\n/** 不显式创建 kit,安全运行 workflow;用户取消时返回 null */\nexport async function runWorkflowSafely(\n workflow: WorkflowDefinition<readonly WorkflowStepDefinition[]>,\n options?: WorkflowRunOptions<Record<string, unknown>>,\n): Promise<WorkflowRunResult<Record<string, unknown>> | null> {\n return createWorkflowKit().runSafely(workflow, options);\n}\n"],"x_google_ignoreList":[0,1,8,11,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,MAAM,SAAS;CACb,YAAY;CACZ,SAAS;CACT,UAAU;CACV,qBAAqB;CACtB;AACD,IAAM,aAAN,MAAiB;CACf,cAAc;AACZ,OAAK,UAAU;AACf,OAAK,WAAW;AAChB,OAAK,UAAU,EAAE;;;AAGrB,MAAM,WAAW;CACf;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACD;AACD,MAAM,eAAe,EACnB,gBAAgB,gBACjB;AACD,MAAM,eAAe,SAAS;AAC5B,QAAO,aAAa,QAAQ,aAAa,QAAQ;;AAEnD,SAAS,iBAAiB,MAAM;AAE9B,QADqB,qBACD,KAAK,KAAK,GAAG,OAAO,OAAO;;AAEjD,MAAM,gBAAgB;CACpB,MAAM,EAAE,aAAa,GAAG,SAAS,UAAU,wBAAwB;CACnE,MAAM,WAAW,EAAE;CACnB,MAAM,cAAc;EAClB,MAAM;EACN,UAAU;EACV,oBAAoB;EACrB;CACD,SAAS,cAAc,MAAM,SAAS,YAAY;EAChD,MAAM,UAAU,iBAAiB,KAAK,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI;EAC3D,MAAM,eAAe,YAAY,aAAa,IAAI,IAAI,OAAO,UAAU,UAAU,SAAS,GAAG,IAAI,OAAO,UAAU,QAAQ;AAC1H,SAAO,KAAK,QAAQ,cAAc,GAAG;;CAEvC,SAAS,iBAAiB,YAAY,IAAI,YAAY,MAAM;EAC1D,IAAI,QAAQ,EAAE;E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"}