mepcli 1.3.2 → 2.0.0-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.
Files changed (291) hide show
  1. package/README.md +11 -2
  2. package/dist/{ansi.js → src/ansi.js} +17 -9
  3. package/dist/src/ansi.js.map +1 -0
  4. package/dist/{base.js → src/base.js} +82 -70
  5. package/dist/src/base.js.map +1 -0
  6. package/dist/{core.js → src/core.js} +266 -320
  7. package/dist/src/core.js.map +1 -0
  8. package/dist/src/data/countries.js +569 -0
  9. package/dist/src/data/countries.js.map +1 -0
  10. package/dist/src/data/licenses.js +480 -0
  11. package/dist/src/data/licenses.js.map +1 -0
  12. package/dist/{highlight.js → src/highlight.js} +77 -69
  13. package/dist/src/highlight.js.map +1 -0
  14. package/dist/src/index.js +66 -0
  15. package/dist/src/index.js.map +1 -0
  16. package/dist/{input.js → src/input.js} +47 -41
  17. package/dist/src/input.js.map +1 -0
  18. package/dist/src/pipeline.js +273 -0
  19. package/dist/src/pipeline.js.map +1 -0
  20. package/dist/{prompts → src/prompts}/autocomplete.js +58 -57
  21. package/dist/src/prompts/autocomplete.js.map +1 -0
  22. package/dist/{prompts → src/prompts}/box.js +86 -53
  23. package/dist/src/prompts/box.js.map +1 -0
  24. package/dist/{prompts → src/prompts}/breadcrumb-search.js +110 -98
  25. package/dist/src/prompts/breadcrumb-search.js.map +1 -0
  26. package/dist/{prompts → src/prompts}/breadcrumb.js +126 -121
  27. package/dist/src/prompts/breadcrumb.js.map +1 -0
  28. package/dist/{prompts → src/prompts}/byte.js +69 -52
  29. package/dist/src/prompts/byte.js.map +1 -0
  30. package/dist/{prompts → src/prompts}/calculator.js +79 -56
  31. package/dist/src/prompts/calculator.js.map +1 -0
  32. package/dist/{prompts → src/prompts}/calendar.js +167 -127
  33. package/dist/src/prompts/calendar.js.map +1 -0
  34. package/dist/{prompts → src/prompts}/checkbox.js +53 -49
  35. package/dist/src/prompts/checkbox.js.map +1 -0
  36. package/dist/{prompts → src/prompts}/code.js +88 -76
  37. package/dist/src/prompts/code.js.map +1 -0
  38. package/dist/{prompts → src/prompts}/color.js +68 -50
  39. package/dist/src/prompts/color.js.map +1 -0
  40. package/dist/{prompts → src/prompts}/confirm.js +22 -15
  41. package/dist/src/prompts/confirm.js.map +1 -0
  42. package/dist/{prompts → src/prompts}/connection-string.js +59 -36
  43. package/dist/src/prompts/connection-string.js.map +1 -0
  44. package/dist/{prompts → src/prompts}/cron.js +90 -59
  45. package/dist/src/prompts/cron.js.map +1 -0
  46. package/dist/src/prompts/curl-utils.js +71 -0
  47. package/dist/src/prompts/curl-utils.js.map +1 -0
  48. package/dist/{prompts → src/prompts}/curl.js +153 -132
  49. package/dist/src/prompts/curl.js.map +1 -0
  50. package/dist/{prompts → src/prompts}/data-inspector.js +96 -91
  51. package/dist/src/prompts/data-inspector.js.map +1 -0
  52. package/dist/{prompts → src/prompts}/date.js +64 -57
  53. package/dist/src/prompts/date.js.map +1 -0
  54. package/dist/{prompts → src/prompts}/dependency.js +84 -80
  55. package/dist/src/prompts/dependency.js.map +1 -0
  56. package/dist/{prompts → src/prompts}/dial.js +49 -35
  57. package/dist/src/prompts/dial.js.map +1 -0
  58. package/dist/src/prompts/diff.js +118 -0
  59. package/dist/src/prompts/diff.js.map +1 -0
  60. package/dist/{prompts → src/prompts}/draw.js +83 -80
  61. package/dist/src/prompts/draw.js.map +1 -0
  62. package/dist/src/prompts/editor.js +234 -0
  63. package/dist/src/prompts/editor.js.map +1 -0
  64. package/dist/{prompts → src/prompts}/emoji.js +80 -82
  65. package/dist/src/prompts/emoji.js.map +1 -0
  66. package/dist/{prompts → src/prompts}/exec.js +60 -46
  67. package/dist/src/prompts/exec.js.map +1 -0
  68. package/dist/src/prompts/file.js +217 -0
  69. package/dist/src/prompts/file.js.map +1 -0
  70. package/dist/{prompts → src/prompts}/form.js +63 -54
  71. package/dist/src/prompts/form.js.map +1 -0
  72. package/dist/{prompts → src/prompts}/fuzzy-multi-column.js +65 -53
  73. package/dist/src/prompts/fuzzy-multi-column.js.map +1 -0
  74. package/dist/{prompts → src/prompts}/fuzzy.js +66 -55
  75. package/dist/src/prompts/fuzzy.js.map +1 -0
  76. package/dist/src/prompts/gauge.js +137 -0
  77. package/dist/src/prompts/gauge.js.map +1 -0
  78. package/dist/{prompts → src/prompts}/grid.js +70 -57
  79. package/dist/src/prompts/grid.js.map +1 -0
  80. package/dist/{prompts → src/prompts}/heatmap.js +70 -64
  81. package/dist/src/prompts/heatmap.js.map +1 -0
  82. package/dist/{prompts → src/prompts}/ip.js +56 -36
  83. package/dist/src/prompts/ip.js.map +1 -0
  84. package/dist/{prompts → src/prompts}/kanban.js +63 -58
  85. package/dist/src/prompts/kanban.js.map +1 -0
  86. package/dist/src/prompts/keypress.js +54 -0
  87. package/dist/src/prompts/keypress.js.map +1 -0
  88. package/dist/src/prompts/license.js +144 -0
  89. package/dist/src/prompts/license.js.map +1 -0
  90. package/dist/{prompts → src/prompts}/list.js +46 -31
  91. package/dist/src/prompts/list.js.map +1 -0
  92. package/dist/{prompts → src/prompts}/map.js +93 -77
  93. package/dist/src/prompts/map.js.map +1 -0
  94. package/dist/{prompts → src/prompts}/match.js +91 -95
  95. package/dist/src/prompts/match.js.map +1 -0
  96. package/dist/{prompts → src/prompts}/miller.js +74 -67
  97. package/dist/src/prompts/miller.js.map +1 -0
  98. package/dist/{prompts → src/prompts}/multi-column-select.js +54 -44
  99. package/dist/src/prompts/multi-column-select.js.map +1 -0
  100. package/dist/{prompts → src/prompts}/multi-range.js +70 -52
  101. package/dist/src/prompts/multi-range.js.map +1 -0
  102. package/dist/{prompts → src/prompts}/multi-select.js +67 -58
  103. package/dist/src/prompts/multi-select.js.map +1 -0
  104. package/dist/{prompts → src/prompts}/number.js +51 -39
  105. package/dist/src/prompts/number.js.map +1 -0
  106. package/dist/{prompts → src/prompts}/otp.js +43 -27
  107. package/dist/src/prompts/otp.js.map +1 -0
  108. package/dist/{prompts → src/prompts}/pattern.js +74 -71
  109. package/dist/src/prompts/pattern.js.map +1 -0
  110. package/dist/{prompts → src/prompts}/phone.js +107 -118
  111. package/dist/src/prompts/phone.js.map +1 -0
  112. package/dist/src/prompts/quiz-select.js +114 -0
  113. package/dist/src/prompts/quiz-select.js.map +1 -0
  114. package/dist/src/prompts/quiz-text.js +98 -0
  115. package/dist/src/prompts/quiz-text.js.map +1 -0
  116. package/dist/{prompts → src/prompts}/range.js +85 -61
  117. package/dist/src/prompts/range.js.map +1 -0
  118. package/dist/{prompts → src/prompts}/rating.js +29 -24
  119. package/dist/src/prompts/rating.js.map +1 -0
  120. package/dist/{prompts → src/prompts}/regex.js +50 -36
  121. package/dist/src/prompts/regex.js.map +1 -0
  122. package/dist/{prompts → src/prompts}/region.js +62 -56
  123. package/dist/src/prompts/region.js.map +1 -0
  124. package/dist/{prompts → src/prompts}/schedule.js +82 -75
  125. package/dist/src/prompts/schedule.js.map +1 -0
  126. package/dist/{prompts → src/prompts}/scroll.js +61 -58
  127. package/dist/src/prompts/scroll.js.map +1 -0
  128. package/dist/src/prompts/seat.js +164 -0
  129. package/dist/src/prompts/seat.js.map +1 -0
  130. package/dist/{prompts → src/prompts}/select-range.js +58 -46
  131. package/dist/src/prompts/select-range.js.map +1 -0
  132. package/dist/{prompts → src/prompts}/select.js +65 -66
  133. package/dist/src/prompts/select.js.map +1 -0
  134. package/dist/{prompts → src/prompts}/semver.js +24 -13
  135. package/dist/src/prompts/semver.js.map +1 -0
  136. package/dist/src/prompts/shortcut.js +133 -0
  137. package/dist/src/prompts/shortcut.js.map +1 -0
  138. package/dist/{prompts → src/prompts}/slider.js +28 -23
  139. package/dist/src/prompts/slider.js.map +1 -0
  140. package/dist/src/prompts/slot.js +117 -0
  141. package/dist/src/prompts/slot.js.map +1 -0
  142. package/dist/{prompts → src/prompts}/snippet.js +82 -61
  143. package/dist/src/prompts/snippet.js.map +1 -0
  144. package/dist/{prompts → src/prompts}/sort-grid.js +64 -59
  145. package/dist/src/prompts/sort-grid.js.map +1 -0
  146. package/dist/{prompts → src/prompts}/sort.js +59 -49
  147. package/dist/src/prompts/sort.js.map +1 -0
  148. package/dist/src/prompts/spam.js +80 -0
  149. package/dist/src/prompts/spam.js.map +1 -0
  150. package/dist/{prompts → src/prompts}/spreadsheet.js +71 -70
  151. package/dist/src/prompts/spreadsheet.js.map +1 -0
  152. package/dist/{prompts → src/prompts}/table.js +52 -38
  153. package/dist/src/prompts/table.js.map +1 -0
  154. package/dist/{prompts → src/prompts}/text.js +74 -70
  155. package/dist/src/prompts/text.js.map +1 -0
  156. package/dist/{prompts → src/prompts}/time.js +105 -96
  157. package/dist/src/prompts/time.js.map +1 -0
  158. package/dist/src/prompts/toggle.js +53 -0
  159. package/dist/src/prompts/toggle.js.map +1 -0
  160. package/dist/{prompts → src/prompts}/transfer.js +71 -67
  161. package/dist/src/prompts/transfer.js.map +1 -0
  162. package/dist/{prompts → src/prompts}/tree-select.js +83 -86
  163. package/dist/src/prompts/tree-select.js.map +1 -0
  164. package/dist/{prompts → src/prompts}/tree.js +69 -67
  165. package/dist/src/prompts/tree.js.map +1 -0
  166. package/dist/src/prompts/wait.js +79 -0
  167. package/dist/src/prompts/wait.js.map +1 -0
  168. package/dist/src/spinner.js +105 -0
  169. package/dist/src/spinner.js.map +1 -0
  170. package/dist/{symbols.js → src/symbols.js} +32 -7
  171. package/dist/src/symbols.js.map +1 -0
  172. package/dist/{tasks.js → src/tasks.js} +104 -79
  173. package/dist/src/tasks.js.map +1 -0
  174. package/dist/src/theme.js +29 -0
  175. package/dist/src/theme.js.map +1 -0
  176. package/dist/src/types.js +8 -0
  177. package/dist/src/types.js.map +1 -0
  178. package/dist/{utils.js → src/utils.js} +196 -152
  179. package/dist/src/utils.js.map +1 -0
  180. package/package.json +16 -13
  181. package/dist/ansi.d.ts +0 -36
  182. package/dist/base.d.ts +0 -60
  183. package/dist/core.d.ts +0 -1072
  184. package/dist/data/countries.d.ts +0 -2
  185. package/dist/data/countries.js +0 -105
  186. package/dist/data/licenses.d.ts +0 -2
  187. package/dist/data/licenses.js +0 -109
  188. package/dist/highlight.d.ts +0 -7
  189. package/dist/index.d.ts +0 -48
  190. package/dist/index.js +0 -64
  191. package/dist/input.d.ts +0 -14
  192. package/dist/pipeline.d.ts +0 -39
  193. package/dist/pipeline.js +0 -54
  194. package/dist/prompts/autocomplete.d.ts +0 -22
  195. package/dist/prompts/box.d.ts +0 -21
  196. package/dist/prompts/breadcrumb-search.d.ts +0 -14
  197. package/dist/prompts/breadcrumb.d.ts +0 -32
  198. package/dist/prompts/byte.d.ts +0 -13
  199. package/dist/prompts/calculator.d.ts +0 -17
  200. package/dist/prompts/calendar.d.ts +0 -33
  201. package/dist/prompts/checkbox.d.ts +0 -13
  202. package/dist/prompts/code.d.ts +0 -19
  203. package/dist/prompts/color.d.ts +0 -14
  204. package/dist/prompts/confirm.d.ts +0 -8
  205. package/dist/prompts/connection-string.d.ts +0 -18
  206. package/dist/prompts/cron.d.ts +0 -13
  207. package/dist/prompts/curl-utils.d.ts +0 -25
  208. package/dist/prompts/curl-utils.js +0 -41
  209. package/dist/prompts/curl.d.ts +0 -41
  210. package/dist/prompts/data-inspector.d.ts +0 -22
  211. package/dist/prompts/date.d.ts +0 -12
  212. package/dist/prompts/dependency.d.ts +0 -16
  213. package/dist/prompts/dial.d.ts +0 -10
  214. package/dist/prompts/diff.d.ts +0 -10
  215. package/dist/prompts/diff.js +0 -101
  216. package/dist/prompts/draw.d.ts +0 -20
  217. package/dist/prompts/editor.d.ts +0 -14
  218. package/dist/prompts/editor.js +0 -203
  219. package/dist/prompts/emoji.d.ts +0 -18
  220. package/dist/prompts/exec.d.ts +0 -17
  221. package/dist/prompts/file.d.ts +0 -21
  222. package/dist/prompts/file.js +0 -210
  223. package/dist/prompts/form.d.ts +0 -18
  224. package/dist/prompts/fuzzy-multi-column.d.ts +0 -12
  225. package/dist/prompts/fuzzy.d.ts +0 -12
  226. package/dist/prompts/gauge.d.ts +0 -21
  227. package/dist/prompts/gauge.js +0 -130
  228. package/dist/prompts/grid.d.ts +0 -14
  229. package/dist/prompts/heatmap.d.ts +0 -13
  230. package/dist/prompts/ip.d.ts +0 -11
  231. package/dist/prompts/kanban.d.ts +0 -17
  232. package/dist/prompts/keypress.d.ts +0 -7
  233. package/dist/prompts/keypress.js +0 -55
  234. package/dist/prompts/license.d.ts +0 -9
  235. package/dist/prompts/license.js +0 -105
  236. package/dist/prompts/list.d.ts +0 -9
  237. package/dist/prompts/map.d.ts +0 -17
  238. package/dist/prompts/match.d.ts +0 -19
  239. package/dist/prompts/miller.d.ts +0 -15
  240. package/dist/prompts/multi-column-select.d.ts +0 -10
  241. package/dist/prompts/multi-range.d.ts +0 -9
  242. package/dist/prompts/multi-select.d.ts +0 -15
  243. package/dist/prompts/number.d.ts +0 -11
  244. package/dist/prompts/otp.d.ts +0 -10
  245. package/dist/prompts/pattern.d.ts +0 -22
  246. package/dist/prompts/phone.d.ts +0 -41
  247. package/dist/prompts/quiz-select.d.ts +0 -10
  248. package/dist/prompts/quiz-select.js +0 -104
  249. package/dist/prompts/quiz-text.d.ts +0 -11
  250. package/dist/prompts/quiz-text.js +0 -82
  251. package/dist/prompts/range.d.ts +0 -9
  252. package/dist/prompts/rating.d.ts +0 -8
  253. package/dist/prompts/regex.d.ts +0 -13
  254. package/dist/prompts/region.d.ts +0 -11
  255. package/dist/prompts/schedule.d.ts +0 -20
  256. package/dist/prompts/scroll.d.ts +0 -13
  257. package/dist/prompts/seat.d.ts +0 -17
  258. package/dist/prompts/seat.js +0 -165
  259. package/dist/prompts/select-range.d.ts +0 -8
  260. package/dist/prompts/select.d.ts +0 -15
  261. package/dist/prompts/semver.d.ts +0 -6
  262. package/dist/prompts/shortcut.d.ts +0 -9
  263. package/dist/prompts/shortcut.js +0 -135
  264. package/dist/prompts/slider.d.ts +0 -8
  265. package/dist/prompts/slot.d.ts +0 -16
  266. package/dist/prompts/slot.js +0 -107
  267. package/dist/prompts/snippet.d.ts +0 -19
  268. package/dist/prompts/sort-grid.d.ts +0 -16
  269. package/dist/prompts/sort.d.ts +0 -14
  270. package/dist/prompts/spam.d.ts +0 -17
  271. package/dist/prompts/spam.js +0 -62
  272. package/dist/prompts/spreadsheet.d.ts +0 -21
  273. package/dist/prompts/table.d.ts +0 -14
  274. package/dist/prompts/text.d.ts +0 -17
  275. package/dist/prompts/time.d.ts +0 -12
  276. package/dist/prompts/toggle.d.ts +0 -8
  277. package/dist/prompts/toggle.js +0 -47
  278. package/dist/prompts/transfer.d.ts +0 -18
  279. package/dist/prompts/tree-select.d.ts +0 -31
  280. package/dist/prompts/tree.d.ts +0 -20
  281. package/dist/prompts/wait.d.ts +0 -18
  282. package/dist/prompts/wait.js +0 -62
  283. package/dist/spinner.d.ts +0 -33
  284. package/dist/spinner.js +0 -89
  285. package/dist/symbols.d.ts +0 -33
  286. package/dist/tasks.d.ts +0 -57
  287. package/dist/theme.d.ts +0 -2
  288. package/dist/theme.js +0 -20
  289. package/dist/types.d.ts +0 -503
  290. package/dist/types.js +0 -5
  291. package/dist/utils.d.ts +0 -81
@@ -0,0 +1,273 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: Object.getOwnPropertyDescriptor(all, name).get
9
+ });
10
+ }
11
+ _export(exports, {
12
+ get Pipeline () {
13
+ return Pipeline;
14
+ },
15
+ get PipelineAbortError () {
16
+ return PipelineAbortError;
17
+ },
18
+ get PipelineExit () {
19
+ return PipelineExit;
20
+ },
21
+ get PipelineTimeoutError () {
22
+ return PipelineTimeoutError;
23
+ },
24
+ get PipelineValidationError () {
25
+ return PipelineValidationError;
26
+ }
27
+ });
28
+ function _define_property(obj, key, value) {
29
+ if (key in obj) {
30
+ Object.defineProperty(obj, key, {
31
+ value: value,
32
+ enumerable: true,
33
+ configurable: true,
34
+ writable: true
35
+ });
36
+ } else {
37
+ obj[key] = value;
38
+ }
39
+ return obj;
40
+ }
41
+ const PipelineExit = Symbol.for('PipelineExit');
42
+ let PipelineValidationError = class PipelineValidationError extends Error {
43
+ constructor(message, step, context){
44
+ super(message), _define_property(this, "step", void 0), _define_property(this, "context", void 0);
45
+ this.name = 'PipelineValidationError';
46
+ this.step = step;
47
+ this.context = context;
48
+ }
49
+ };
50
+ let PipelineTimeoutError = class PipelineTimeoutError extends Error {
51
+ constructor(message, step, context){
52
+ super(message), _define_property(this, "step", void 0), _define_property(this, "context", void 0);
53
+ this.name = 'PipelineTimeoutError';
54
+ this.step = step;
55
+ this.context = context;
56
+ }
57
+ };
58
+ let PipelineAbortError = class PipelineAbortError extends Error {
59
+ constructor(message = 'Pipeline aborted'){
60
+ super(message);
61
+ this.name = 'PipelineAbortError';
62
+ }
63
+ };
64
+ let Pipeline = class Pipeline {
65
+ step(nameOrAction, actionOrConfig, config) {
66
+ if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {
67
+ const action = nameOrAction instanceof Pipeline ? (ctx, tasks)=>nameOrAction.run(ctx, tasks) : nameOrAction;
68
+ this.steps.push({
69
+ action: action,
70
+ ...actionOrConfig || {}
71
+ });
72
+ } else {
73
+ const action = actionOrConfig instanceof Pipeline ? (ctx, tasks)=>actionOrConfig.run(ctx, tasks) : actionOrConfig;
74
+ this.steps.push({
75
+ name: nameOrAction,
76
+ action: action,
77
+ ...config || {}
78
+ });
79
+ }
80
+ return this;
81
+ }
82
+ stepIf(condition, nameOrAction, actionOrConfig, config) {
83
+ if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {
84
+ const action = nameOrAction instanceof Pipeline ? (ctx, tasks)=>nameOrAction.run(ctx, tasks) : nameOrAction;
85
+ this.steps.push({
86
+ condition,
87
+ action: action,
88
+ ...actionOrConfig || {}
89
+ });
90
+ } else {
91
+ const action = actionOrConfig instanceof Pipeline ? (ctx, tasks)=>actionOrConfig.run(ctx, tasks) : actionOrConfig;
92
+ this.steps.push({
93
+ condition,
94
+ name: nameOrAction,
95
+ action: action,
96
+ ...config || {}
97
+ });
98
+ }
99
+ return this;
100
+ }
101
+ /**
102
+ * Executes the pipeline steps sequentially.
103
+ * @param initialContext Optional initial context.
104
+ * @param tasks Optional TaskRunner instance to pass to steps.
105
+ */ async run(initialContext = {}, tasks) {
106
+ const context = {
107
+ ...initialContext
108
+ };
109
+ if (this.options.onPipelineStart) {
110
+ await this.options.onPipelineStart({
111
+ ...context
112
+ });
113
+ }
114
+ try {
115
+ for(let i = 0; i < this.steps.length; i++){
116
+ if (this.options.signal?.aborted) {
117
+ throw new PipelineAbortError();
118
+ }
119
+ const step = this.steps[i];
120
+ const meta = {
121
+ index: i,
122
+ name: step.name,
123
+ type: step.name ? 'named' : 'anonymous'
124
+ };
125
+ if (step.condition && !step.condition(context)) {
126
+ continue;
127
+ }
128
+ if (this.options.onStepStart) {
129
+ await this.options.onStepStart(meta, {
130
+ ...context
131
+ });
132
+ }
133
+ try {
134
+ let result;
135
+ if (step.timeout && step.timeout > 0) {
136
+ const timeoutPromise = new Promise((_, reject)=>{
137
+ setTimeout(()=>{
138
+ reject(new PipelineTimeoutError(`Step timed out after ${step.timeout}ms`, meta, context));
139
+ }, step.timeout);
140
+ });
141
+ result = await Promise.race([
142
+ step.action(context, tasks),
143
+ timeoutPromise
144
+ ]);
145
+ } else {
146
+ result = await step.action(context, tasks);
147
+ }
148
+ if (result === PipelineExit) {
149
+ break;
150
+ }
151
+ if (!step.name) {
152
+ // Anonymous action
153
+ if (result && typeof result === 'object' && !Array.isArray(result)) {
154
+ Object.assign(context, result);
155
+ }
156
+ } else {
157
+ // Named action
158
+ if (step.transform) {
159
+ result = await step.transform(result, {
160
+ ...context
161
+ });
162
+ }
163
+ if (step.validate) {
164
+ const validator = step.validate;
165
+ if (typeof validator === 'function') {
166
+ const valid = await validator(result);
167
+ if (valid === false) {
168
+ throw new PipelineValidationError(`Validation failed for step at index ${i} (${String(step.name)})`, meta, context);
169
+ }
170
+ if (typeof valid === 'string') {
171
+ throw new PipelineValidationError(valid, meta, context);
172
+ }
173
+ } else if (typeof validator === 'object') {
174
+ if (typeof validator.safeParse === 'function') {
175
+ const res = validator.safeParse(result);
176
+ if (!res.success) {
177
+ const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';
178
+ throw new PipelineValidationError(`Validation failed: ${errorMsg}`, meta, context);
179
+ }
180
+ result = res.data !== undefined ? res.data : result;
181
+ } else if (typeof validator.parse === 'function') {
182
+ try {
183
+ const parsed = validator.parse(result);
184
+ result = parsed !== undefined ? parsed : result;
185
+ } catch (err) {
186
+ throw new PipelineValidationError(`Validation failed: ${err.message || 'Schema parsing error'}`, meta, context);
187
+ }
188
+ }
189
+ }
190
+ }
191
+ context[step.name] = result;
192
+ }
193
+ if (this.options.onStepComplete) {
194
+ await this.options.onStepComplete(meta, {
195
+ ...context
196
+ });
197
+ }
198
+ } catch (err) {
199
+ let handled = false;
200
+ if (step.onError) {
201
+ await step.onError(err, {
202
+ ...context
203
+ });
204
+ }
205
+ if ('fallback' in step) {
206
+ const fallbackValue = typeof step.fallback === 'function' ? await step.fallback(err, {
207
+ ...context
208
+ }) : step.fallback;
209
+ if (step.name) {
210
+ context[step.name] = fallbackValue;
211
+ }
212
+ handled = true;
213
+ } else if (step.optional) {
214
+ if (step.name) {
215
+ context[step.name] = undefined;
216
+ }
217
+ handled = true;
218
+ }
219
+ if (!handled) {
220
+ if (this.options.onError) {
221
+ await this.options.onError(err, meta, {
222
+ ...context
223
+ });
224
+ }
225
+ throw err;
226
+ }
227
+ }
228
+ }
229
+ if (this.options.validate) {
230
+ const validator = this.options.validate;
231
+ if (typeof validator === 'function') {
232
+ const valid = await validator(context);
233
+ if (valid === false) {
234
+ throw new PipelineValidationError(`Final validation failed`);
235
+ }
236
+ if (typeof valid === 'string') {
237
+ throw new PipelineValidationError(valid);
238
+ }
239
+ } else if (typeof validator === 'object') {
240
+ if (typeof validator.safeParse === 'function') {
241
+ const res = validator.safeParse(context);
242
+ if (!res.success) {
243
+ const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';
244
+ throw new PipelineValidationError(`Final validation failed: ${errorMsg}`);
245
+ }
246
+ Object.assign(context, res.data !== undefined ? res.data : context);
247
+ } else if (typeof validator.parse === 'function') {
248
+ try {
249
+ const parsed = validator.parse(context);
250
+ Object.assign(context, parsed !== undefined ? parsed : context);
251
+ } catch (err) {
252
+ throw new PipelineValidationError(`Final validation failed: ${err.message || 'Schema parsing error'}`);
253
+ }
254
+ }
255
+ }
256
+ }
257
+ } finally{
258
+ if (this.options.onPipelineComplete) {
259
+ await this.options.onPipelineComplete({
260
+ ...context
261
+ });
262
+ }
263
+ }
264
+ return context;
265
+ }
266
+ constructor(options){
267
+ _define_property(this, "steps", []);
268
+ _define_property(this, "options", void 0);
269
+ this.options = options || {};
270
+ }
271
+ };
272
+
273
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/pipeline.ts"],"sourcesContent":["import { TaskRunner } from './tasks';\n\nexport const PipelineExit = Symbol.for('PipelineExit');\n\nexport type PipelineAction<Ctx, T> = (context: Ctx, tasks?: TaskRunner) => Promise<T | typeof PipelineExit> | T | typeof PipelineExit;\nexport type PipelineCondition<Ctx> = (context: Readonly<Ctx>) => boolean;\n\nexport interface ValidationSchema {\n parse?: (data: any) => any;\n safeParse?: (data: any) => { success: boolean; error?: any; issues?: any; data?: any };\n}\n\nexport type Validator = ((value: any) => boolean | string | Promise<boolean | string>) | ValidationSchema;\nexport type Transformer<Ctx> = (value: any, context: Readonly<Ctx>) => any | Promise<any>;\n\nexport interface PipelineStep<Ctx> extends StepConfig<Ctx> {\n name?: keyof Ctx;\n action: PipelineAction<Ctx, any>;\n condition?: PipelineCondition<Ctx>;\n}\n\nexport interface StepConfig<Ctx> {\n validate?: Validator;\n transform?: Transformer<Ctx>;\n onError?: (error: unknown, context: Readonly<Ctx>) => void | Promise<void>;\n fallback?: any | ((error: unknown, context: Readonly<Ctx>) => any | Promise<any>);\n optional?: boolean;\n timeout?: number;\n}\n\nexport interface StepMetadata {\n index: number;\n name?: string;\n type: 'named' | 'anonymous';\n}\n\nexport interface PipelineOptions<Ctx> {\n onStepStart?: (meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n onStepComplete?: (meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n onError?: (error: unknown, meta: StepMetadata, context: Readonly<Ctx>) => void | Promise<void>;\n validate?: Validator;\n onPipelineStart?: (context: Readonly<Ctx>) => void | Promise<void>;\n onPipelineComplete?: (context: Readonly<Ctx>) => void | Promise<void>;\n signal?: AbortSignal;\n}\n\nexport class PipelineValidationError<Ctx = any> extends Error {\n public step?: StepMetadata;\n public context?: Ctx;\n\n constructor(message: string, step?: StepMetadata, context?: Ctx) {\n super(message);\n this.name = 'PipelineValidationError';\n this.step = step;\n this.context = context;\n }\n}\n\nexport class PipelineTimeoutError<Ctx = any> extends Error {\n public step?: StepMetadata;\n public context?: Ctx;\n\n constructor(message: string, step?: StepMetadata, context?: Ctx) {\n super(message);\n this.name = 'PipelineTimeoutError';\n this.step = step;\n this.context = context;\n }\n}\n\nexport class PipelineAbortError extends Error {\n constructor(message: string = 'Pipeline aborted') {\n super(message);\n this.name = 'PipelineAbortError';\n }\n}\n\n/**\n * Pipeline (Workflow Engine)\n * \n * Implements a sequential workflow where steps are executed one by one,\n * accumulating results into a Context object.\n * \n * Philosophy: Enter-and-Forget (EAF), Zero-Dependency, Method Chaining.\n */\nexport class Pipeline<Ctx extends Record<string, any> = Record<string, any>> {\n private steps: PipelineStep<Ctx>[] = [];\n private options: PipelineOptions<Ctx>;\n\n constructor(options?: PipelineOptions<Ctx>) {\n this.options = options || {};\n }\n\n /**\n * Adds a named step to the pipeline. The result of the action is stored in the context under the given name.\n */\n public step<K extends keyof Ctx>(name: K, action: PipelineAction<Ctx, Ctx[K]> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n /**\n * Adds an anonymous step to the pipeline. The action can mutate the context directly or return a partial context to merge in.\n */\n public step(action: PipelineAction<Ctx, void | Partial<Ctx>> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n public step(\n nameOrAction: keyof Ctx | PipelineAction<Ctx, any> | Pipeline<any>,\n actionOrConfig?: PipelineAction<Ctx, any> | Pipeline<any> | StepConfig<Ctx>,\n config?: StepConfig<Ctx>\n ): this {\n if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {\n const action = nameOrAction instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => nameOrAction.run(ctx, tasks))\n : nameOrAction;\n this.steps.push({\n action: action as PipelineAction<Ctx, any>,\n ...(actionOrConfig as StepConfig<Ctx> || {})\n });\n } else {\n const action = actionOrConfig instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => actionOrConfig.run(ctx, tasks))\n : actionOrConfig as PipelineAction<Ctx, any>;\n this.steps.push({\n name: nameOrAction as keyof Ctx,\n action: action,\n ...(config || {})\n });\n }\n return this;\n }\n\n /**\n * Adds a conditional named step to the pipeline.\n */\n public stepIf<K extends keyof Ctx>(condition: PipelineCondition<Ctx>, name: K, action: PipelineAction<Ctx, Ctx[K]> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n /**\n * Adds a conditional anonymous step to the pipeline.\n */\n public stepIf(condition: PipelineCondition<Ctx>, action: PipelineAction<Ctx, void | Partial<Ctx>> | Pipeline<any>, config?: StepConfig<Ctx>): this;\n public stepIf(\n condition: PipelineCondition<Ctx>,\n nameOrAction: keyof Ctx | PipelineAction<Ctx, any> | Pipeline<any>,\n actionOrConfig?: PipelineAction<Ctx, any> | Pipeline<any> | StepConfig<Ctx>,\n config?: StepConfig<Ctx>\n ): this {\n if (typeof nameOrAction === 'function' || nameOrAction instanceof Pipeline) {\n const action = nameOrAction instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => nameOrAction.run(ctx, tasks))\n : nameOrAction;\n this.steps.push({\n condition,\n action: action as PipelineAction<Ctx, any>,\n ...(actionOrConfig as StepConfig<Ctx> || {})\n });\n } else {\n const action = actionOrConfig instanceof Pipeline\n ? ((ctx: Ctx, tasks?: TaskRunner) => actionOrConfig.run(ctx, tasks))\n : actionOrConfig as PipelineAction<Ctx, any>;\n this.steps.push({\n condition,\n name: nameOrAction as keyof Ctx,\n action: action,\n ...(config || {})\n });\n }\n return this;\n }\n\n /**\n * Executes the pipeline steps sequentially.\n * @param initialContext Optional initial context.\n * @param tasks Optional TaskRunner instance to pass to steps.\n */\n public async run(initialContext: Partial<Ctx> = {}, tasks?: TaskRunner): Promise<Ctx> {\n const context: Ctx = { ...initialContext } as Ctx;\n\n if (this.options.onPipelineStart) {\n await this.options.onPipelineStart({ ...context });\n }\n\n try {\n for (let i = 0; i < this.steps.length; i++) {\n if (this.options.signal?.aborted) {\n throw new PipelineAbortError();\n }\n\n const step = this.steps[i];\n const meta: StepMetadata = {\n index: i,\n name: step.name as string | undefined,\n type: step.name ? 'named' : 'anonymous'\n };\n\n if (step.condition && !step.condition(context)) {\n continue;\n }\n\n if (this.options.onStepStart) {\n await this.options.onStepStart(meta, { ...context });\n }\n\n try {\n let result: any;\n if (step.timeout && step.timeout > 0) {\n const timeoutPromise = new Promise<never>((_, reject) => {\n setTimeout(() => {\n reject(new PipelineTimeoutError(`Step timed out after ${step.timeout}ms`, meta, context));\n }, step.timeout);\n });\n result = await Promise.race([step.action(context, tasks), timeoutPromise]);\n } else {\n result = await step.action(context, tasks);\n }\n\n if (result === PipelineExit) {\n break;\n }\n\n if (!step.name) {\n // Anonymous action\n if (result && typeof result === 'object' && !Array.isArray(result)) {\n Object.assign(context, result);\n }\n } else {\n // Named action\n if (step.transform) {\n result = await step.transform(result, { ...context });\n }\n\n if (step.validate) {\n const validator = step.validate;\n if (typeof validator === 'function') {\n const valid = await validator(result);\n if (valid === false) {\n throw new PipelineValidationError(`Validation failed for step at index ${i} (${String(step.name)})`, meta, context);\n }\n if (typeof valid === 'string') {\n throw new PipelineValidationError(valid, meta, context);\n }\n } else if (typeof validator === 'object') {\n if (typeof validator.safeParse === 'function') {\n const res = validator.safeParse(result);\n if (!res.success) {\n const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';\n throw new PipelineValidationError(`Validation failed: ${errorMsg}`, meta, context);\n }\n result = res.data !== undefined ? res.data : result;\n } else if (typeof validator.parse === 'function') {\n try {\n const parsed = validator.parse(result);\n result = parsed !== undefined ? parsed : result;\n } catch (err: any) {\n throw new PipelineValidationError(`Validation failed: ${err.message || 'Schema parsing error'}`, meta, context);\n }\n }\n }\n }\n\n context[step.name] = result;\n }\n\n if (this.options.onStepComplete) {\n await this.options.onStepComplete(meta, { ...context });\n }\n } catch (err) {\n let handled = false;\n\n if (step.onError) {\n await step.onError(err, { ...context });\n }\n\n if ('fallback' in step) {\n const fallbackValue = typeof step.fallback === 'function' ? await step.fallback(err, { ...context }) : step.fallback;\n if (step.name) {\n context[step.name] = fallbackValue;\n }\n handled = true;\n } else if (step.optional) {\n if (step.name) {\n context[step.name] = undefined as any;\n }\n handled = true;\n }\n\n if (!handled) {\n if (this.options.onError) {\n await this.options.onError(err, meta, { ...context });\n }\n throw err;\n }\n }\n }\n\n if (this.options.validate) {\n const validator = this.options.validate;\n if (typeof validator === 'function') {\n const valid = await validator(context);\n if (valid === false) {\n throw new PipelineValidationError(`Final validation failed`);\n }\n if (typeof valid === 'string') {\n throw new PipelineValidationError(valid);\n }\n } else if (typeof validator === 'object') {\n if (typeof validator.safeParse === 'function') {\n const res = validator.safeParse(context);\n if (!res.success) {\n const errorMsg = res.error?.message || res.issues?.[0]?.message || 'Schema validation failed';\n throw new PipelineValidationError(`Final validation failed: ${errorMsg}`);\n }\n Object.assign(context, res.data !== undefined ? res.data : context);\n } else if (typeof validator.parse === 'function') {\n try {\n const parsed = validator.parse(context);\n Object.assign(context, parsed !== undefined ? parsed : context);\n } catch (err: any) {\n throw new PipelineValidationError(`Final validation failed: ${err.message || 'Schema parsing error'}`);\n }\n }\n }\n }\n } finally {\n if (this.options.onPipelineComplete) {\n await this.options.onPipelineComplete({ ...context });\n }\n }\n\n return context;\n }\n}\n\n"],"names":["Pipeline","PipelineAbortError","PipelineExit","PipelineTimeoutError","PipelineValidationError","Symbol","for","Error","message","step","context","name","nameOrAction","actionOrConfig","config","action","ctx","tasks","run","steps","push","stepIf","condition","initialContext","options","onPipelineStart","i","length","signal","aborted","meta","index","type","onStepStart","result","timeout","timeoutPromise","Promise","_","reject","setTimeout","race","Array","isArray","Object","assign","transform","validate","validator","valid","String","safeParse","res","success","errorMsg","error","issues","data","undefined","parse","parsed","err","onStepComplete","handled","onError","fallbackValue","fallback","optional","onPipelineComplete"],"mappings":";;;;;;;;;;;QAqFaA;eAAAA;;QAfAC;eAAAA;;QApEAC;eAAAA;;QAwDAC;eAAAA;;QAZAC;eAAAA;;;;;;;;;;;;;;;;AA5CN,MAAMF,eAAeG,OAAOC,GAAG,CAAC;AA4ChC,IAAA,AAAMF,0BAAN,MAAMA,gCAA2CG;IAItD,YAAYC,OAAe,EAAEC,IAAmB,EAAEC,OAAa,CAAE;QAC/D,KAAK,CAACF,UAJR,uBAAOC,QAAP,KAAA,IACA,uBAAOC,WAAP,KAAA;QAIE,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACF,IAAI,GAAGA;QACZ,IAAI,CAACC,OAAO,GAAGA;IACjB;AACF;AAEO,IAAA,AAAMP,uBAAN,MAAMA,6BAAwCI;IAInD,YAAYC,OAAe,EAAEC,IAAmB,EAAEC,OAAa,CAAE;QAC/D,KAAK,CAACF,UAJR,uBAAOC,QAAP,KAAA,IACA,uBAAOC,WAAP,KAAA;QAIE,IAAI,CAACC,IAAI,GAAG;QACZ,IAAI,CAACF,IAAI,GAAGA;QACZ,IAAI,CAACC,OAAO,GAAGA;IACjB;AACF;AAEO,IAAA,AAAMT,qBAAN,MAAMA,2BAA2BM;IACtC,YAAYC,UAAkB,kBAAkB,CAAE;QAChD,KAAK,CAACA;QACN,IAAI,CAACG,IAAI,GAAG;IACd;AACF;AAUO,IAAA,AAAMX,WAAN,MAAMA;IAgBJS,KACLG,YAAkE,EAClEC,cAA2E,EAC3EC,MAAwB,EAClB;QACN,IAAI,OAAOF,iBAAiB,cAAcA,wBAAwBZ,UAAU;YAC1E,MAAMe,SAASH,wBAAwBZ,WAClC,CAACgB,KAAUC,QAAuBL,aAAaM,GAAG,CAACF,KAAKC,SACzDL;YACJ,IAAI,CAACO,KAAK,CAACC,IAAI,CAAC;gBACdL,QAAQA;gBACR,GAAIF,kBAAqC,CAAC,CAAC;YAC7C;QACF,OAAO;YACL,MAAME,SAASF,0BAA0Bb,WACpC,CAACgB,KAAUC,QAAuBJ,eAAeK,GAAG,CAACF,KAAKC,SAC3DJ;YACJ,IAAI,CAACM,KAAK,CAACC,IAAI,CAAC;gBACdT,MAAMC;gBACNG,QAAQA;gBACR,GAAID,UAAU,CAAC,CAAC;YAClB;QACF;QACA,OAAO,IAAI;IACb;IAUOO,OACLC,SAAiC,EACjCV,YAAkE,EAClEC,cAA2E,EAC3EC,MAAwB,EAClB;QACN,IAAI,OAAOF,iBAAiB,cAAcA,wBAAwBZ,UAAU;YAC1E,MAAMe,SAASH,wBAAwBZ,WAClC,CAACgB,KAAUC,QAAuBL,aAAaM,GAAG,CAACF,KAAKC,SACzDL;YACJ,IAAI,CAACO,KAAK,CAACC,IAAI,CAAC;gBACdE;gBACAP,QAAQA;gBACR,GAAIF,kBAAqC,CAAC,CAAC;YAC7C;QACF,OAAO;YACL,MAAME,SAASF,0BAA0Bb,WACpC,CAACgB,KAAUC,QAAuBJ,eAAeK,GAAG,CAACF,KAAKC,SAC3DJ;YACJ,IAAI,CAACM,KAAK,CAACC,IAAI,CAAC;gBACdE;gBACAX,MAAMC;gBACNG,QAAQA;gBACR,GAAID,UAAU,CAAC,CAAC;YAClB;QACF;QACA,OAAO,IAAI;IACb;IAEA;;;;GAIC,GACD,MAAaI,IAAIK,iBAA+B,CAAC,CAAC,EAAEN,KAAkB,EAAgB;QACpF,MAAMP,UAAe;YAAE,GAAGa,cAAc;QAAC;QAEzC,IAAI,IAAI,CAACC,OAAO,CAACC,eAAe,EAAE;YAChC,MAAM,IAAI,CAACD,OAAO,CAACC,eAAe,CAAC;gBAAE,GAAGf,OAAO;YAAC;QAClD;QAEA,IAAI;YACF,IAAK,IAAIgB,IAAI,GAAGA,IAAI,IAAI,CAACP,KAAK,CAACQ,MAAM,EAAED,IAAK;gBAC1C,IAAI,IAAI,CAACF,OAAO,CAACI,MAAM,EAAEC,SAAS;oBAChC,MAAM,IAAI5B;gBACZ;gBAEA,MAAMQ,OAAO,IAAI,CAACU,KAAK,CAACO,EAAE;gBAC1B,MAAMI,OAAqB;oBACzBC,OAAOL;oBACPf,MAAMF,KAAKE,IAAI;oBACfqB,MAAMvB,KAAKE,IAAI,GAAG,UAAU;gBAC9B;gBAEA,IAAIF,KAAKa,SAAS,IAAI,CAACb,KAAKa,SAAS,CAACZ,UAAU;oBAC9C;gBACF;gBAEA,IAAI,IAAI,CAACc,OAAO,CAACS,WAAW,EAAE;oBAC5B,MAAM,IAAI,CAACT,OAAO,CAACS,WAAW,CAACH,MAAM;wBAAE,GAAGpB,OAAO;oBAAC;gBACpD;gBAEA,IAAI;oBACF,IAAIwB;oBACJ,IAAIzB,KAAK0B,OAAO,IAAI1B,KAAK0B,OAAO,GAAG,GAAG;wBACpC,MAAMC,iBAAiB,IAAIC,QAAe,CAACC,GAAGC;4BAC5CC,WAAW;gCACTD,OAAO,IAAIpC,qBAAqB,CAAC,qBAAqB,EAAEM,KAAK0B,OAAO,CAAC,EAAE,CAAC,EAAEL,MAAMpB;4BAClF,GAAGD,KAAK0B,OAAO;wBACjB;wBACAD,SAAS,MAAMG,QAAQI,IAAI,CAAC;4BAAChC,KAAKM,MAAM,CAACL,SAASO;4BAAQmB;yBAAe;oBAC3E,OAAO;wBACLF,SAAS,MAAMzB,KAAKM,MAAM,CAACL,SAASO;oBACtC;oBAEA,IAAIiB,WAAWhC,cAAc;wBAC3B;oBACF;oBAEA,IAAI,CAACO,KAAKE,IAAI,EAAE;wBACd,mBAAmB;wBACnB,IAAIuB,UAAU,OAAOA,WAAW,YAAY,CAACQ,MAAMC,OAAO,CAACT,SAAS;4BAClEU,OAAOC,MAAM,CAACnC,SAASwB;wBACzB;oBACF,OAAO;wBACL,eAAe;wBACf,IAAIzB,KAAKqC,SAAS,EAAE;4BAClBZ,SAAS,MAAMzB,KAAKqC,SAAS,CAACZ,QAAQ;gCAAE,GAAGxB,OAAO;4BAAC;wBACrD;wBAEA,IAAID,KAAKsC,QAAQ,EAAE;4BACjB,MAAMC,YAAYvC,KAAKsC,QAAQ;4BAC/B,IAAI,OAAOC,cAAc,YAAY;gCACnC,MAAMC,QAAQ,MAAMD,UAAUd;gCAC9B,IAAIe,UAAU,OAAO;oCACnB,MAAM,IAAI7C,wBAAwB,CAAC,oCAAoC,EAAEsB,EAAE,EAAE,EAAEwB,OAAOzC,KAAKE,IAAI,EAAE,CAAC,CAAC,EAAEmB,MAAMpB;gCAC7G;gCACA,IAAI,OAAOuC,UAAU,UAAU;oCAC7B,MAAM,IAAI7C,wBAAwB6C,OAAOnB,MAAMpB;gCACjD;4BACF,OAAO,IAAI,OAAOsC,cAAc,UAAU;gCACxC,IAAI,OAAOA,UAAUG,SAAS,KAAK,YAAY;oCAC7C,MAAMC,MAAMJ,UAAUG,SAAS,CAACjB;oCAChC,IAAI,CAACkB,IAAIC,OAAO,EAAE;wCAChB,MAAMC,WAAWF,IAAIG,KAAK,EAAE/C,WAAW4C,IAAII,MAAM,EAAE,CAAC,EAAE,EAAEhD,WAAW;wCACnE,MAAM,IAAIJ,wBAAwB,CAAC,mBAAmB,EAAEkD,UAAU,EAAExB,MAAMpB;oCAC5E;oCACAwB,SAASkB,IAAIK,IAAI,KAAKC,YAAYN,IAAIK,IAAI,GAAGvB;gCAC/C,OAAO,IAAI,OAAOc,UAAUW,KAAK,KAAK,YAAY;oCAChD,IAAI;wCACF,MAAMC,SAASZ,UAAUW,KAAK,CAACzB;wCAC/BA,SAAS0B,WAAWF,YAAYE,SAAS1B;oCAC3C,EAAE,OAAO2B,KAAU;wCACjB,MAAM,IAAIzD,wBAAwB,CAAC,mBAAmB,EAAEyD,IAAIrD,OAAO,IAAI,wBAAwB,EAAEsB,MAAMpB;oCACzG;gCACF;4BACF;wBACF;wBAEAA,OAAO,CAACD,KAAKE,IAAI,CAAC,GAAGuB;oBACvB;oBAEA,IAAI,IAAI,CAACV,OAAO,CAACsC,cAAc,EAAE;wBAC/B,MAAM,IAAI,CAACtC,OAAO,CAACsC,cAAc,CAAChC,MAAM;4BAAE,GAAGpB,OAAO;wBAAC;oBACvD;gBACF,EAAE,OAAOmD,KAAK;oBACZ,IAAIE,UAAU;oBAEd,IAAItD,KAAKuD,OAAO,EAAE;wBAChB,MAAMvD,KAAKuD,OAAO,CAACH,KAAK;4BAAE,GAAGnD,OAAO;wBAAC;oBACvC;oBAEA,IAAI,cAAcD,MAAM;wBACtB,MAAMwD,gBAAgB,OAAOxD,KAAKyD,QAAQ,KAAK,aAAa,MAAMzD,KAAKyD,QAAQ,CAACL,KAAK;4BAAE,GAAGnD,OAAO;wBAAC,KAAKD,KAAKyD,QAAQ;wBACpH,IAAIzD,KAAKE,IAAI,EAAE;4BACbD,OAAO,CAACD,KAAKE,IAAI,CAAC,GAAGsD;wBACvB;wBACAF,UAAU;oBACZ,OAAO,IAAItD,KAAK0D,QAAQ,EAAE;wBACxB,IAAI1D,KAAKE,IAAI,EAAE;4BACbD,OAAO,CAACD,KAAKE,IAAI,CAAC,GAAG+C;wBACvB;wBACAK,UAAU;oBACZ;oBAEA,IAAI,CAACA,SAAS;wBACZ,IAAI,IAAI,CAACvC,OAAO,CAACwC,OAAO,EAAE;4BACxB,MAAM,IAAI,CAACxC,OAAO,CAACwC,OAAO,CAACH,KAAK/B,MAAM;gCAAE,GAAGpB,OAAO;4BAAC;wBACrD;wBACA,MAAMmD;oBACR;gBACF;YACF;YAEA,IAAI,IAAI,CAACrC,OAAO,CAACuB,QAAQ,EAAE;gBACzB,MAAMC,YAAY,IAAI,CAACxB,OAAO,CAACuB,QAAQ;gBACvC,IAAI,OAAOC,cAAc,YAAY;oBACnC,MAAMC,QAAQ,MAAMD,UAAUtC;oBAC9B,IAAIuC,UAAU,OAAO;wBACnB,MAAM,IAAI7C,wBAAwB,CAAC,uBAAuB,CAAC;oBAC7D;oBACA,IAAI,OAAO6C,UAAU,UAAU;wBAC7B,MAAM,IAAI7C,wBAAwB6C;oBACpC;gBACF,OAAO,IAAI,OAAOD,cAAc,UAAU;oBACxC,IAAI,OAAOA,UAAUG,SAAS,KAAK,YAAY;wBAC7C,MAAMC,MAAMJ,UAAUG,SAAS,CAACzC;wBAChC,IAAI,CAAC0C,IAAIC,OAAO,EAAE;4BAChB,MAAMC,WAAWF,IAAIG,KAAK,EAAE/C,WAAW4C,IAAII,MAAM,EAAE,CAAC,EAAE,EAAEhD,WAAW;4BACnE,MAAM,IAAIJ,wBAAwB,CAAC,yBAAyB,EAAEkD,UAAU;wBAC1E;wBACAV,OAAOC,MAAM,CAACnC,SAAS0C,IAAIK,IAAI,KAAKC,YAAYN,IAAIK,IAAI,GAAG/C;oBAC7D,OAAO,IAAI,OAAOsC,UAAUW,KAAK,KAAK,YAAY;wBAChD,IAAI;4BACF,MAAMC,SAASZ,UAAUW,KAAK,CAACjD;4BAC/BkC,OAAOC,MAAM,CAACnC,SAASkD,WAAWF,YAAYE,SAASlD;wBACzD,EAAE,OAAOmD,KAAU;4BACjB,MAAM,IAAIzD,wBAAwB,CAAC,yBAAyB,EAAEyD,IAAIrD,OAAO,IAAI,wBAAwB;wBACvG;oBACF;gBACF;YACF;QACF,SAAU;YACR,IAAI,IAAI,CAACgB,OAAO,CAAC4C,kBAAkB,EAAE;gBACnC,MAAM,IAAI,CAAC5C,OAAO,CAAC4C,kBAAkB,CAAC;oBAAE,GAAG1D,OAAO;gBAAC;YACrD;QACF;QAEA,OAAOA;IACT;IA3OA,YAAYc,OAA8B,CAAE;QAH5C,uBAAQL,SAA6B,EAAE;QACvC,uBAAQK,WAAR,KAAA;QAGE,IAAI,CAACA,OAAO,GAAGA,WAAW,CAAC;IAC7B;AA0OF"}
@@ -1,45 +1,48 @@
1
1
  "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AutocompletePrompt = void 0;
4
- const ansi_1 = require("../ansi");
5
- const base_1 = require("../base");
6
- const theme_1 = require("../theme");
7
- const symbols_1 = require("../symbols");
8
- const utils_1 = require("../utils");
9
- class AutocompletePrompt extends base_1.Prompt {
10
- constructor(options) {
11
- super(options);
12
- this.input = '';
13
- this.choices = [];
14
- this.selectedIndex = 0;
15
- this.loading = false;
16
- this.spinnerFrame = 0;
17
- this.scrollTop = 0;
18
- this.pageSize = 7;
19
- this.hasSearched = false;
20
- this.input = options.initial || '';
21
- this.search(this.input);
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ Object.defineProperty(exports, "AutocompletePrompt", {
6
+ enumerable: true,
7
+ get: function() {
8
+ return AutocompletePrompt;
9
+ }
10
+ });
11
+ const _ansi = require("../ansi");
12
+ const _base = require("../base");
13
+ const _theme = require("../theme");
14
+ const _symbols = require("../symbols");
15
+ const _utils = require("../utils");
16
+ function _define_property(obj, key, value) {
17
+ if (key in obj) {
18
+ Object.defineProperty(obj, key, {
19
+ value: value,
20
+ enumerable: true,
21
+ configurable: true,
22
+ writable: true
23
+ });
24
+ } else {
25
+ obj[key] = value;
22
26
  }
27
+ return obj;
28
+ }
29
+ let AutocompletePrompt = class AutocompletePrompt extends _base.Prompt {
23
30
  search(query) {
24
- if (this.debounceTimer)
25
- clearTimeout(this.debounceTimer);
31
+ if (this.debounceTimer) clearTimeout(this.debounceTimer);
26
32
  this.loading = true;
27
33
  this.startSpinner();
28
34
  this.render(false);
29
- this.debounceTimer = setTimeout(async () => {
35
+ this.debounceTimer = setTimeout(async ()=>{
30
36
  try {
31
37
  const results = await this.options.suggest(query);
32
- if (query !== this.input)
33
- return;
38
+ if (query !== this.input) return;
34
39
  this.choices = results.slice(0, this.options.limit || 10);
35
40
  this.selectedIndex = 0;
36
41
  this.scrollTop = 0;
37
42
  this.hasSearched = true;
38
- }
39
- catch (_err) {
43
+ } catch (_err) {
40
44
  this.choices = [];
41
- }
42
- finally {
45
+ } finally{
43
46
  this.loading = false;
44
47
  this.stopSpinner();
45
48
  this.render(false);
@@ -47,10 +50,9 @@ class AutocompletePrompt extends base_1.Prompt {
47
50
  }, 300); // 300ms debounce
48
51
  }
49
52
  startSpinner() {
50
- if (this.spinnerTimer)
51
- return;
52
- this.spinnerTimer = setInterval(() => {
53
- this.spinnerFrame = (this.spinnerFrame + 1) % symbols_1.symbols.spinner.length;
53
+ if (this.spinnerTimer) return;
54
+ this.spinnerTimer = setInterval(()=>{
55
+ this.spinnerFrame = (this.spinnerFrame + 1) % _symbols.symbols.spinner.length;
54
56
  this.render(false);
55
57
  }, 80);
56
58
  }
@@ -70,32 +72,27 @@ class AutocompletePrompt extends base_1.Prompt {
70
72
  }
71
73
  let output = '';
72
74
  // Header
73
- const icon = this.loading ? `${theme_1.theme.main}${symbols_1.symbols.spinner[this.spinnerFrame]}${ansi_1.ANSI.RESET}` : `${theme_1.theme.success}?${ansi_1.ANSI.RESET}`;
74
- output += `${icon} ${ansi_1.ANSI.BOLD}${theme_1.theme.title}${this.options.message}${ansi_1.ANSI.RESET} ${this.input}`;
75
+ const icon = this.loading ? `${_theme.theme.main}${_symbols.symbols.spinner[this.spinnerFrame]}${_ansi.ANSI.RESET}` : `${_theme.theme.success}?${_ansi.ANSI.RESET}`;
76
+ output += `${icon} ${_ansi.ANSI.BOLD}${_theme.theme.title}${this.options.message}${_ansi.ANSI.RESET} ${this.input}`;
75
77
  output += '\n';
76
78
  if (this.loading) {
77
- output += ` ${theme_1.theme.muted}Searching...${ansi_1.ANSI.RESET}`;
78
- }
79
- else if (this.choices.length === 0 && this.hasSearched) {
80
- output += ` ${theme_1.theme.muted}${this.options.fallback || 'No results found.'}${ansi_1.ANSI.RESET}`;
81
- }
82
- else if (this.choices.length > 0) {
79
+ output += ` ${_theme.theme.muted}Searching...${_ansi.ANSI.RESET}`;
80
+ } else if (this.choices.length === 0 && this.hasSearched) {
81
+ output += ` ${_theme.theme.muted}${this.options.fallback || 'No results found.'}${_ansi.ANSI.RESET}`;
82
+ } else if (this.choices.length > 0) {
83
83
  // Render list similar to SelectPrompt
84
84
  if (this.selectedIndex < this.scrollTop) {
85
85
  this.scrollTop = this.selectedIndex;
86
- }
87
- else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
86
+ } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {
88
87
  this.scrollTop = this.selectedIndex - this.pageSize + 1;
89
88
  }
90
89
  const visibleChoices = this.choices.slice(this.scrollTop, this.scrollTop + this.pageSize);
91
- visibleChoices.forEach((choice, index) => {
90
+ visibleChoices.forEach((choice, index)=>{
92
91
  const actualIndex = this.scrollTop + index;
93
- if (index > 0)
94
- output += '\n';
92
+ if (index > 0) output += '\n';
95
93
  if (actualIndex === this.selectedIndex) {
96
- output += `${theme_1.theme.main}${symbols_1.symbols.pointer} ${choice.title}${ansi_1.ANSI.RESET}`;
97
- }
98
- else {
94
+ output += `${_theme.theme.main}${_symbols.symbols.pointer} ${choice.title}${_ansi.ANSI.RESET}`;
95
+ } else {
99
96
  output += ` ${choice.title}`;
100
97
  }
101
98
  });
@@ -110,9 +107,9 @@ class AutocompletePrompt extends base_1.Prompt {
110
107
  }
111
108
  this.print(`\r`);
112
109
  const firstLine = lines[0];
113
- const visualLen = (0, utils_1.stringWidth)(this.stripAnsi(firstLine));
110
+ const visualLen = (0, _utils.stringWidth)(this.stripAnsi(firstLine));
114
111
  this.print(`\x1b[${visualLen}C`);
115
- this.print(ansi_1.ANSI.SHOW_CURSOR);
112
+ this.print(_ansi.ANSI.SHOW_CURSOR);
116
113
  }
117
114
  handleInput(char) {
118
115
  // Enter
@@ -153,18 +150,22 @@ class AutocompletePrompt extends base_1.Prompt {
153
150
  }
154
151
  }
155
152
  handleMouse(event) {
156
- if (this.choices.length === 0)
157
- return;
153
+ if (this.choices.length === 0) return;
158
154
  if (event.action === 'scroll') {
159
155
  if (event.scroll === 'up') {
160
156
  this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;
161
157
  this.render(false);
162
- }
163
- else if (event.scroll === 'down') {
158
+ } else if (event.scroll === 'down') {
164
159
  this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;
165
160
  this.render(false);
166
161
  }
167
162
  }
168
163
  }
169
- }
170
- exports.AutocompletePrompt = AutocompletePrompt;
164
+ constructor(options){
165
+ super(options), _define_property(this, "input", ''), _define_property(this, "choices", []), _define_property(this, "selectedIndex", 0), _define_property(this, "loading", false), _define_property(this, "debounceTimer", void 0), _define_property(this, "spinnerFrame", 0), _define_property(this, "spinnerTimer", void 0), _define_property(this, "scrollTop", 0), _define_property(this, "pageSize", 7), _define_property(this, "hasSearched", false);
166
+ this.input = options.initial || '';
167
+ this.search(this.input);
168
+ }
169
+ };
170
+
171
+ //# sourceMappingURL=autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/prompts/autocomplete.ts"],"sourcesContent":["import { ANSI } from '../ansi';\nimport { Prompt } from '../base';\nimport { theme } from '../theme';\nimport { symbols } from '../symbols';\nimport { AutocompleteOptions, SelectChoice, MouseEvent } from '../types';\nimport { stringWidth } from '../utils';\n\nexport class AutocompletePrompt<V> extends Prompt<V, AutocompleteOptions<V>> {\n private input: string = '';\n private choices: SelectChoice<V>[] = [];\n private selectedIndex: number = 0;\n private loading: boolean = false;\n private debounceTimer?: any;\n private spinnerFrame: number = 0;\n private spinnerTimer?: any;\n private scrollTop: number = 0;\n private readonly pageSize: number = 7;\n private hasSearched: boolean = false;\n\n constructor(options: AutocompleteOptions<V>) {\n super(options);\n this.input = options.initial || '';\n this.search(this.input);\n }\n\n private search(query: string) {\n if (this.debounceTimer) clearTimeout(this.debounceTimer);\n\n this.loading = true;\n this.startSpinner();\n this.render(false);\n\n this.debounceTimer = setTimeout(async () => {\n try {\n const results = await this.options.suggest(query);\n if (query !== this.input) return;\n\n this.choices = results.slice(0, this.options.limit || 10);\n this.selectedIndex = 0;\n this.scrollTop = 0;\n this.hasSearched = true;\n } catch (_err) {\n this.choices = [];\n } finally {\n this.loading = false;\n this.stopSpinner();\n this.render(false);\n }\n }, 300); // 300ms debounce\n }\n\n private startSpinner() {\n if (this.spinnerTimer) return;\n this.spinnerTimer = setInterval(() => {\n this.spinnerFrame = (this.spinnerFrame + 1) % symbols.spinner.length;\n this.render(false);\n }, 80);\n }\n\n private stopSpinner() {\n if (this.spinnerTimer) {\n clearInterval(this.spinnerTimer);\n this.spinnerTimer = undefined;\n }\n }\n\n protected cleanup() {\n this.stopSpinner();\n super.cleanup();\n }\n\n protected render(_firstRender: boolean) {\n if (this.lastRenderHeight > 1) {\n this.print(`\\x1b[${this.lastRenderHeight - 1}B`); // Move down\n }\n\n let output = '';\n\n // Header\n const icon = this.loading ? `${theme.main}${symbols.spinner[this.spinnerFrame]}${ANSI.RESET}` : `${theme.success}?${ANSI.RESET}`;\n output += `${icon} ${ANSI.BOLD}${theme.title}${this.options.message}${ANSI.RESET} ${this.input}`;\n\n output += '\\n';\n\n if (this.loading) {\n output += ` ${theme.muted}Searching...${ANSI.RESET}`;\n } else if (this.choices.length === 0 && this.hasSearched) {\n output += ` ${theme.muted}${this.options.fallback || 'No results found.'}${ANSI.RESET}`;\n } else if (this.choices.length > 0) {\n // Render list similar to SelectPrompt\n if (this.selectedIndex < this.scrollTop) {\n this.scrollTop = this.selectedIndex;\n } else if (this.selectedIndex >= this.scrollTop + this.pageSize) {\n this.scrollTop = this.selectedIndex - this.pageSize + 1;\n }\n\n const visibleChoices = this.choices.slice(this.scrollTop, this.scrollTop + this.pageSize);\n\n visibleChoices.forEach((choice, index) => {\n const actualIndex = this.scrollTop + index;\n if (index > 0) output += '\\n';\n\n if (actualIndex === this.selectedIndex) {\n output += `${theme.main}${symbols.pointer} ${choice.title}${ANSI.RESET}`;\n } else {\n output += ` ${choice.title}`;\n }\n });\n }\n\n this.renderFrame(output);\n\n // Position cursor at the end of the input string on the first line\n const lines = output.split('\\n');\n const height = lines.length;\n\n // Move up (height - 1)\n if (height > 1) {\n this.print(`\\x1b[${height - 1}A`);\n }\n\n this.print(`\\r`);\n\n const firstLine = lines[0];\n const visualLen = stringWidth(this.stripAnsi(firstLine));\n\n this.print(`\\x1b[${visualLen}C`);\n this.print(ANSI.SHOW_CURSOR);\n }\n\n protected handleInput(char: string) {\n // Enter\n if (char === '\\r' || char === '\\n') {\n if (this.choices.length > 0) {\n this.submit(this.choices[this.selectedIndex].value);\n }\n return;\n }\n\n // Backspace\n if (char === '\\u0008' || char === '\\x7f') {\n if (this.input.length > 0) {\n this.input = this.input.slice(0, -1);\n this.search(this.input);\n }\n return;\n }\n\n // Up\n if (this.isUp(char)) {\n if (this.choices.length > 0) {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;\n this.render(false);\n }\n return;\n }\n\n // Down\n if (this.isDown(char)) {\n if (this.choices.length > 0) {\n this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n return;\n }\n\n // Typing\n if (char.length === 1 && !/^[\\x00-\\x1F]/.test(char)) {\n this.input += char;\n this.search(this.input);\n }\n }\n\n protected handleMouse(event: MouseEvent) {\n if (this.choices.length === 0) return;\n\n if (event.action === 'scroll') {\n if (event.scroll === 'up') {\n this.selectedIndex = this.selectedIndex > 0 ? this.selectedIndex - 1 : this.choices.length - 1;\n this.render(false);\n } else if (event.scroll === 'down') {\n this.selectedIndex = this.selectedIndex < this.choices.length - 1 ? this.selectedIndex + 1 : 0;\n this.render(false);\n }\n }\n }\n}\n"],"names":["AutocompletePrompt","Prompt","search","query","debounceTimer","clearTimeout","loading","startSpinner","render","setTimeout","results","options","suggest","input","choices","slice","limit","selectedIndex","scrollTop","hasSearched","_err","stopSpinner","spinnerTimer","setInterval","spinnerFrame","symbols","spinner","length","clearInterval","undefined","cleanup","_firstRender","lastRenderHeight","print","output","icon","theme","main","ANSI","RESET","success","BOLD","title","message","muted","fallback","pageSize","visibleChoices","forEach","choice","index","actualIndex","pointer","renderFrame","lines","split","height","firstLine","visualLen","stringWidth","stripAnsi","SHOW_CURSOR","handleInput","char","submit","value","isUp","isDown","test","handleMouse","event","action","scroll","initial"],"mappings":";;;;+BAOaA;;;eAAAA;;;sBAPQ;sBACE;uBACD;yBACE;uBAEI;;;;;;;;;;;;;;AAErB,IAAA,AAAMA,qBAAN,MAAMA,2BAA8BC,YAAM;IAkBrCC,OAAOC,KAAa,EAAE;QAC1B,IAAI,IAAI,CAACC,aAAa,EAAEC,aAAa,IAAI,CAACD,aAAa;QAEvD,IAAI,CAACE,OAAO,GAAG;QACf,IAAI,CAACC,YAAY;QACjB,IAAI,CAACC,MAAM,CAAC;QAEZ,IAAI,CAACJ,aAAa,GAAGK,WAAW;YAC5B,IAAI;gBACA,MAAMC,UAAU,MAAM,IAAI,CAACC,OAAO,CAACC,OAAO,CAACT;gBAC3C,IAAIA,UAAU,IAAI,CAACU,KAAK,EAAE;gBAE1B,IAAI,CAACC,OAAO,GAAGJ,QAAQK,KAAK,CAAC,GAAG,IAAI,CAACJ,OAAO,CAACK,KAAK,IAAI;gBACtD,IAAI,CAACC,aAAa,GAAG;gBACrB,IAAI,CAACC,SAAS,GAAG;gBACjB,IAAI,CAACC,WAAW,GAAG;YACvB,EAAE,OAAOC,MAAM;gBACX,IAAI,CAACN,OAAO,GAAG,EAAE;YACrB,SAAU;gBACN,IAAI,CAACR,OAAO,GAAG;gBACf,IAAI,CAACe,WAAW;gBAChB,IAAI,CAACb,MAAM,CAAC;YAChB;QACJ,GAAG,MAAM,iBAAiB;IAC9B;IAEQD,eAAe;QACnB,IAAI,IAAI,CAACe,YAAY,EAAE;QACvB,IAAI,CAACA,YAAY,GAAGC,YAAY;YAC5B,IAAI,CAACC,YAAY,GAAG,AAAC,CAAA,IAAI,CAACA,YAAY,GAAG,CAAA,IAAKC,gBAAO,CAACC,OAAO,CAACC,MAAM;YACpE,IAAI,CAACnB,MAAM,CAAC;QAChB,GAAG;IACP;IAEQa,cAAc;QAClB,IAAI,IAAI,CAACC,YAAY,EAAE;YACnBM,cAAc,IAAI,CAACN,YAAY;YAC/B,IAAI,CAACA,YAAY,GAAGO;QACxB;IACJ;IAEUC,UAAU;QAChB,IAAI,CAACT,WAAW;QAChB,KAAK,CAACS;IACV;IAEUtB,OAAOuB,YAAqB,EAAE;QACpC,IAAI,IAAI,CAACC,gBAAgB,GAAG,GAAG;YAC3B,IAAI,CAACC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAACD,gBAAgB,GAAG,EAAE,CAAC,CAAC,GAAG,YAAY;QAClE;QAEA,IAAIE,SAAS;QAEb,SAAS;QACT,MAAMC,OAAO,IAAI,CAAC7B,OAAO,GAAG,GAAG8B,YAAK,CAACC,IAAI,GAAGZ,gBAAO,CAACC,OAAO,CAAC,IAAI,CAACF,YAAY,CAAC,GAAGc,UAAI,CAACC,KAAK,EAAE,GAAG,GAAGH,YAAK,CAACI,OAAO,CAAC,CAAC,EAAEF,UAAI,CAACC,KAAK,EAAE;QAChIL,UAAU,GAAGC,KAAK,CAAC,EAAEG,UAAI,CAACG,IAAI,GAAGL,YAAK,CAACM,KAAK,GAAG,IAAI,CAAC/B,OAAO,CAACgC,OAAO,GAAGL,UAAI,CAACC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC1B,KAAK,EAAE;QAEhGqB,UAAU;QAEV,IAAI,IAAI,CAAC5B,OAAO,EAAE;YACd4B,UAAU,CAAC,EAAE,EAAEE,YAAK,CAACQ,KAAK,CAAC,YAAY,EAAEN,UAAI,CAACC,KAAK,EAAE;QACzD,OAAO,IAAI,IAAI,CAACzB,OAAO,CAACa,MAAM,KAAK,KAAK,IAAI,CAACR,WAAW,EAAE;YACtDe,UAAU,CAAC,EAAE,EAAEE,YAAK,CAACQ,KAAK,GAAG,IAAI,CAACjC,OAAO,CAACkC,QAAQ,IAAI,sBAAsBP,UAAI,CAACC,KAAK,EAAE;QAC5F,OAAO,IAAI,IAAI,CAACzB,OAAO,CAACa,MAAM,GAAG,GAAG;YAChC,sCAAsC;YACtC,IAAI,IAAI,CAACV,aAAa,GAAG,IAAI,CAACC,SAAS,EAAE;gBACrC,IAAI,CAACA,SAAS,GAAG,IAAI,CAACD,aAAa;YACvC,OAAO,IAAI,IAAI,CAACA,aAAa,IAAI,IAAI,CAACC,SAAS,GAAG,IAAI,CAAC4B,QAAQ,EAAE;gBAC7D,IAAI,CAAC5B,SAAS,GAAG,IAAI,CAACD,aAAa,GAAG,IAAI,CAAC6B,QAAQ,GAAG;YAC1D;YAEA,MAAMC,iBAAiB,IAAI,CAACjC,OAAO,CAACC,KAAK,CAAC,IAAI,CAACG,SAAS,EAAE,IAAI,CAACA,SAAS,GAAG,IAAI,CAAC4B,QAAQ;YAExFC,eAAeC,OAAO,CAAC,CAACC,QAAQC;gBAC5B,MAAMC,cAAc,IAAI,CAACjC,SAAS,GAAGgC;gBACrC,IAAIA,QAAQ,GAAGhB,UAAU;gBAEzB,IAAIiB,gBAAgB,IAAI,CAAClC,aAAa,EAAE;oBACpCiB,UAAU,GAAGE,YAAK,CAACC,IAAI,GAAGZ,gBAAO,CAAC2B,OAAO,CAAC,CAAC,EAAEH,OAAOP,KAAK,GAAGJ,UAAI,CAACC,KAAK,EAAE;gBAC5E,OAAO;oBACHL,UAAU,CAAC,EAAE,EAAEe,OAAOP,KAAK,EAAE;gBACjC;YACJ;QACJ;QAEA,IAAI,CAACW,WAAW,CAACnB;QAEjB,mEAAmE;QACnE,MAAMoB,QAAQpB,OAAOqB,KAAK,CAAC;QAC3B,MAAMC,SAASF,MAAM3B,MAAM;QAE3B,uBAAuB;QACvB,IAAI6B,SAAS,GAAG;YACZ,IAAI,CAACvB,KAAK,CAAC,CAAC,KAAK,EAAEuB,SAAS,EAAE,CAAC,CAAC;QACpC;QAEA,IAAI,CAACvB,KAAK,CAAC,CAAC,EAAE,CAAC;QAEf,MAAMwB,YAAYH,KAAK,CAAC,EAAE;QAC1B,MAAMI,YAAYC,IAAAA,kBAAW,EAAC,IAAI,CAACC,SAAS,CAACH;QAE7C,IAAI,CAACxB,KAAK,CAAC,CAAC,KAAK,EAAEyB,UAAU,CAAC,CAAC;QAC/B,IAAI,CAACzB,KAAK,CAACK,UAAI,CAACuB,WAAW;IAC/B;IAEUC,YAAYC,IAAY,EAAE;QAChC,QAAQ;QACR,IAAIA,SAAS,QAAQA,SAAS,MAAM;YAChC,IAAI,IAAI,CAACjD,OAAO,CAACa,MAAM,GAAG,GAAG;gBACzB,IAAI,CAACqC,MAAM,CAAC,IAAI,CAAClD,OAAO,CAAC,IAAI,CAACG,aAAa,CAAC,CAACgD,KAAK;YACtD;YACA;QACJ;QAEA,YAAY;QACZ,IAAIF,SAAS,YAAYA,SAAS,QAAQ;YACtC,IAAI,IAAI,CAAClD,KAAK,CAACc,MAAM,GAAG,GAAG;gBACvB,IAAI,CAACd,KAAK,GAAG,IAAI,CAACA,KAAK,CAACE,KAAK,CAAC,GAAG,CAAC;gBAClC,IAAI,CAACb,MAAM,CAAC,IAAI,CAACW,KAAK;YAC1B;YACA;QACJ;QAEA,KAAK;QACL,IAAI,IAAI,CAACqD,IAAI,CAACH,OAAO;YACjB,IAAI,IAAI,CAACjD,OAAO,CAACa,MAAM,GAAG,GAAG;gBACzB,IAAI,CAACV,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACH,OAAO,CAACa,MAAM,GAAG;gBAC7F,IAAI,CAACnB,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,OAAO;QACP,IAAI,IAAI,CAAC2D,MAAM,CAACJ,OAAO;YACnB,IAAI,IAAI,CAACjD,OAAO,CAACa,MAAM,GAAG,GAAG;gBACzB,IAAI,CAACV,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACH,OAAO,CAACa,MAAM,GAAG,IAAI,IAAI,CAACV,aAAa,GAAG,IAAI;gBAC7F,IAAI,CAACT,MAAM,CAAC;YAChB;YACA;QACJ;QAEA,SAAS;QACT,IAAIuD,KAAKpC,MAAM,KAAK,KAAK,CAAC,eAAeyC,IAAI,CAACL,OAAO;YACjD,IAAI,CAAClD,KAAK,IAAIkD;YACd,IAAI,CAAC7D,MAAM,CAAC,IAAI,CAACW,KAAK;QAC1B;IACJ;IAEUwD,YAAYC,KAAiB,EAAE;QACrC,IAAI,IAAI,CAACxD,OAAO,CAACa,MAAM,KAAK,GAAG;QAE/B,IAAI2C,MAAMC,MAAM,KAAK,UAAU;YAC3B,IAAID,MAAME,MAAM,KAAK,MAAM;gBACvB,IAAI,CAACvD,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACA,aAAa,GAAG,IAAI,IAAI,CAACH,OAAO,CAACa,MAAM,GAAG;gBAC7F,IAAI,CAACnB,MAAM,CAAC;YAChB,OAAO,IAAI8D,MAAME,MAAM,KAAK,QAAQ;gBAChC,IAAI,CAACvD,aAAa,GAAG,IAAI,CAACA,aAAa,GAAG,IAAI,CAACH,OAAO,CAACa,MAAM,GAAG,IAAI,IAAI,CAACV,aAAa,GAAG,IAAI;gBAC7F,IAAI,CAACT,MAAM,CAAC;YAChB;QACJ;IACJ;IAtKA,YAAYG,OAA+B,CAAE;QACzC,KAAK,CAACA,UAZV,uBAAQE,SAAgB,KACxB,uBAAQC,WAA6B,EAAE,GACvC,uBAAQG,iBAAwB,IAChC,uBAAQX,WAAmB,QAC3B,uBAAQF,iBAAR,KAAA,IACA,uBAAQoB,gBAAuB,IAC/B,uBAAQF,gBAAR,KAAA,IACA,uBAAQJ,aAAoB,IAC5B,uBAAiB4B,YAAmB,IACpC,uBAAQ3B,eAAuB;QAI3B,IAAI,CAACN,KAAK,GAAGF,QAAQ8D,OAAO,IAAI;QAChC,IAAI,CAACvE,MAAM,CAAC,IAAI,CAACW,KAAK;IAC1B;AAmKJ"}