@visulima/cerebro 1.1.15 → 1.1.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,26 @@
1
+ ## @visulima/cerebro [1.1.16](https://github.com/visulima/visulima/compare/@visulima/cerebro@1.1.15...@visulima/cerebro@1.1.16) (2024-08-30)
2
+
3
+ ### Bug Fixes
4
+
5
+ * updated license content ([63e34b3](https://github.com/visulima/visulima/commit/63e34b3a173d0b05b4eea97f85d37f08559559dd))
6
+
7
+ ### Styles
8
+
9
+ * **cerebro:** cs fix ([3965a47](https://github.com/visulima/visulima/commit/3965a4782ef59832b12832dd42962cf2fb4cc524))
10
+
11
+ ### Miscellaneous Chores
12
+
13
+ * updated dev dependencies ([45c2a76](https://github.com/visulima/visulima/commit/45c2a76bc974ecb2c6b172c3af03373d4cc6a5ce))
14
+
15
+
16
+ ### Dependencies
17
+
18
+ * **@visulima/boxen:** upgraded to 1.0.14
19
+ * **@visulima/colorize:** upgraded to 1.4.6
20
+ * **@visulima/find-cache-dir:** upgraded to 1.0.7
21
+ * **@visulima/pail:** upgraded to 2.1.5
22
+ * **@visulima/path:** upgraded to 1.0.5
23
+
1
24
  ## @visulima/cerebro [1.1.15](https://github.com/visulima/visulima/compare/@visulima/cerebro@1.1.14...@visulima/cerebro@1.1.15) (2024-08-08)
2
25
 
3
26
  ### Bug Fixes
package/LICENSE.md CHANGED
@@ -33,19 +33,19 @@ By: Daniel Bannert
33
33
  Repository: git+https://github.com/visulima/visulima.git
34
34
 
35
35
  > MIT License
36
- >
36
+ >
37
37
  > Copyright (c) 2024 visulima
38
- >
38
+ >
39
39
  > Permission is hereby granted, free of charge, to any person obtaining a copy
40
40
  > of this software and associated documentation files (the "Software"), to deal
41
41
  > in the Software without restriction, including without limitation the rights
42
42
  > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
43
43
  > copies of the Software, and to permit persons to whom the Software is
44
44
  > furnished to do so, subject to the following conditions:
45
- >
45
+ >
46
46
  > The above copyright notice and this permission notice shall be included in all
47
47
  > copies or substantial portions of the Software.
48
- >
48
+ >
49
49
  > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
50
50
  > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
51
51
  > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -53,23 +53,23 @@ Repository: git+https://github.com/visulima/visulima.git
53
53
  > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
54
54
  > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
55
55
  > SOFTWARE.
56
- >
56
+ >
57
57
  > ---
58
- >
58
+ >
59
59
  > MIT License
60
- >
60
+ >
61
61
  > Copyright (c) Pooya Parsa <pooya@pi0.io> - Daniel Roe <daniel@roe.dev>
62
- >
62
+ >
63
63
  > Permission is hereby granted, free of charge, to any person obtaining a copy
64
64
  > of this software and associated documentation files (the "Software"), to deal
65
65
  > in the Software without restriction, including without limitation the rights
66
66
  > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
67
67
  > copies of the Software, and to permit persons to whom the Software is
68
68
  > furnished to do so, subject to the following conditions:
69
- >
69
+ >
70
70
  > The above copyright notice and this permission notice shall be included in all
71
71
  > copies or substantial portions of the Software.
72
- >
72
+ >
73
73
  > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
74
74
  > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
75
75
  > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
@@ -77,11 +77,11 @@ Repository: git+https://github.com/visulima/visulima.git
77
77
  > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
78
78
  > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
79
79
  > SOFTWARE.
80
- >
80
+ >
81
81
  > ---
82
- >
82
+ >
83
83
  > Copyright Joyent, Inc. and other Node contributors.
84
- >
84
+ >
85
85
  > Permission is hereby granted, free of charge, to any person obtaining a
86
86
  > copy of this software and associated documentation files (the
87
87
  > "Software"), to deal in the Software without restriction, including
@@ -89,10 +89,10 @@ Repository: git+https://github.com/visulima/visulima.git
89
89
  > distribute, sublicense, and/or sell copies of the Software, and to permit
90
90
  > persons to whom the Software is furnished to do so, subject to the
91
91
  > following conditions:
92
- >
92
+ >
93
93
  > The above copyright notice and this permission notice shall be included
94
94
  > in all copies or substantial portions of the Software.
95
- >
95
+ >
96
96
  > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
97
97
  > OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
98
98
  > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
@@ -100,19 +100,19 @@ Repository: git+https://github.com/visulima/visulima.git
100
100
  > DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
101
101
  > OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
102
102
  > USE OR OTHER DEALINGS IN THE SOFTWARE.
103
- >
104
- > <!-- DEPENDENCIES -->
105
- >
103
+ >
104
+ >
105
+ >
106
106
  > # Licenses of bundled dependencies
107
107
  > The published @visulima/path artifact additionally contains code with the following licenses:
108
108
  > MIT
109
- >
109
+ >
110
110
  > # Bundled dependencies:
111
111
  > ## binary-extensions
112
112
  > License: MIT
113
113
  > By: Sindre Sorhus
114
114
  > Repository: sindresorhus/binary-extensions
115
- >
115
+ >
116
116
  > > MIT License
117
117
  > >
118
118
  > > Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
@@ -123,11 +123,6 @@ Repository: git+https://github.com/visulima/visulima.git
123
123
  > > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
124
124
  > >
125
125
  > > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
126
- >
127
- > <!-- DEPENDENCIES -->
128
- >
129
- > <!-- TYPE_DEPENDENCIES -->
130
- > <!-- TYPE_DEPENDENCIES -->
131
126
 
132
127
  ---------------------------------------
133
128
 
@@ -137,162 +132,13 @@ By: Sindre Sorhus
137
132
  Repository: sindresorhus/camelcase
138
133
 
139
134
  > MIT License
140
- >
135
+ >
141
136
  > Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
142
- >
137
+ >
143
138
  > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
144
- >
139
+ >
145
140
  > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
146
- >
147
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
148
-
149
- <!-- DEPENDENCIES -->
150
- >
151
- > # Licenses of bundled dependencies
152
- > The published @visulima/path artifact additionally contains code with the following licenses:
153
- > MIT
154
- >
155
- > # Bundled dependencies:
156
- > ## binary-extensions
157
- > License: MIT
158
- > By: Sindre Sorhus
159
- > Repository: sindresorhus/binary-extensions
160
- >
161
- > > MIT License
162
- > >
163
- > > Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
164
- > > Copyright (c) Paul Miller (https://paulmillr.com)
165
- > >
166
- > > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
167
- > >
168
- > > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
169
- > >
170
- > > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
171
- >
172
- > <!-- DEPENDENCIES -->
173
-
174
- # Licenses of bundled dependencies
175
- The published @visulima/cerebro artifact additionally contains code with the following licenses:
176
- MIT
177
-
178
- # Bundled dependencies:
179
- ## @visulima/path
180
- License: MIT
181
- By: Daniel Bannert
182
- Repository: git+https://github.com/visulima/visulima.git
183
-
184
- > MIT License
185
- >
186
- > Copyright (c) 2024 visulima
187
- >
188
- > Permission is hereby granted, free of charge, to any person obtaining a copy
189
- > of this software and associated documentation files (the "Software"), to deal
190
- > in the Software without restriction, including without limitation the rights
191
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
192
- > copies of the Software, and to permit persons to whom the Software is
193
- > furnished to do so, subject to the following conditions:
194
- >
195
- > The above copyright notice and this permission notice shall be included in all
196
- > copies or substantial portions of the Software.
197
- >
198
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
199
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
200
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
201
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
202
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
203
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
204
- > SOFTWARE.
205
- >
206
- > ---
207
- >
208
- > MIT License
209
- >
210
- > Copyright (c) Pooya Parsa <pooya@pi0.io> - Daniel Roe <daniel@roe.dev>
211
- >
212
- > Permission is hereby granted, free of charge, to any person obtaining a copy
213
- > of this software and associated documentation files (the "Software"), to deal
214
- > in the Software without restriction, including without limitation the rights
215
- > to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
216
- > copies of the Software, and to permit persons to whom the Software is
217
- > furnished to do so, subject to the following conditions:
218
- >
219
- > The above copyright notice and this permission notice shall be included in all
220
- > copies or substantial portions of the Software.
221
- >
222
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
223
- > IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
224
- > FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
225
- > AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
226
- > LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
227
- > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
228
- > SOFTWARE.
229
- >
230
- > ---
231
- >
232
- > Copyright Joyent, Inc. and other Node contributors.
233
- >
234
- > Permission is hereby granted, free of charge, to any person obtaining a
235
- > copy of this software and associated documentation files (the
236
- > "Software"), to deal in the Software without restriction, including
237
- > without limitation the rights to use, copy, modify, merge, publish,
238
- > distribute, sublicense, and/or sell copies of the Software, and to permit
239
- > persons to whom the Software is furnished to do so, subject to the
240
- > following conditions:
241
- >
242
- > The above copyright notice and this permission notice shall be included
243
- > in all copies or substantial portions of the Software.
244
- >
245
- > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
246
- > OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
247
- > MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
248
- > NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
249
- > DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
250
- > OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
251
- > USE OR OTHER DEALINGS IN THE SOFTWARE.
252
- >
253
- > <!-- DEPENDENCIES -->
254
- >
255
- > # Licenses of bundled dependencies
256
- > The published @visulima/path artifact additionally contains code with the following licenses:
257
- > MIT
258
- >
259
- > # Bundled dependencies:
260
- > ## binary-extensions
261
- > License: MIT
262
- > By: Sindre Sorhus
263
- > Repository: sindresorhus/binary-extensions
264
- >
265
- > > MIT License
266
- > >
267
- > > Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
268
- > > Copyright (c) Paul Miller (https://paulmillr.com)
269
- > >
270
- > > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
271
- > >
272
- > > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
273
- > >
274
- > > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
275
- >
276
- > <!-- DEPENDENCIES -->
277
- >
278
- > <!-- TYPE_DEPENDENCIES -->
279
- > <!-- TYPE_DEPENDENCIES -->
280
-
281
- ---------------------------------------
282
-
283
- ## camelcase
284
- License: MIT
285
- By: Sindre Sorhus
286
- Repository: sindresorhus/camelcase
287
-
288
- > MIT License
289
- >
290
- > Copyright (c) Sindre Sorhus <sindresorhus@gmail.com> (https://sindresorhus.com)
291
- >
292
- > Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
293
- >
294
- > The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
295
- >
141
+ >
296
142
  > THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
297
143
 
298
144
  <!-- DEPENDENCIES -->
package/dist/index.cjs CHANGED
@@ -1,10 +1 @@
1
- "use strict";var ee=Object.create;var x=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var ne=Object.getOwnPropertyNames;var oe=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var c=(t,e)=>x(t,"name",{value:e,configurable:!0});var ae=(t,e,n,o)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of ne(e))!re.call(t,r)&&r!==n&&x(t,r,{get:()=>e[r],enumerable:!(o=te(e,r))||o.enumerable});return t};var se=(t,e,n)=>(n=t!=null?ee(oe(t)):{},ae(e||!t||!t.__esModule?x(n,"default",{value:t,enumerable:!0}):n,t));const p=require("node:process"),ie=require("@visulima/boxen"),v=require("@visulima/colorize"),j=require("@visulima/pail/processor"),le=require("@visulima/pail/server"),ce=require("command-line-args"),pe=require("cli-table3"),de=require("@visulima/colorize/template"),me=require("node:os"),ue=require("fastest-levenshtein"),A=c(t=>t&&typeof t=="object"&&"default"in t?t.default:t,"_interopDefaultCompat"),ge=A(ce),O=A(pe),he=A(de),fe=A(me),ve=/[\p{Lu}]/u,ye=/[\p{Ll}]/u,V=/^[\p{Lu}](?![\p{Lu}])/gu,Y=/([\p{Alpha}\p{N}_]|$)/u,P=/[_.\- ]+/,be=new RegExp("^"+P.source),B=new RegExp(P.source+Y.source,"gu"),U=new RegExp("\\d+"+Y.source,"gu"),$e=c((t,e,n,o)=>{let r=!1,a=!1,s=!1,i=!1;for(let l=0;l<t.length;l++){const d=t[l];i=l>2?t[l-3]==="-":!0,r&&ve.test(d)?(t=t.slice(0,l)+"-"+t.slice(l),r=!1,s=a,a=!0,l++):a&&s&&ye.test(d)&&(!i||o)?(t=t.slice(0,l-1)+"-"+t.slice(l-1),s=a,a=!1,r=!0):(r=e(d)===d&&n(d)!==d,s=a,a=n(d)===d&&e(d)!==d)}return t},"preserveCamelCase"),Ee=c((t,e)=>(V.lastIndex=0,t.replaceAll(V,n=>e(n))),"preserveConsecutiveUppercase"),we=c((t,e)=>(B.lastIndex=0,U.lastIndex=0,t.replaceAll(U,(n,o,r)=>["_","-"].includes(t.charAt(r+n.length))?n:e(n)).replaceAll(B,(n,o)=>e(o))),"postProcess");function Oe(t,e){if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");if(e={pascalCase:!1,preserveConsecutiveUppercase:!1,...e},Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0)return"";const n=e.locale===!1?a=>a.toLowerCase():a=>a.toLocaleLowerCase(e.locale),o=e.locale===!1?a=>a.toUpperCase():a=>a.toLocaleUpperCase(e.locale);return t.length===1?P.test(t)?"":e.pascalCase?o(t):n(t):(t!==n(t)&&(t=$e(t,n,o,e.preserveConsecutiveUppercase)),t=t.replace(be,""),t=e.preserveConsecutiveUppercase?Ee(t,n):n(t),e.pascalCase&&(t=o(t.charAt(0))+t.slice(1)),we(t,o))}c(Oe,"camelCase");const C=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var Ce=Object.defineProperty,Ae=c((t,e)=>Ce(t,"name",{value:e,configurable:!0}),"e$4");const m=Ae(t=>t?he(Object.assign([],{raw:[t.replaceAll("`","\\`")]})):"","templateFormat");var _e=Object.defineProperty,Ne=c((t,e)=>_e(t,"name",{value:e,configurable:!0}),"t$6");let W=class{static{c(this,"n")}static{Ne(this,"BaseSection")}lines;constructor(){this.lines=[]}add(e){this.lines.push(e)}toString(){return this.lines.join(fe.EOL)}header(e){this.add(v.bold(e)),this.lines.push("")}};var Le=Object.defineProperty,xe=c((t,e)=>Le(t,"name",{value:e,configurable:!0}),"p$4");const E={chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,60],style:{border:[],compact:!0,head:[],"padding-left":2,"padding-right":1},wordWrap:!0};let Re=class extends W{static{c(this,"y")}static{xe(this,"ContentSection")}constructor(e){if(super(),e.header&&this.header(m(e.header)),e.content){if(e.raw)if(Array.isArray(e.content)&&e.content.every(n=>typeof n=="string"))e.content.forEach(n=>{Array.isArray(n)?n.forEach(o=>this.add(m(o))):this.add(m(n))});else if(typeof e.content=="string")this.add(m(e.content));else throw new TypeError("Invalid raw content, must be a string or array of strings.");else this.add(this.getContentLines(e.content));this.add("")}}getContentLines(e){if(typeof e=="string"){const n=new O({...E,colWidths:[80]});return n.push([m(e)]),n.toString()}if(Array.isArray(e)&&e.every(n=>typeof n=="string"||Array.isArray(n)&&n.every(o=>typeof o=="string"))){const n=new O({...E});return e.forEach(o=>{Array.isArray(o)?n.push(o.map(r=>m(r))):n.push([m(o)])}),n.toString()}if(typeof e=="object"){const n=e;if(!n.options||!n.data)throw new Error(`Must have an "options" or "data" property
2
- ${JSON.stringify(e)}`);const o=new O({...E,...n.options,style:{...E.style,...n.options.style}});return n.data.forEach(r=>{Array.isArray(r)?o.push(r.map(a=>m(a))):o.push([m(r)])}),o.toString()}throw new Error(`invalid input - 'content' must be a string, array of strings or a object:
3
-
4
- ${JSON.stringify(e)}`)}};var Se=Object.defineProperty,Pe=c((t,e)=>Se(t,"name",{value:e,configurable:!0}),"a$1");let Te=class extends W{static{c(this,"c")}static{Pe(this,"OptionListSection")}constructor(e){super();let n=e.optionList??[];const o=Array.isArray(e.hide)?e.hide:[e.hide].filter(Boolean),r=Array.isArray(e.group)?e.group:[e.group].filter(Boolean);o.length>0&&(n=n.filter(s=>!o.includes(s.name))),e.header&&this.header(m(e.header)),r.length>0&&(n=n.filter(s=>{const i=r.includes("_none")&&!s.group,l=this.intersect(Array.isArray(s.group)?s.group:[s.group],r);return i||l?s:void 0}));const a=new O({chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,40],style:{"padding-left":2,"padding-right":1},wordWrap:!0});n.forEach(s=>a.push([this.getOptionNames(s,e.reverseNameOrder??!1,e.isArgument??!1),m(s.description)])),this.add(a.toString()),this.lines.push("")}getOptionNames(e,n,o){if(!e.name)throw new TypeError("Invalid option definition, name is required.");let r=e.type?e.type.name.toLowerCase():"string";const a=e.multiple||e.lazyMultiple?"[]":"";r=m(e.typeLabel??`{underline ${r}${a}}`);let s;if(e.alias)if(e.name){const i=o?e.name:`{yellow --${e.name}}`;s=m(n?`{bold ${i}}, {bold -${e.alias}} ${r}`:`{bold -${e.alias}}, {bold ${i}} ${r}`)}else n?s=m(`{bold -${e.alias}} ${r}`):s=m(`{bold -${e.alias}} ${r}`);else s=m(`{bold ${o?e.name:`{yellow --${e.name}}`}} ${r}`);return s}intersect(e,n){return e.some(o=>n.includes(o))}};var Ie=Object.defineProperty,je=c((t,e)=>Ie(t,"name",{value:e,configurable:!0}),"o$3");const H=je(t=>(Array.isArray(t)?t:[t]).length===0?"":`
5
- ${t.map(e=>e.optionList?new Te(e).toString():new Re(e).toString()).join(`
6
- `)}`,"commandLineUsage");var Ve=Object.defineProperty,_=c((t,e)=>Ve(t,"name",{value:e,configurable:!0}),"l$5");const k="__Other",D=_(t=>t.charAt(0).toUpperCase()+t.slice(1),"upperFirstChar"),Be=_((t,e,n,o)=>{t.debug("no command given, printing general help...");let r=[...new Set(n.values())].filter(s=>!s.hidden);o&&(r=r.filter(s=>s.group===o));const a=r.reduce((s,i)=>{const l=i.group??k;return s[l]||(s[l]=[]),s[l].push(i),s},{});t.raw(H([{content:`{cyan ${e.getCliName()}} {green <command>} [positional arguments] {yellow [options]}`,header:"{inverse.cyan Usage }"},...Object.keys(a).map(s=>({content:a[s].map(i=>{let l="";return typeof i.alias=="string"?l=i.alias:Array.isArray(i.alias)&&(l=i.alias.join(", ")),l!==""&&(l=` [${l}]`),[`{green ${i.name}} ${l}`,i.description??""]}),header:s===k||o?`{inverse.green Available${o?` ${D(o)}`:""} Commands }`:` {inverse.green ${D(s)} }`})),n.has("help")?{header:"{inverse.yellow Command Options }",optionList:n.get("help").options?.filter(s=>!s.hidden)}:void 0,{header:"{inverse.yellow Global Options }",optionList:C},{content:`Run "{cyan ${e.getCliName()}} {green help <command>}" or "{cyan ${e.getCliName()}} {green <command>} {yellow --help}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),Ue=_((t,e,n,o)=>{const r=n.get(o),a=[];if(a.push({content:`{cyan ${e.getCliName()}} {green ${r.name}}${r.argument?" [positional arguments]":""}${r.options?" [options]":""}`,header:"{inverse.cyan Usage }"}),r.description&&a.push({content:r.description,header:"{inverse.green Description }"}),r.argument&&a.push({header:"Command Positional Arguments",isArgument:!0,optionList:[r.argument]}),Array.isArray(r.options)&&r.options.length>0&&a.push({header:"{inverse.yellow Command Options }",optionList:r.options.filter(s=>!s.hidden)}),a.push({header:"{inverse.yellow Global Options }",optionList:C}),r.alias!==void 0&&r.alias.length>0){let s=r.alias;typeof r.alias=="string"&&(s=[r.alias]),a.splice(1,0,{content:s,header:"Alias(es)"})}Array.isArray(r.examples)&&r.examples.length>0&&a.push({content:r.examples,header:"Examples"}),t.raw(H(a))},"printCommandHelp");class ke{static{c(this,"C")}static{_(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands;constructor(e){this.commands=e}execute(e){const{commandName:n,logger:o,options:r,runtime:a}=e,{footer:s,header:i}=a.getCommandSection();i&&o.raw(m(i)),n==="help"?Be(o,a,this.commands,r?.group):Ue(o,a,this.commands,n),s&&o.raw(m(s))}}var De=Object.defineProperty,qe=c((t,e)=>De(t,"name",{value:e,configurable:!0}),"s$7");const Me={alias:["v","V"],description:"Output the version number",execute:qe(({logger:t,runtime:e})=>{const n=e.getPackageVersion();n===void 0?(t.warn("Unknown version"),t.debug("The version number was not provided by the cli constructor.")):t.info(n)},"execute"),name:"version",options:[],usage:[]},q=16,Fe=32,Ge=64,R=128,w="positionals";var Ye=Object.defineProperty,We=c((t,e)=>Ye(t,"name",{value:e,configurable:!0}),"m$2");let He=class{static{c(this,"c")}static{We(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;runtime;logger;constructor(e,n){this.commandName=e,this.command=n}};var Je=Object.defineProperty,ze=c((t,e)=>Je(t,"name",{value:e,configurable:!0}),"s$6");const Ke=ze(()=>{const t=process.env.CEREBRO_MIN_NODE_VERSION?Number(process.env.CEREBRO_MIN_NODE_VERSION):18,e=process.version.replace("v","");Number(/v([^.]+)/.exec(process.version)[1])<t&&(console.log(`cerebro supports a minimum Node version of ${t}. You have ${e}. Read our version support policy: https://github.com/visulima/visulima#supported-nodejs-versions`),process.exit(1))},"checkNodeVersion");var Qe=Object.defineProperty,Xe=c((t,e)=>Qe(t,"name",{value:e,configurable:!0}),"r$4");const Ze=/^-{1,2}(\w+)(=(\w+))?$/,J=Xe((t,e)=>{const n=Ze.exec(t);if(n==null)return{};const o=n[1],r=e.find(a=>a.name===o||a.alias===o);return r!==void 0?{argName:r.name,argValue:n[3],option:r}:{}},"getParameterOption");var et=Object.defineProperty,tt=c((t,e)=>et(t,"name",{value:e,configurable:!0}),"i$3");const b=tt(t=>t.type?.name==="Boolean","isBoolean");var nt=Object.defineProperty,S=c((t,e)=>nt(t,"name",{value:e,configurable:!0}),"n$2");const M=S((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),ot=new Set(["1","0","true","false"]),rt=S((t,e)=>{const n=S((o,r)=>{const{argName:a,argValue:s,option:i}=J(r,e),{lastOption:l}=o;return i&&b(i)&&s&&a?o.partial[a]=M(s,i):o.lastName&&l&&b(l)&&ot.has(r)&&(o.partial[o.lastName]=M(r,l)),{lastName:a,lastOption:i,partial:o.partial}},"getBooleanValue");return t.reduce(n,{partial:{}}).partial},"getBooleanValues");var at=Object.defineProperty,z=c((t,e)=>at(t,"name",{value:e,configurable:!0}),"p$1");const st=z(t=>{let e=t.type?t.type.name.toLowerCase():"string";const n=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${n}}`),e},"getTypeLabel"),it=z(t=>(b(t)||(t.typeLabel=t.typeLabel??st(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var lt=Object.defineProperty,F=c((t,e)=>lt(t,"name",{value:e,configurable:!0}),"s$3");const ct=new Set(["1","0","true","false"]),pt=F((t,e)=>{const n=F((o,r)=>{const{argValue:a,option:s}=J(r,e),{lastOption:i}=o;if(i&&b(i)&&ct.has(r)){const l=[...o.args];return l.pop(),{args:l}}return s&&b(s)&&a?{args:o.args}:{args:[...o.args,r],lastOption:s}},"removeBooleanArguments");return t.reduce(n,{args:[]}).args},"removeBooleanValues");var dt=Object.defineProperty,K=c((t,e)=>dt(t,"name",{value:e,configurable:!0}),"e$2");const mt=new RegExp(/^-([^\d-])$/),ut=new RegExp(/^--(\S+)/),gt=new RegExp(/^-([^\d-]{2,})$/),ht=K(t=>mt.test(t)||ut.test(t)||gt.test(t),"isOption"),ft=K((t,e)=>{const n=e[0]&&ht(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(n)){const o=new Error(`Command not recognised: ${n}`);throw o.command=n,o.name="INVALID_COMMAND",o}return{argv:e,command:n}},"commandLineCommands");var vt=Object.defineProperty,Q=c((t,e)=>vt(t,"name",{value:e,configurable:!0}),"i$1");const yt=Q((t,e)=>ue.distance(t,e)<=t.length/3||e.includes(t),"isSimilar"),G=Q((t,e)=>{const n=t.toLowerCase();return e.filter(o=>yt(o.toLowerCase(),n))},"findAlternatives");var bt=Object.defineProperty,$t=c((t,e)=>bt(t,"name",{value:e,configurable:!0}),"t$3");const Et=$t((t,e)=>t.filter(n=>n.required&&e[n.name]==null).filter(n=>n.type?.name==="Boolean"?(e[n.name]=!1,!1):!0),"listMissingArguments");var wt=Object.defineProperty,Ot=c((t,e)=>wt(t,"name",{value:e,configurable:!0}),"t$2");const Ct=Ot(t=>{const e=new Map;return t.forEach(n=>{e.set(n.name,{...e.get(n.name),...n})}),[...e.values()]},"mergeArguments");var At=Object.defineProperty,N=c((t,e)=>At(t,"name",{value:e,configurable:!0}),"e$1");const _t=N(()=>!!process.versions.electron,"isElectronApp"),Nt=N(()=>_t()&&!process.defaultApp,"isBundledElectronApp"),Lt=N(()=>Nt()?0:1,"getProcessArgvBinIndex"),xt=N(t=>t.slice(Lt()+1),"hideBin");var Rt=Object.defineProperty,X=c((t,e)=>Rt(t,"name",{value:e,configurable:!0}),"i");const St=" ",Pt=X((t,e)=>t.length===e.length&&t.every((n,o)=>n===e[o]),"equals"),Tt=X(t=>typeof t=="string"?t.split(St):Pt(t,process.argv)?xt(t):t,"parseRawCommand");var It=Object.defineProperty,jt=c((t,e)=>It(t,"name",{value:e,configurable:!0}),"t");const Vt=jt(t=>{process.on("uncaughtException",e=>{t.error(`Uncaught exception: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)}),process.on("unhandledRejection",e=>{t.error(`Promise rejection: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)})},"registerExceptionHandler");var Bt=Object.defineProperty,y=c((t,e)=>Bt(t,"name",{value:e,configurable:!0}),"g");const Ut="CI"in p.env&&("GITHUB_ACTIONS"in p.env||"GITLAB_CI"in p.env||"CIRCLECI"in p.env),kt=y(t=>t.charAt(0).toLowerCase()+t.slice(1),"lowerFirstChar");class Dt{static{c(this,"Cli")}static{y(this,"Cli")}logger;argv;cwd;cliName;packageVersion;packageName;extensions=[];commands;defaultCommand;updateNotifierOptions;commandSection;constructor(e,n={}){const{argv:o,cwd:r,packageName:a,packageVersion:s}={argv:p.argv,cwd:p.cwd(),...n};this.argv=Tt(o),this.argv.includes("--quiet")||this.argv.includes("-q")?p.env.CEREBRO_OUTPUT_LEVEL=String(q):this.argv.includes("--verbose")||this.argv.includes("-v")?p.env.CEREBRO_OUTPUT_LEVEL=String(Ge):this.argv.includes("--debug")||this.argv.includes("-vvv")||"DEBUG"in p.env?p.env.CEREBRO_OUTPUT_LEVEL=String(R):p.env.CEREBRO_OUTPUT_LEVEL=String(Fe);const i={32:"informational",64:"trace",128:"debug"},l=[new j.MessageFormatterProcessor];p.env.CEREBRO_OUTPUT_LEVEL===String(R)&&l.push(new j.CallerProcessor),this.logger=le.createPail({logLevel:p.env.CEREBRO_OUTPUT_LEVEL?i[p.env.CEREBRO_OUTPUT_LEVEL]??"informational":"informational",processors:l,...n.logger}),p.env.CEREBRO_OUTPUT_LEVEL===String(q)&&this.logger.disable(),Ke(),Vt(this.logger),this.cliName=e,this.packageVersion=s,this.packageName=a,this.cwd=r,this.defaultCommand="help",this.commandSection={header:`${this.cliName}${this.packageVersion?` v${this.packageVersion}`:""}`},this.commands=new Map,this.addCoreExtensions(),this.addCommand(Me),this.addCommand(new ke(this.commands))}setCommandSection(e){return this.commandSection=e,this}getCommandSection(){return this.commandSection}setDefaultCommand(e){return this.defaultCommand=e,this}addCommand(e){if(this.commands.has(e.name))throw new Error(`Ignored command with name "${e.name}", it was found in the command list.`);if(e.options?.map(n=>it(n)),this.validateDoubleOptions(e),this.addNegatableOption(e),e.options?.forEach(n=>{n.__camelCaseName__=Oe(n.name)}),this.commands.set(e.name,e),e.alias!==void 0){let n=e.alias;typeof e.alias=="string"&&(n=[e.alias]),n.forEach(o=>{if(this.logger.debug("adding alias",o),this.commands.has(o))throw new Error(`Ignoring command alias "${o}, command with the same name was found."`);this.commands.set(o,e)})}return this}addExtension(e){return this.extensions.push(e),this}enableUpdateNotifier(e={}){if(!this.packageName||!this.packageVersion)throw new Error("Cannot enable update notifier without package name and version.");const n=Object.keys(e);if(n.length>0&&!n.includes("alwaysRun")&&!n.includes("distTag")&&!n.includes("updateCheckInterval"))throw new Error("Invalid update notifier options, please check the documentation.");return this.updateNotifierOptions={alwaysRun:!1,debug:p.env.CEREBRO_OUTPUT_LEVEL===String(R),distTag:"latest",pkg:{name:this.packageName,version:this.packageVersion},updateCheckInterval:1e3*60*60*24,...e},this}getCliName(){return this.cliName}getPackageVersion(){return this.packageVersion}getPackageName(){return this.packageName}getCommands(){return this.commands}getCwd(){return this.cwd}async run(e={}){const{shouldExitProcess:n=!0,...o}=e,r=[...this.commands.keys()];let a;this.logger.debug(`process.execPath: ${p.execPath}`),this.logger.debug(`process.execArgv: ${p.execArgv.join(" ")}`),this.logger.debug(`process.argv: ${p.argv.join(" ")}`);try{a=ft([null,...r],this.argv)}catch(h){if(h.name==="INVALID_COMMAND"&&h.command){let T="";const I=G(h.command,[...this.commands.keys()]);I.length>0&&(T=` Did you mean: \r
7
- - ${I.join(` \r
8
- - `)}`),this.logger.error(`"${h.command}" is not an available command.${T}`)}else this.logger.error(h);return n?p.exit(1):void 0}const s=a.command??this.defaultCommand,i=this.commands.get(s);if(typeof i.execute!="function")return this.logger.error(`Command "${i.name}" has no function to execute.`),n?p.exit(1):void 0;const l=a.argv;this.logger.debug(`command '${s}' found, parsing command args: ${l.join(", ")}`);let d=Ct([...i.options??[],...C]);d.forEach(h=>{if(h.multiple&&h.lazyMultiple)throw new Error(`Argument "${h.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}),i.argument&&(this.logger.debug("command has positional argument, parsing them..."),d=[{defaultOption:!0,description:i.argument?.description,group:"positionals",multiple:!0,name:w,type:i.argument?.type,typeLabel:i.argument?.typeLabel},...d]);const g=ge(d,{argv:pt(l,i.options??[]),camelCase:!0,partial:!0,stopAtFirstUnknown:!0}),$=rt(l,i.options??[]),f={...g,_all:{...g._all,...$}};this.validateCommandOptions(d,f,i);const u=new He(i.name,i);u.runtime=this,await this.registerExtensions(u),await this.updateNotifier(u);const{_all:L,positionals:Z}=f;return L[w]&&delete L[w],u.argument=Z?.[w]??[],u.argv=this.argv,u.options={...L,...o},this.mapNegatableOptions(u,i),this.mapImpliesOptions(u,i),this.validateCommandArgsForConflicts(d,u.options,i),this.logger.debug("command options parsed from options:"),this.logger.debug(JSON.stringify(u.options,null,2)),this.logger.debug("command argument parsed from argument:"),this.logger.debug(JSON.stringify(u.argument,null,2)),await this.prepareToolboxResult(f,u,i),n?p.exit(0):void 0}validateDoubleOptions(e){if(Array.isArray(e.options)){const n=e.options.reduce((a,s)=>{const i=`${s.name}-${s.alias}`;return a[i]||(a[i]=[]),a[i].push(s),a},{}),o=Object.values(n).filter(a=>a.length>1);let r="";if(o.forEach(a=>{const s=a[0],i=a[1];let l="alias";s.name===i.name&&(l="name",s.alias===i.alias&&(l+=" and alias")),r+=`Cannot add option ${l} "${JSON.stringify(i)}" to command "${e.name}" due to conflicting option ${JSON.stringify(s)}
9
- `}),r.length>0)throw new Error(r)}}addCoreExtensions(){this.addExtension({execute:y(e=>{e.logger=this.logger},"execute"),name:"logger"})}async prepareToolboxResult(e,n,o){if(e.global?.help){this.logger.debug("'--help' option found, running 'help' for given command...");const r=this.commands.get("help");if(!r)throw new Error("Help command not found.");await r.execute(n);return}if(e.global?.version||e.global?.V){this.logger.debug("'--version' option found, running 'version' for given command...");const r=this.commands.get("version");if(!r)throw new Error("Version command not found.");await r.execute(n);return}await o.execute(n)}async updateNotifier({logger:e}){if(this.updateNotifierOptions?.alwaysRun||!(p.env.NO_UPDATE_NOTIFIER||p.env.NODE_ENV==="test"||this.argv.includes("--no-update-notifier")||Ut)&&this.updateNotifierOptions){e.raw("Checking for updates...");const n=await(await import("./chunks/has-new-version.cjs").then(o=>o.default))(this.updateNotifierOptions);if(n){const o="Update available "+v.dim(this.packageVersion+"")+v.reset(" → ")+v.green(n);this.logger.error(ie.boxen(o,{borderColor:y(r=>v.yellow(r),"borderColor"),borderStyle:"round",margin:1,padding:1,textAlignment:"center"}))}}}validateCommandOptions(e,n,o){const r=Et(e,n);if(r.length>0)throw new Error(`You called the command "${o.name}" without the required options: ${r.map(a=>a.name).join(", ")}`);if(n._unknown&&n._unknown.length>0){const a=[];if(n._unknown.forEach(s=>{const i=s.startsWith("--");let l=`Found unknown ${i?"option":"argument"} "${s}"`;if(i){const d=G(s.replace("--",""),[...(o.options??[]).map(g=>g.name),...C.map(g=>g.name)]);if(d.length>0){const[g,...$]=d.map(f=>`--${f}`);l+=$.length>0?`, did you mean ${g} or ${$.join(", ")}?`:`, did you mean ${g}?`}}a.push(l)}),a.length>0)throw new Error(a.join(`
10
- `))}}validateCommandArgsForConflicts(e,n,o){const r=e.filter(a=>a.conflicts!==void 0);if(r.length>0){const a=r.find(s=>Array.isArray(s.conflicts)?s.conflicts.some(i=>n[i]!==void 0)&&n[s.name]!==void 0:n[s.conflicts]!==void 0&&n[s.name]!==void 0);if(a)throw new Error(`You called the command "${o.name}" with conflicting options: ${a.name} and ${typeof a.conflicts=="string"?a.conflicts:a.conflicts?.join(", ")}`)}}addNegatableOption(e){Array.isArray(e.options)&&e.options.forEach(n=>{if(n.name.startsWith("no-")&&!e.options.some(o=>o.name===n.name.replace("no-",""))){if(n.type!==Boolean){this.logger.debug(`Cannot add negated option "${n.name}" to command "${e.name}" because it is not a boolean.`);return}const o={...n,defaultValue:n.defaultValue===void 0?!0:!n.defaultValue,name:`${n.name.replace("no-","")}`};e.options.push(o)}})}async registerExtensions(e){const n=y(async o=>typeof o.execute!="function"?(this.logger.warn(`Skipped ${o.name} because execute is not a function.`),null):(await o.execute(e),null),"callback");for(const o of this.extensions)await n(o)}mapNegatableOptions(e,n){Object.entries(e.options).forEach(([o,r])=>{if(/^no\w+/.test(o)){const a=kt(o.replace("no",""));this.logger.debug(`mapping negated option "${o}" to "${a}"`),e.options[a]=!r,n.options?.forEach(s=>{s.name===a&&(s.__negated__=!0)})}})}mapImpliesOptions(e,n){Object.keys(e.options).forEach(o=>{const r=n.options?.find(a=>a.__camelCaseName__===o&&a.__negated__===void 0&&a.implies!==void 0);if(r?.implies){const a=r.implies;Object.entries(a).forEach(([s,i])=>{if(e.options[s]===void 0)e.options[s]=i;else{const l=n.options?.find(d=>d.name===s);(l?.defaultValue===void 0||e.options[s]===l.defaultValue)&&(e.options[s]=i)}})}})}}module.exports=Dt;
1
+ "use strict";const e=require("./shared/default-BqcirQec.cjs");module.exports=e.Cli;
package/dist/index.mjs CHANGED
@@ -1,10 +1 @@
1
- var X=Object.defineProperty;var c=(t,e)=>X(t,"name",{value:e,configurable:!0});import{argv as T,cwd as Z,env as d,execPath as ee,execArgv as te,exit as L}from"node:process";import{boxen as oe}from"@visulima/boxen";import{bold as ne,dim as re,reset as ae,green as se,yellow as ie}from"@visulima/colorize";import{MessageFormatterProcessor as le,CallerProcessor as ce}from"@visulima/pail/processor";import{createPail as pe}from"@visulima/pail/server";import me from"command-line-args";import w from"cli-table3";import de from"@visulima/colorize/template";import ge from"node:os";import{distance as ue}from"fastest-levenshtein";const he=/[\p{Lu}]/u,fe=/[\p{Ll}]/u,I=/^[\p{Lu}](?![\p{Lu}])/gu,q=/([\p{Alpha}\p{N}_]|$)/u,R=/[_.\- ]+/,ve=new RegExp("^"+R.source),j=new RegExp(R.source+q.source,"gu"),V=new RegExp("\\d+"+q.source,"gu"),ye=c((t,e,o,n)=>{let a=!1,r=!1,s=!1,i=!1;for(let l=0;l<t.length;l++){const p=t[l];i=l>2?t[l-3]==="-":!0,a&&he.test(p)?(t=t.slice(0,l)+"-"+t.slice(l),a=!1,s=r,r=!0,l++):r&&s&&fe.test(p)&&(!i||n)?(t=t.slice(0,l-1)+"-"+t.slice(l-1),s=r,r=!1,a=!0):(a=e(p)===p&&o(p)!==p,s=r,r=o(p)===p&&e(p)!==p)}return t},"preserveCamelCase"),be=c((t,e)=>(I.lastIndex=0,t.replaceAll(I,o=>e(o))),"preserveConsecutiveUppercase"),$e=c((t,e)=>(j.lastIndex=0,V.lastIndex=0,t.replaceAll(V,(o,n,a)=>["_","-"].includes(t.charAt(a+o.length))?o:e(o)).replaceAll(j,(o,n)=>e(n))),"postProcess");function Ee(t,e){if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");if(e={pascalCase:!1,preserveConsecutiveUppercase:!1,...e},Array.isArray(t)?t=t.map(r=>r.trim()).filter(r=>r.length).join("-"):t=t.trim(),t.length===0)return"";const o=e.locale===!1?r=>r.toLowerCase():r=>r.toLocaleLowerCase(e.locale),n=e.locale===!1?r=>r.toUpperCase():r=>r.toLocaleUpperCase(e.locale);return t.length===1?R.test(t)?"":e.pascalCase?n(t):o(t):(t!==o(t)&&(t=ye(t,o,n,e.preserveConsecutiveUppercase)),t=t.replace(ve,""),t=e.preserveConsecutiveUppercase?be(t,o):o(t),e.pascalCase&&(t=n(t.charAt(0))+t.slice(1)),$e(t,n))}c(Ee,"camelCase");const O=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var we=Object.defineProperty,Oe=c((t,e)=>we(t,"name",{value:e,configurable:!0}),"e$4");const m=Oe(t=>t?de(Object.assign([],{raw:[t.replaceAll("`","\\`")]})):"","templateFormat");var Ce=Object.defineProperty,Ae=c((t,e)=>Ce(t,"name",{value:e,configurable:!0}),"t$6");let G=class{static{c(this,"n")}static{Ae(this,"BaseSection")}lines;constructor(){this.lines=[]}add(e){this.lines.push(e)}toString(){return this.lines.join(ge.EOL)}header(e){this.add(ne(e)),this.lines.push("")}};var Ne=Object.defineProperty,Le=c((t,e)=>Ne(t,"name",{value:e,configurable:!0}),"p$4");const $={chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,60],style:{border:[],compact:!0,head:[],"padding-left":2,"padding-right":1},wordWrap:!0};let _e=class extends G{static{c(this,"y")}static{Le(this,"ContentSection")}constructor(e){if(super(),e.header&&this.header(m(e.header)),e.content){if(e.raw)if(Array.isArray(e.content)&&e.content.every(o=>typeof o=="string"))e.content.forEach(o=>{Array.isArray(o)?o.forEach(n=>this.add(m(n))):this.add(m(o))});else if(typeof e.content=="string")this.add(m(e.content));else throw new TypeError("Invalid raw content, must be a string or array of strings.");else this.add(this.getContentLines(e.content));this.add("")}}getContentLines(e){if(typeof e=="string"){const o=new w({...$,colWidths:[80]});return o.push([m(e)]),o.toString()}if(Array.isArray(e)&&e.every(o=>typeof o=="string"||Array.isArray(o)&&o.every(n=>typeof n=="string"))){const o=new w({...$});return e.forEach(n=>{Array.isArray(n)?o.push(n.map(a=>m(a))):o.push([m(n)])}),o.toString()}if(typeof e=="object"){const o=e;if(!o.options||!o.data)throw new Error(`Must have an "options" or "data" property
2
- ${JSON.stringify(e)}`);const n=new w({...$,...o.options,style:{...$.style,...o.options.style}});return o.data.forEach(a=>{Array.isArray(a)?n.push(a.map(r=>m(r))):n.push([m(a)])}),n.toString()}throw new Error(`invalid input - 'content' must be a string, array of strings or a object:
3
-
4
- ${JSON.stringify(e)}`)}};var xe=Object.defineProperty,Re=c((t,e)=>xe(t,"name",{value:e,configurable:!0}),"a$1");let Se=class extends G{static{c(this,"c")}static{Re(this,"OptionListSection")}constructor(e){super();let o=e.optionList??[];const n=Array.isArray(e.hide)?e.hide:[e.hide].filter(Boolean),a=Array.isArray(e.group)?e.group:[e.group].filter(Boolean);n.length>0&&(o=o.filter(s=>!n.includes(s.name))),e.header&&this.header(m(e.header)),a.length>0&&(o=o.filter(s=>{const i=a.includes("_none")&&!s.group,l=this.intersect(Array.isArray(s.group)?s.group:[s.group],a);return i||l?s:void 0}));const r=new w({chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,40],style:{"padding-left":2,"padding-right":1},wordWrap:!0});o.forEach(s=>r.push([this.getOptionNames(s,e.reverseNameOrder??!1,e.isArgument??!1),m(s.description)])),this.add(r.toString()),this.lines.push("")}getOptionNames(e,o,n){if(!e.name)throw new TypeError("Invalid option definition, name is required.");let a=e.type?e.type.name.toLowerCase():"string";const r=e.multiple||e.lazyMultiple?"[]":"";a=m(e.typeLabel??`{underline ${a}${r}}`);let s;if(e.alias)if(e.name){const i=n?e.name:`{yellow --${e.name}}`;s=m(o?`{bold ${i}}, {bold -${e.alias}} ${a}`:`{bold -${e.alias}}, {bold ${i}} ${a}`)}else o?s=m(`{bold -${e.alias}} ${a}`):s=m(`{bold -${e.alias}} ${a}`);else s=m(`{bold ${n?e.name:`{yellow --${e.name}}`}} ${a}`);return s}intersect(e,o){return e.some(n=>o.includes(n))}};var Pe=Object.defineProperty,Te=c((t,e)=>Pe(t,"name",{value:e,configurable:!0}),"o$3");const Y=Te(t=>(Array.isArray(t)?t:[t]).length===0?"":`
5
- ${t.map(e=>e.optionList?new Se(e).toString():new _e(e).toString()).join(`
6
- `)}`,"commandLineUsage");var Ie=Object.defineProperty,C=c((t,e)=>Ie(t,"name",{value:e,configurable:!0}),"l$5");const B="__Other",U=C(t=>t.charAt(0).toUpperCase()+t.slice(1),"upperFirstChar"),je=C((t,e,o,n)=>{t.debug("no command given, printing general help...");let a=[...new Set(o.values())].filter(s=>!s.hidden);n&&(a=a.filter(s=>s.group===n));const r=a.reduce((s,i)=>{const l=i.group??B;return s[l]||(s[l]=[]),s[l].push(i),s},{});t.raw(Y([{content:`{cyan ${e.getCliName()}} {green <command>} [positional arguments] {yellow [options]}`,header:"{inverse.cyan Usage }"},...Object.keys(r).map(s=>({content:r[s].map(i=>{let l="";return typeof i.alias=="string"?l=i.alias:Array.isArray(i.alias)&&(l=i.alias.join(", ")),l!==""&&(l=` [${l}]`),[`{green ${i.name}} ${l}`,i.description??""]}),header:s===B||n?`{inverse.green Available${n?` ${U(n)}`:""} Commands }`:` {inverse.green ${U(s)} }`})),o.has("help")?{header:"{inverse.yellow Command Options }",optionList:o.get("help").options?.filter(s=>!s.hidden)}:void 0,{header:"{inverse.yellow Global Options }",optionList:O},{content:`Run "{cyan ${e.getCliName()}} {green help <command>}" or "{cyan ${e.getCliName()}} {green <command>} {yellow --help}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),Ve=C((t,e,o,n)=>{const a=o.get(n),r=[];if(r.push({content:`{cyan ${e.getCliName()}} {green ${a.name}}${a.argument?" [positional arguments]":""}${a.options?" [options]":""}`,header:"{inverse.cyan Usage }"}),a.description&&r.push({content:a.description,header:"{inverse.green Description }"}),a.argument&&r.push({header:"Command Positional Arguments",isArgument:!0,optionList:[a.argument]}),Array.isArray(a.options)&&a.options.length>0&&r.push({header:"{inverse.yellow Command Options }",optionList:a.options.filter(s=>!s.hidden)}),r.push({header:"{inverse.yellow Global Options }",optionList:O}),a.alias!==void 0&&a.alias.length>0){let s=a.alias;typeof a.alias=="string"&&(s=[a.alias]),r.splice(1,0,{content:s,header:"Alias(es)"})}Array.isArray(a.examples)&&a.examples.length>0&&r.push({content:a.examples,header:"Examples"}),t.raw(Y(r))},"printCommandHelp");class Be{static{c(this,"C")}static{C(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands;constructor(e){this.commands=e}execute(e){const{commandName:o,logger:n,options:a,runtime:r}=e,{footer:s,header:i}=r.getCommandSection();i&&n.raw(m(i)),o==="help"?je(n,r,this.commands,a?.group):Ve(n,r,this.commands,o),s&&n.raw(m(s))}}var Ue=Object.defineProperty,ke=c((t,e)=>Ue(t,"name",{value:e,configurable:!0}),"s$7");const De={alias:["v","V"],description:"Output the version number",execute:ke(({logger:t,runtime:e})=>{const o=e.getPackageVersion();o===void 0?(t.warn("Unknown version"),t.debug("The version number was not provided by the cli constructor.")):t.info(o)},"execute"),name:"version",options:[],usage:[]},k=16,Me=32,Fe=64,_=128,E="positionals";var qe=Object.defineProperty,Ge=c((t,e)=>qe(t,"name",{value:e,configurable:!0}),"m$2");let Ye=class{static{c(this,"c")}static{Ge(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;runtime;logger;constructor(e,o){this.commandName=e,this.command=o}};var We=Object.defineProperty,He=c((t,e)=>We(t,"name",{value:e,configurable:!0}),"s$6");const Je=He(()=>{const t=process.env.CEREBRO_MIN_NODE_VERSION?Number(process.env.CEREBRO_MIN_NODE_VERSION):18,e=process.version.replace("v","");Number(/v([^.]+)/.exec(process.version)[1])<t&&(console.log(`cerebro supports a minimum Node version of ${t}. You have ${e}. Read our version support policy: https://github.com/visulima/visulima#supported-nodejs-versions`),process.exit(1))},"checkNodeVersion");var ze=Object.defineProperty,Ke=c((t,e)=>ze(t,"name",{value:e,configurable:!0}),"r$4");const Qe=/^-{1,2}(\w+)(=(\w+))?$/,W=Ke((t,e)=>{const o=Qe.exec(t);if(o==null)return{};const n=o[1],a=e.find(r=>r.name===n||r.alias===n);return a!==void 0?{argName:a.name,argValue:o[3],option:a}:{}},"getParameterOption");var Xe=Object.defineProperty,Ze=c((t,e)=>Xe(t,"name",{value:e,configurable:!0}),"i$3");const y=Ze(t=>t.type?.name==="Boolean","isBoolean");var et=Object.defineProperty,x=c((t,e)=>et(t,"name",{value:e,configurable:!0}),"n$2");const D=x((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),tt=new Set(["1","0","true","false"]),ot=x((t,e)=>{const o=x((n,a)=>{const{argName:r,argValue:s,option:i}=W(a,e),{lastOption:l}=n;return i&&y(i)&&s&&r?n.partial[r]=D(s,i):n.lastName&&l&&y(l)&&tt.has(a)&&(n.partial[n.lastName]=D(a,l)),{lastName:r,lastOption:i,partial:n.partial}},"getBooleanValue");return t.reduce(o,{partial:{}}).partial},"getBooleanValues");var nt=Object.defineProperty,H=c((t,e)=>nt(t,"name",{value:e,configurable:!0}),"p$1");const rt=H(t=>{let e=t.type?t.type.name.toLowerCase():"string";const o=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${o}}`),e},"getTypeLabel"),at=H(t=>(y(t)||(t.typeLabel=t.typeLabel??rt(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var st=Object.defineProperty,M=c((t,e)=>st(t,"name",{value:e,configurable:!0}),"s$3");const it=new Set(["1","0","true","false"]),lt=M((t,e)=>{const o=M((n,a)=>{const{argValue:r,option:s}=W(a,e),{lastOption:i}=n;if(i&&y(i)&&it.has(a)){const l=[...n.args];return l.pop(),{args:l}}return s&&y(s)&&r?{args:n.args}:{args:[...n.args,a],lastOption:s}},"removeBooleanArguments");return t.reduce(o,{args:[]}).args},"removeBooleanValues");var ct=Object.defineProperty,J=c((t,e)=>ct(t,"name",{value:e,configurable:!0}),"e$2");const pt=new RegExp(/^-([^\d-])$/),mt=new RegExp(/^--(\S+)/),dt=new RegExp(/^-([^\d-]{2,})$/),gt=J(t=>pt.test(t)||mt.test(t)||dt.test(t),"isOption"),ut=J((t,e)=>{const o=e[0]&&gt(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(o)){const n=new Error(`Command not recognised: ${o}`);throw n.command=o,n.name="INVALID_COMMAND",n}return{argv:e,command:o}},"commandLineCommands");var ht=Object.defineProperty,z=c((t,e)=>ht(t,"name",{value:e,configurable:!0}),"i$1");const ft=z((t,e)=>ue(t,e)<=t.length/3||e.includes(t),"isSimilar"),F=z((t,e)=>{const o=t.toLowerCase();return e.filter(n=>ft(n.toLowerCase(),o))},"findAlternatives");var vt=Object.defineProperty,yt=c((t,e)=>vt(t,"name",{value:e,configurable:!0}),"t$3");const bt=yt((t,e)=>t.filter(o=>o.required&&e[o.name]==null).filter(o=>o.type?.name==="Boolean"?(e[o.name]=!1,!1):!0),"listMissingArguments");var $t=Object.defineProperty,Et=c((t,e)=>$t(t,"name",{value:e,configurable:!0}),"t$2");const wt=Et(t=>{const e=new Map;return t.forEach(o=>{e.set(o.name,{...e.get(o.name),...o})}),[...e.values()]},"mergeArguments");var Ot=Object.defineProperty,A=c((t,e)=>Ot(t,"name",{value:e,configurable:!0}),"e$1");const Ct=A(()=>!!process.versions.electron,"isElectronApp"),At=A(()=>Ct()&&!process.defaultApp,"isBundledElectronApp"),Nt=A(()=>At()?0:1,"getProcessArgvBinIndex"),Lt=A(t=>t.slice(Nt()+1),"hideBin");var _t=Object.defineProperty,K=c((t,e)=>_t(t,"name",{value:e,configurable:!0}),"i");const xt=" ",Rt=K((t,e)=>t.length===e.length&&t.every((o,n)=>o===e[n]),"equals"),St=K(t=>typeof t=="string"?t.split(xt):Rt(t,process.argv)?Lt(t):t,"parseRawCommand");var Pt=Object.defineProperty,Tt=c((t,e)=>Pt(t,"name",{value:e,configurable:!0}),"t");const It=Tt(t=>{process.on("uncaughtException",e=>{t.error(`Uncaught exception: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)}),process.on("unhandledRejection",e=>{t.error(`Promise rejection: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)})},"registerExceptionHandler");var jt=Object.defineProperty,v=c((t,e)=>jt(t,"name",{value:e,configurable:!0}),"g");const Vt="CI"in d&&("GITHUB_ACTIONS"in d||"GITLAB_CI"in d||"CIRCLECI"in d),Bt=v(t=>t.charAt(0).toLowerCase()+t.slice(1),"lowerFirstChar");class Zt{static{c(this,"Cli")}static{v(this,"Cli")}logger;argv;cwd;cliName;packageVersion;packageName;extensions=[];commands;defaultCommand;updateNotifierOptions;commandSection;constructor(e,o={}){const{argv:n,cwd:a,packageName:r,packageVersion:s}={argv:T,cwd:Z(),...o};this.argv=St(n),this.argv.includes("--quiet")||this.argv.includes("-q")?d.CEREBRO_OUTPUT_LEVEL=String(k):this.argv.includes("--verbose")||this.argv.includes("-v")?d.CEREBRO_OUTPUT_LEVEL=String(Fe):this.argv.includes("--debug")||this.argv.includes("-vvv")||"DEBUG"in d?d.CEREBRO_OUTPUT_LEVEL=String(_):d.CEREBRO_OUTPUT_LEVEL=String(Me);const i={32:"informational",64:"trace",128:"debug"},l=[new le];d.CEREBRO_OUTPUT_LEVEL===String(_)&&l.push(new ce),this.logger=pe({logLevel:d.CEREBRO_OUTPUT_LEVEL?i[d.CEREBRO_OUTPUT_LEVEL]??"informational":"informational",processors:l,...o.logger}),d.CEREBRO_OUTPUT_LEVEL===String(k)&&this.logger.disable(),Je(),It(this.logger),this.cliName=e,this.packageVersion=s,this.packageName=r,this.cwd=a,this.defaultCommand="help",this.commandSection={header:`${this.cliName}${this.packageVersion?` v${this.packageVersion}`:""}`},this.commands=new Map,this.addCoreExtensions(),this.addCommand(De),this.addCommand(new Be(this.commands))}setCommandSection(e){return this.commandSection=e,this}getCommandSection(){return this.commandSection}setDefaultCommand(e){return this.defaultCommand=e,this}addCommand(e){if(this.commands.has(e.name))throw new Error(`Ignored command with name "${e.name}", it was found in the command list.`);if(e.options?.map(o=>at(o)),this.validateDoubleOptions(e),this.addNegatableOption(e),e.options?.forEach(o=>{o.__camelCaseName__=Ee(o.name)}),this.commands.set(e.name,e),e.alias!==void 0){let o=e.alias;typeof e.alias=="string"&&(o=[e.alias]),o.forEach(n=>{if(this.logger.debug("adding alias",n),this.commands.has(n))throw new Error(`Ignoring command alias "${n}, command with the same name was found."`);this.commands.set(n,e)})}return this}addExtension(e){return this.extensions.push(e),this}enableUpdateNotifier(e={}){if(!this.packageName||!this.packageVersion)throw new Error("Cannot enable update notifier without package name and version.");const o=Object.keys(e);if(o.length>0&&!o.includes("alwaysRun")&&!o.includes("distTag")&&!o.includes("updateCheckInterval"))throw new Error("Invalid update notifier options, please check the documentation.");return this.updateNotifierOptions={alwaysRun:!1,debug:d.CEREBRO_OUTPUT_LEVEL===String(_),distTag:"latest",pkg:{name:this.packageName,version:this.packageVersion},updateCheckInterval:1e3*60*60*24,...e},this}getCliName(){return this.cliName}getPackageVersion(){return this.packageVersion}getPackageName(){return this.packageName}getCommands(){return this.commands}getCwd(){return this.cwd}async run(e={}){const{shouldExitProcess:o=!0,...n}=e,a=[...this.commands.keys()];let r;this.logger.debug(`process.execPath: ${ee}`),this.logger.debug(`process.execArgv: ${te.join(" ")}`),this.logger.debug(`process.argv: ${T.join(" ")}`);try{r=ut([null,...a],this.argv)}catch(h){if(h.name==="INVALID_COMMAND"&&h.command){let S="";const P=F(h.command,[...this.commands.keys()]);P.length>0&&(S=` Did you mean: \r
7
- - ${P.join(` \r
8
- - `)}`),this.logger.error(`"${h.command}" is not an available command.${S}`)}else this.logger.error(h);return o?L(1):void 0}const s=r.command??this.defaultCommand,i=this.commands.get(s);if(typeof i.execute!="function")return this.logger.error(`Command "${i.name}" has no function to execute.`),o?L(1):void 0;const l=r.argv;this.logger.debug(`command '${s}' found, parsing command args: ${l.join(", ")}`);let p=wt([...i.options??[],...O]);p.forEach(h=>{if(h.multiple&&h.lazyMultiple)throw new Error(`Argument "${h.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}),i.argument&&(this.logger.debug("command has positional argument, parsing them..."),p=[{defaultOption:!0,description:i.argument?.description,group:"positionals",multiple:!0,name:E,type:i.argument?.type,typeLabel:i.argument?.typeLabel},...p]);const u=me(p,{argv:lt(l,i.options??[]),camelCase:!0,partial:!0,stopAtFirstUnknown:!0}),b=ot(l,i.options??[]),f={...u,_all:{...u._all,...b}};this.validateCommandOptions(p,f,i);const g=new Ye(i.name,i);g.runtime=this,await this.registerExtensions(g),await this.updateNotifier(g);const{_all:N,positionals:Q}=f;return N[E]&&delete N[E],g.argument=Q?.[E]??[],g.argv=this.argv,g.options={...N,...n},this.mapNegatableOptions(g,i),this.mapImpliesOptions(g,i),this.validateCommandArgsForConflicts(p,g.options,i),this.logger.debug("command options parsed from options:"),this.logger.debug(JSON.stringify(g.options,null,2)),this.logger.debug("command argument parsed from argument:"),this.logger.debug(JSON.stringify(g.argument,null,2)),await this.prepareToolboxResult(f,g,i),o?L(0):void 0}validateDoubleOptions(e){if(Array.isArray(e.options)){const o=e.options.reduce((r,s)=>{const i=`${s.name}-${s.alias}`;return r[i]||(r[i]=[]),r[i].push(s),r},{}),n=Object.values(o).filter(r=>r.length>1);let a="";if(n.forEach(r=>{const s=r[0],i=r[1];let l="alias";s.name===i.name&&(l="name",s.alias===i.alias&&(l+=" and alias")),a+=`Cannot add option ${l} "${JSON.stringify(i)}" to command "${e.name}" due to conflicting option ${JSON.stringify(s)}
9
- `}),a.length>0)throw new Error(a)}}addCoreExtensions(){this.addExtension({execute:v(e=>{e.logger=this.logger},"execute"),name:"logger"})}async prepareToolboxResult(e,o,n){if(e.global?.help){this.logger.debug("'--help' option found, running 'help' for given command...");const a=this.commands.get("help");if(!a)throw new Error("Help command not found.");await a.execute(o);return}if(e.global?.version||e.global?.V){this.logger.debug("'--version' option found, running 'version' for given command...");const a=this.commands.get("version");if(!a)throw new Error("Version command not found.");await a.execute(o);return}await n.execute(o)}async updateNotifier({logger:e}){if(this.updateNotifierOptions?.alwaysRun||!(d.NO_UPDATE_NOTIFIER||d.NODE_ENV==="test"||this.argv.includes("--no-update-notifier")||Vt)&&this.updateNotifierOptions){e.raw("Checking for updates...");const o=await(await import("./chunks/has-new-version.mjs").then(n=>n.default))(this.updateNotifierOptions);if(o){const n="Update available "+re(this.packageVersion+"")+ae(" → ")+se(o);this.logger.error(oe(n,{borderColor:v(a=>ie(a),"borderColor"),borderStyle:"round",margin:1,padding:1,textAlignment:"center"}))}}}validateCommandOptions(e,o,n){const a=bt(e,o);if(a.length>0)throw new Error(`You called the command "${n.name}" without the required options: ${a.map(r=>r.name).join(", ")}`);if(o._unknown&&o._unknown.length>0){const r=[];if(o._unknown.forEach(s=>{const i=s.startsWith("--");let l=`Found unknown ${i?"option":"argument"} "${s}"`;if(i){const p=F(s.replace("--",""),[...(n.options??[]).map(u=>u.name),...O.map(u=>u.name)]);if(p.length>0){const[u,...b]=p.map(f=>`--${f}`);l+=b.length>0?`, did you mean ${u} or ${b.join(", ")}?`:`, did you mean ${u}?`}}r.push(l)}),r.length>0)throw new Error(r.join(`
10
- `))}}validateCommandArgsForConflicts(e,o,n){const a=e.filter(r=>r.conflicts!==void 0);if(a.length>0){const r=a.find(s=>Array.isArray(s.conflicts)?s.conflicts.some(i=>o[i]!==void 0)&&o[s.name]!==void 0:o[s.conflicts]!==void 0&&o[s.name]!==void 0);if(r)throw new Error(`You called the command "${n.name}" with conflicting options: ${r.name} and ${typeof r.conflicts=="string"?r.conflicts:r.conflicts?.join(", ")}`)}}addNegatableOption(e){Array.isArray(e.options)&&e.options.forEach(o=>{if(o.name.startsWith("no-")&&!e.options.some(n=>n.name===o.name.replace("no-",""))){if(o.type!==Boolean){this.logger.debug(`Cannot add negated option "${o.name}" to command "${e.name}" because it is not a boolean.`);return}const n={...o,defaultValue:o.defaultValue===void 0?!0:!o.defaultValue,name:`${o.name.replace("no-","")}`};e.options.push(n)}})}async registerExtensions(e){const o=v(async n=>typeof n.execute!="function"?(this.logger.warn(`Skipped ${n.name} because execute is not a function.`),null):(await n.execute(e),null),"callback");for(const n of this.extensions)await o(n)}mapNegatableOptions(e,o){Object.entries(e.options).forEach(([n,a])=>{if(/^no\w+/.test(n)){const r=Bt(n.replace("no",""));this.logger.debug(`mapping negated option "${n}" to "${r}"`),e.options[r]=!a,o.options?.forEach(s=>{s.name===r&&(s.__negated__=!0)})}})}mapImpliesOptions(e,o){Object.keys(e.options).forEach(n=>{const a=o.options?.find(r=>r.__camelCaseName__===n&&r.__negated__===void 0&&r.implies!==void 0);if(a?.implies){const r=a.implies;Object.entries(r).forEach(([s,i])=>{if(e.options[s]===void 0)e.options[s]=i;else{const l=o.options?.find(p=>p.name===s);(l?.defaultValue===void 0||e.options[s]===l.defaultValue)&&(e.options[s]=i)}})}})}}export{Zt as default};
1
+ import{C as f}from"./shared/default-CAx52jvz.mjs";export{f as default};
@@ -0,0 +1,10 @@
1
+ "use strict";var ee=Object.create;var x=Object.defineProperty;var te=Object.getOwnPropertyDescriptor;var oe=Object.getOwnPropertyNames;var ne=Object.getPrototypeOf,re=Object.prototype.hasOwnProperty;var c=(t,e)=>x(t,"name",{value:e,configurable:!0});var ae=(t,e,o,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let r of oe(e))!re.call(t,r)&&r!==o&&x(t,r,{get:()=>e[r],enumerable:!(n=te(e,r))||n.enumerable});return t};var se=(t,e,o)=>(o=t!=null?ee(ne(t)):{},ae(e||!t||!t.__esModule?x(o,"default",{value:t,enumerable:!0}):o,t));Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("node:process"),ie=require("@visulima/boxen"),v=require("@visulima/colorize"),j=require("@visulima/pail/processor"),le=require("@visulima/pail/server"),ce=require("command-line-args"),pe=require("cli-table3"),de=require("@visulima/colorize/template"),me=require("node:os"),ue=require("fastest-levenshtein"),A=c(t=>t&&typeof t=="object"&&"default"in t?t.default:t,"_interopDefaultCompat"),ge=A(ce),O=A(pe),he=A(de),fe=A(me),ve=/[\p{Lu}]/u,ye=/[\p{Ll}]/u,V=/^[\p{Lu}](?![\p{Lu}])/gu,Y=/([\p{Alpha}\p{N}_]|$)/u,P=/[_.\- ]+/,be=new RegExp("^"+P.source),B=new RegExp(P.source+Y.source,"gu"),U=new RegExp("\\d+"+Y.source,"gu"),$e=c((t,e,o,n)=>{let r=!1,a=!1,s=!1,i=!1;for(let l=0;l<t.length;l++){const d=t[l];i=l>2?t[l-3]==="-":!0,r&&ve.test(d)?(t=t.slice(0,l)+"-"+t.slice(l),r=!1,s=a,a=!0,l++):a&&s&&ye.test(d)&&(!i||n)?(t=t.slice(0,l-1)+"-"+t.slice(l-1),s=a,a=!1,r=!0):(r=e(d)===d&&o(d)!==d,s=a,a=o(d)===d&&e(d)!==d)}return t},"preserveCamelCase"),Ee=c((t,e)=>(V.lastIndex=0,t.replaceAll(V,o=>e(o))),"preserveConsecutiveUppercase"),we=c((t,e)=>(B.lastIndex=0,U.lastIndex=0,t.replaceAll(U,(o,n,r)=>["_","-"].includes(t.charAt(r+o.length))?o:e(o)).replaceAll(B,(o,n)=>e(n))),"postProcess");function Oe(t,e){if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");if(e={pascalCase:!1,preserveConsecutiveUppercase:!1,...e},Array.isArray(t)?t=t.map(a=>a.trim()).filter(a=>a.length).join("-"):t=t.trim(),t.length===0)return"";const o=e.locale===!1?a=>a.toLowerCase():a=>a.toLocaleLowerCase(e.locale),n=e.locale===!1?a=>a.toUpperCase():a=>a.toLocaleUpperCase(e.locale);return t.length===1?P.test(t)?"":e.pascalCase?n(t):o(t):(t!==o(t)&&(t=$e(t,o,n,e.preserveConsecutiveUppercase)),t=t.replace(be,""),t=e.preserveConsecutiveUppercase?Ee(t,o):o(t),e.pascalCase&&(t=n(t.charAt(0))+t.slice(1)),we(t,n))}c(Oe,"camelCase");const C=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var Ce=Object.defineProperty,Ae=c((t,e)=>Ce(t,"name",{value:e,configurable:!0}),"e$4");const m=Ae(t=>t?he(Object.assign([],{raw:[t.replaceAll("`","\\`")]})):"","templateFormat");var _e=Object.defineProperty,Ne=c((t,e)=>_e(t,"name",{value:e,configurable:!0}),"t$6");let W=class{static{c(this,"n")}static{Ne(this,"BaseSection")}lines;constructor(){this.lines=[]}add(e){this.lines.push(e)}toString(){return this.lines.join(fe.EOL)}header(e){this.add(v.bold(e)),this.lines.push("")}};var Le=Object.defineProperty,xe=c((t,e)=>Le(t,"name",{value:e,configurable:!0}),"p$4");const E={chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,60],style:{border:[],compact:!0,head:[],"padding-left":2,"padding-right":1},wordWrap:!0};let Re=class extends W{static{c(this,"y")}static{xe(this,"ContentSection")}constructor(e){if(super(),e.header&&this.header(m(e.header)),e.content){if(e.raw)if(Array.isArray(e.content)&&e.content.every(o=>typeof o=="string"))e.content.forEach(o=>{Array.isArray(o)?o.forEach(n=>this.add(m(n))):this.add(m(o))});else if(typeof e.content=="string")this.add(m(e.content));else throw new TypeError("Invalid raw content, must be a string or array of strings.");else this.add(this.getContentLines(e.content));this.add("")}}getContentLines(e){if(typeof e=="string"){const o=new O({...E,colWidths:[80]});return o.push([m(e)]),o.toString()}if(Array.isArray(e)&&e.every(o=>typeof o=="string"||Array.isArray(o)&&o.every(n=>typeof n=="string"))){const o=new O({...E});return e.forEach(n=>{Array.isArray(n)?o.push(n.map(r=>m(r))):o.push([m(n)])}),o.toString()}if(typeof e=="object"){const o=e;if(!o.options||!o.data)throw new Error(`Must have an "options" or "data" property
2
+ ${JSON.stringify(e)}`);const n=new O({...E,...o.options,style:{...E.style,...o.options.style}});return o.data.forEach(r=>{Array.isArray(r)?n.push(r.map(a=>m(a))):n.push([m(r)])}),n.toString()}throw new Error(`invalid input - 'content' must be a string, array of strings or a object:
3
+
4
+ ${JSON.stringify(e)}`)}};var Se=Object.defineProperty,Pe=c((t,e)=>Se(t,"name",{value:e,configurable:!0}),"a$1");let Te=class extends W{static{c(this,"c")}static{Pe(this,"OptionListSection")}constructor(e){super();let o=e.optionList??[];const n=Array.isArray(e.hide)?e.hide:[e.hide].filter(Boolean),r=Array.isArray(e.group)?e.group:[e.group].filter(Boolean);n.length>0&&(o=o.filter(s=>!n.includes(s.name))),e.header&&this.header(m(e.header)),r.length>0&&(o=o.filter(s=>{const i=r.includes("_none")&&!s.group,l=this.intersect(Array.isArray(s.group)?s.group:[s.group],r);return i||l?s:void 0}));const a=new O({chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,40],style:{"padding-left":2,"padding-right":1},wordWrap:!0});o.forEach(s=>a.push([this.getOptionNames(s,e.reverseNameOrder??!1,e.isArgument??!1),m(s.description)])),this.add(a.toString()),this.lines.push("")}getOptionNames(e,o,n){if(!e.name)throw new TypeError("Invalid option definition, name is required.");let r=e.type?e.type.name.toLowerCase():"string";const a=e.multiple||e.lazyMultiple?"[]":"";r=m(e.typeLabel??`{underline ${r}${a}}`);let s;if(e.alias)if(e.name){const i=n?e.name:`{yellow --${e.name}}`;s=m(o?`{bold ${i}}, {bold -${e.alias}} ${r}`:`{bold -${e.alias}}, {bold ${i}} ${r}`)}else o?s=m(`{bold -${e.alias}} ${r}`):s=m(`{bold -${e.alias}} ${r}`);else s=m(`{bold ${n?e.name:`{yellow --${e.name}}`}} ${r}`);return s}intersect(e,o){return e.some(n=>o.includes(n))}};var Ie=Object.defineProperty,je=c((t,e)=>Ie(t,"name",{value:e,configurable:!0}),"o$3");const H=je(t=>(Array.isArray(t)?t:[t]).length===0?"":`
5
+ ${t.map(e=>e.optionList?new Te(e).toString():new Re(e).toString()).join(`
6
+ `)}`,"commandLineUsage");var Ve=Object.defineProperty,_=c((t,e)=>Ve(t,"name",{value:e,configurable:!0}),"l$5");const k="__Other",D=_(t=>t.charAt(0).toUpperCase()+t.slice(1),"upperFirstChar"),Be=_((t,e,o,n)=>{t.debug("no command given, printing general help...");let r=[...new Set(o.values())].filter(s=>!s.hidden);n&&(r=r.filter(s=>s.group===n));const a=r.reduce((s,i)=>{const l=i.group??k;return s[l]||(s[l]=[]),s[l].push(i),s},{});t.raw(H([{content:`{cyan ${e.getCliName()}} {green <command>} [positional arguments] {yellow [options]}`,header:"{inverse.cyan Usage }"},...Object.keys(a).map(s=>({content:a[s].map(i=>{let l="";return typeof i.alias=="string"?l=i.alias:Array.isArray(i.alias)&&(l=i.alias.join(", ")),l!==""&&(l=` [${l}]`),[`{green ${i.name}} ${l}`,i.description??""]}),header:s===k||n?`{inverse.green Available${n?` ${D(n)}`:""} Commands }`:` {inverse.green ${D(s)} }`})),o.has("help")?{header:"{inverse.yellow Command Options }",optionList:o.get("help").options?.filter(s=>!s.hidden)}:void 0,{header:"{inverse.yellow Global Options }",optionList:C},{content:`Run "{cyan ${e.getCliName()}} {green help <command>}" or "{cyan ${e.getCliName()}} {green <command>} {yellow --help}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),Ue=_((t,e,o,n)=>{const r=o.get(n),a=[];if(a.push({content:`{cyan ${e.getCliName()}} {green ${r.name}}${r.argument?" [positional arguments]":""}${r.options?" [options]":""}`,header:"{inverse.cyan Usage }"}),r.description&&a.push({content:r.description,header:"{inverse.green Description }"}),r.argument&&a.push({header:"Command Positional Arguments",isArgument:!0,optionList:[r.argument]}),Array.isArray(r.options)&&r.options.length>0&&a.push({header:"{inverse.yellow Command Options }",optionList:r.options.filter(s=>!s.hidden)}),a.push({header:"{inverse.yellow Global Options }",optionList:C}),r.alias!==void 0&&r.alias.length>0){let s=r.alias;typeof r.alias=="string"&&(s=[r.alias]),a.splice(1,0,{content:s,header:"Alias(es)"})}Array.isArray(r.examples)&&r.examples.length>0&&a.push({content:r.examples,header:"Examples"}),t.raw(H(a))},"printCommandHelp");class ke{static{c(this,"C")}static{_(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands;constructor(e){this.commands=e}execute(e){const{commandName:o,logger:n,options:r,runtime:a}=e,{footer:s,header:i}=a.getCommandSection();i&&n.raw(m(i)),o==="help"?Be(n,a,this.commands,r?.group):Ue(n,a,this.commands,o),s&&n.raw(m(s))}}var De=Object.defineProperty,Me=c((t,e)=>De(t,"name",{value:e,configurable:!0}),"s$7");const qe={alias:["v","V"],description:"Output the version number",execute:Me(({logger:t,runtime:e})=>{const o=e.getPackageVersion();o===void 0?(t.warn("Unknown version"),t.debug("The version number was not provided by the cli constructor.")):t.info(o)},"execute"),name:"version",options:[],usage:[]},M=16,Fe=32,Ge=64,R=128,w="positionals";var Ye=Object.defineProperty,We=c((t,e)=>Ye(t,"name",{value:e,configurable:!0}),"m$2");let He=class{static{c(this,"c")}static{We(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;runtime;logger;constructor(e,o){this.commandName=e,this.command=o}};var Je=Object.defineProperty,ze=c((t,e)=>Je(t,"name",{value:e,configurable:!0}),"s$6");const Ke=ze(()=>{const t=process.env.CEREBRO_MIN_NODE_VERSION?Number(process.env.CEREBRO_MIN_NODE_VERSION):18,e=process.version.replace("v","");Number(/v([^.]+)/.exec(process.version)[1])<t&&(console.log(`cerebro supports a minimum Node version of ${t}. You have ${e}. Read our version support policy: https://github.com/visulima/visulima#supported-nodejs-versions`),process.exit(1))},"checkNodeVersion");var Qe=Object.defineProperty,Xe=c((t,e)=>Qe(t,"name",{value:e,configurable:!0}),"r$4");const Ze=/^-{1,2}(\w+)(=(\w+))?$/,J=Xe((t,e)=>{const o=Ze.exec(t);if(o==null)return{};const n=o[1],r=e.find(a=>a.name===n||a.alias===n);return r!==void 0?{argName:r.name,argValue:o[3],option:r}:{}},"getParameterOption");var et=Object.defineProperty,tt=c((t,e)=>et(t,"name",{value:e,configurable:!0}),"i$3");const b=tt(t=>t.type?.name==="Boolean","isBoolean");var ot=Object.defineProperty,S=c((t,e)=>ot(t,"name",{value:e,configurable:!0}),"n$2");const q=S((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),nt=new Set(["1","0","true","false"]),rt=S((t,e)=>{const o=S((n,r)=>{const{argName:a,argValue:s,option:i}=J(r,e),{lastOption:l}=n;return i&&b(i)&&s&&a?n.partial[a]=q(s,i):n.lastName&&l&&b(l)&&nt.has(r)&&(n.partial[n.lastName]=q(r,l)),{lastName:a,lastOption:i,partial:n.partial}},"getBooleanValue");return t.reduce(o,{partial:{}}).partial},"getBooleanValues");var at=Object.defineProperty,z=c((t,e)=>at(t,"name",{value:e,configurable:!0}),"p$1");const st=z(t=>{let e=t.type?t.type.name.toLowerCase():"string";const o=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${o}}`),e},"getTypeLabel"),it=z(t=>(b(t)||(t.typeLabel=t.typeLabel??st(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var lt=Object.defineProperty,F=c((t,e)=>lt(t,"name",{value:e,configurable:!0}),"s$3");const ct=new Set(["1","0","true","false"]),pt=F((t,e)=>{const o=F((n,r)=>{const{argValue:a,option:s}=J(r,e),{lastOption:i}=n;if(i&&b(i)&&ct.has(r)){const l=[...n.args];return l.pop(),{args:l}}return s&&b(s)&&a?{args:n.args}:{args:[...n.args,r],lastOption:s}},"removeBooleanArguments");return t.reduce(o,{args:[]}).args},"removeBooleanValues");var dt=Object.defineProperty,K=c((t,e)=>dt(t,"name",{value:e,configurable:!0}),"e$2");const mt=new RegExp(/^-([^\d-])$/),ut=new RegExp(/^--(\S+)/),gt=new RegExp(/^-([^\d-]{2,})$/),ht=K(t=>mt.test(t)||ut.test(t)||gt.test(t),"isOption"),ft=K((t,e)=>{const o=e[0]&&ht(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(o)){const n=new Error(`Command not recognised: ${o}`);throw n.command=o,n.name="INVALID_COMMAND",n}return{argv:e,command:o}},"commandLineCommands");var vt=Object.defineProperty,Q=c((t,e)=>vt(t,"name",{value:e,configurable:!0}),"i$1");const yt=Q((t,e)=>ue.distance(t,e)<=t.length/3||e.includes(t),"isSimilar"),G=Q((t,e)=>{const o=t.toLowerCase();return e.filter(n=>yt(n.toLowerCase(),o))},"findAlternatives");var bt=Object.defineProperty,$t=c((t,e)=>bt(t,"name",{value:e,configurable:!0}),"t$3");const Et=$t((t,e)=>t.filter(o=>o.required&&e[o.name]==null).filter(o=>o.type?.name==="Boolean"?(e[o.name]=!1,!1):!0),"listMissingArguments");var wt=Object.defineProperty,Ot=c((t,e)=>wt(t,"name",{value:e,configurable:!0}),"t$2");const Ct=Ot(t=>{const e=new Map;return t.forEach(o=>{e.set(o.name,{...e.get(o.name),...o})}),[...e.values()]},"mergeArguments");var At=Object.defineProperty,N=c((t,e)=>At(t,"name",{value:e,configurable:!0}),"e$1");const _t=N(()=>!!process.versions.electron,"isElectronApp"),Nt=N(()=>_t()&&!process.defaultApp,"isBundledElectronApp"),Lt=N(()=>Nt()?0:1,"getProcessArgvBinIndex"),xt=N(t=>t.slice(Lt()+1),"hideBin");var Rt=Object.defineProperty,X=c((t,e)=>Rt(t,"name",{value:e,configurable:!0}),"i");const St=" ",Pt=X((t,e)=>t.length===e.length&&t.every((o,n)=>o===e[n]),"equals"),Tt=X(t=>typeof t=="string"?t.split(St):Pt(t,process.argv)?xt(t):t,"parseRawCommand");var It=Object.defineProperty,jt=c((t,e)=>It(t,"name",{value:e,configurable:!0}),"t");const Vt=jt(t=>{process.on("uncaughtException",e=>{t.error(`Uncaught exception: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)}),process.on("unhandledRejection",e=>{t.error(`Promise rejection: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)})},"registerExceptionHandler");var Bt=Object.defineProperty,y=c((t,e)=>Bt(t,"name",{value:e,configurable:!0}),"g");const Ut="CI"in p.env&&("GITHUB_ACTIONS"in p.env||"GITLAB_CI"in p.env||"CIRCLECI"in p.env),kt=y(t=>t.charAt(0).toLowerCase()+t.slice(1),"lowerFirstChar");class Dt{static{c(this,"Cli")}static{y(this,"Cli")}logger;argv;cwd;cliName;packageVersion;packageName;extensions=[];commands;defaultCommand;updateNotifierOptions;commandSection;constructor(e,o={}){const{argv:n,cwd:r,packageName:a,packageVersion:s}={argv:p.argv,cwd:p.cwd(),...o};this.argv=Tt(n),this.argv.includes("--quiet")||this.argv.includes("-q")?p.env.CEREBRO_OUTPUT_LEVEL=String(M):this.argv.includes("--verbose")||this.argv.includes("-v")?p.env.CEREBRO_OUTPUT_LEVEL=String(Ge):this.argv.includes("--debug")||this.argv.includes("-vvv")||"DEBUG"in p.env?p.env.CEREBRO_OUTPUT_LEVEL=String(R):p.env.CEREBRO_OUTPUT_LEVEL=String(Fe);const i={32:"informational",64:"trace",128:"debug"},l=[new j.MessageFormatterProcessor];p.env.CEREBRO_OUTPUT_LEVEL===String(R)&&l.push(new j.CallerProcessor),this.logger=le.createPail({logLevel:p.env.CEREBRO_OUTPUT_LEVEL?i[p.env.CEREBRO_OUTPUT_LEVEL]??"informational":"informational",processors:l,...o.logger}),p.env.CEREBRO_OUTPUT_LEVEL===String(M)&&this.logger.disable(),Ke(),Vt(this.logger),this.cliName=e,this.packageVersion=s,this.packageName=a,this.cwd=r,this.defaultCommand="help",this.commandSection={header:`${this.cliName}${this.packageVersion?` v${this.packageVersion}`:""}`},this.commands=new Map,this.addCoreExtensions(),this.addCommand(qe),this.addCommand(new ke(this.commands))}setCommandSection(e){return this.commandSection=e,this}getCommandSection(){return this.commandSection}setDefaultCommand(e){return this.defaultCommand=e,this}addCommand(e){if(this.commands.has(e.name))throw new Error(`Ignored command with name "${e.name}", it was found in the command list.`);if(e.options?.map(o=>it(o)),this.validateDoubleOptions(e),this.addNegatableOption(e),e.options?.forEach(o=>{o.__camelCaseName__=Oe(o.name)}),this.commands.set(e.name,e),e.alias!==void 0){let o=e.alias;typeof e.alias=="string"&&(o=[e.alias]),o.forEach(n=>{if(this.logger.debug("adding alias",n),this.commands.has(n))throw new Error(`Ignoring command alias "${n}, command with the same name was found."`);this.commands.set(n,e)})}return this}addExtension(e){return this.extensions.push(e),this}enableUpdateNotifier(e={}){if(!this.packageName||!this.packageVersion)throw new Error("Cannot enable update notifier without package name and version.");const o=Object.keys(e);if(o.length>0&&!o.includes("alwaysRun")&&!o.includes("distTag")&&!o.includes("updateCheckInterval"))throw new Error("Invalid update notifier options, please check the documentation.");return this.updateNotifierOptions={alwaysRun:!1,debug:p.env.CEREBRO_OUTPUT_LEVEL===String(R),distTag:"latest",pkg:{name:this.packageName,version:this.packageVersion},updateCheckInterval:1e3*60*60*24,...e},this}getCliName(){return this.cliName}getPackageVersion(){return this.packageVersion}getPackageName(){return this.packageName}getCommands(){return this.commands}getCwd(){return this.cwd}async run(e={}){const{shouldExitProcess:o=!0,...n}=e,r=[...this.commands.keys()];let a;this.logger.debug(`process.execPath: ${p.execPath}`),this.logger.debug(`process.execArgv: ${p.execArgv.join(" ")}`),this.logger.debug(`process.argv: ${p.argv.join(" ")}`);try{a=ft([null,...r],this.argv)}catch(h){if(h.name==="INVALID_COMMAND"&&h.command){let T="";const I=G(h.command,[...this.commands.keys()]);I.length>0&&(T=` Did you mean: \r
7
+ - ${I.join(` \r
8
+ - `)}`),this.logger.error(`"${h.command}" is not an available command.${T}`)}else this.logger.error(h);return o?p.exit(1):void 0}const s=a.command??this.defaultCommand,i=this.commands.get(s);if(typeof i.execute!="function")return this.logger.error(`Command "${i.name}" has no function to execute.`),o?p.exit(1):void 0;const l=a.argv;this.logger.debug(`command '${s}' found, parsing command args: ${l.join(", ")}`);let d=Ct([...i.options??[],...C]);d.forEach(h=>{if(h.multiple&&h.lazyMultiple)throw new Error(`Argument "${h.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}),i.argument&&(this.logger.debug("command has positional argument, parsing them..."),d=[{defaultOption:!0,description:i.argument?.description,group:"positionals",multiple:!0,name:w,type:i.argument?.type,typeLabel:i.argument?.typeLabel},...d]);const g=ge(d,{argv:pt(l,i.options??[]),camelCase:!0,partial:!0,stopAtFirstUnknown:!0}),$=rt(l,i.options??[]),f={...g,_all:{...g._all,...$}};this.validateCommandOptions(d,f,i);const u=new He(i.name,i);u.runtime=this,await this.registerExtensions(u),await this.updateNotifier(u);const{_all:L,positionals:Z}=f;return L[w]&&delete L[w],u.argument=Z?.[w]??[],u.argv=this.argv,u.options={...L,...n},this.mapNegatableOptions(u,i),this.mapImpliesOptions(u,i),this.validateCommandArgsForConflicts(d,u.options,i),this.logger.debug("command options parsed from options:"),this.logger.debug(JSON.stringify(u.options,null,2)),this.logger.debug("command argument parsed from argument:"),this.logger.debug(JSON.stringify(u.argument,null,2)),await this.prepareToolboxResult(f,u,i),o?p.exit(0):void 0}validateDoubleOptions(e){if(Array.isArray(e.options)){const o=e.options.reduce((a,s)=>{const i=`${s.name}-${s.alias}`;return a[i]||(a[i]=[]),a[i].push(s),a},{}),n=Object.values(o).filter(a=>a.length>1);let r="";if(n.forEach(a=>{const s=a[0],i=a[1];let l="alias";s.name===i.name&&(l="name",s.alias===i.alias&&(l+=" and alias")),r+=`Cannot add option ${l} "${JSON.stringify(i)}" to command "${e.name}" due to conflicting option ${JSON.stringify(s)}
9
+ `}),r.length>0)throw new Error(r)}}addCoreExtensions(){this.addExtension({execute:y(e=>{e.logger=this.logger},"execute"),name:"logger"})}async prepareToolboxResult(e,o,n){if(e.global?.help){this.logger.debug("'--help' option found, running 'help' for given command...");const r=this.commands.get("help");if(!r)throw new Error("Help command not found.");await r.execute(o);return}if(e.global?.version||e.global?.V){this.logger.debug("'--version' option found, running 'version' for given command...");const r=this.commands.get("version");if(!r)throw new Error("Version command not found.");await r.execute(o);return}await n.execute(o)}async updateNotifier({logger:e}){if(this.updateNotifierOptions?.alwaysRun||!(p.env.NO_UPDATE_NOTIFIER||p.env.NODE_ENV==="test"||this.argv.includes("--no-update-notifier")||Ut)&&this.updateNotifierOptions){e.raw("Checking for updates...");const o=await(await import("../chunks/has-new-version.cjs").then(n=>n.default))(this.updateNotifierOptions);if(o){const n="Update available "+v.dim(this.packageVersion+"")+v.reset(" → ")+v.green(o);this.logger.error(ie.boxen(n,{borderColor:y(r=>v.yellow(r),"borderColor"),borderStyle:"round",margin:1,padding:1,textAlignment:"center"}))}}}validateCommandOptions(e,o,n){const r=Et(e,o);if(r.length>0)throw new Error(`You called the command "${n.name}" without the required options: ${r.map(a=>a.name).join(", ")}`);if(o._unknown&&o._unknown.length>0){const a=[];if(o._unknown.forEach(s=>{const i=s.startsWith("--");let l=`Found unknown ${i?"option":"argument"} "${s}"`;if(i){const d=G(s.replace("--",""),[...(n.options??[]).map(g=>g.name),...C.map(g=>g.name)]);if(d.length>0){const[g,...$]=d.map(f=>`--${f}`);l+=$.length>0?`, did you mean ${g} or ${$.join(", ")}?`:`, did you mean ${g}?`}}a.push(l)}),a.length>0)throw new Error(a.join(`
10
+ `))}}validateCommandArgsForConflicts(e,o,n){const r=e.filter(a=>a.conflicts!==void 0);if(r.length>0){const a=r.find(s=>Array.isArray(s.conflicts)?s.conflicts.some(i=>o[i]!==void 0)&&o[s.name]!==void 0:o[s.conflicts]!==void 0&&o[s.name]!==void 0);if(a)throw new Error(`You called the command "${n.name}" with conflicting options: ${a.name} and ${typeof a.conflicts=="string"?a.conflicts:a.conflicts?.join(", ")}`)}}addNegatableOption(e){Array.isArray(e.options)&&e.options.forEach(o=>{if(o.name.startsWith("no-")&&!e.options.some(n=>n.name===o.name.replace("no-",""))){if(o.type!==Boolean){this.logger.debug(`Cannot add negated option "${o.name}" to command "${e.name}" because it is not a boolean.`);return}const n={...o,defaultValue:o.defaultValue===void 0?!0:!o.defaultValue,name:`${o.name.replace("no-","")}`};e.options.push(n)}})}async registerExtensions(e){const o=y(async n=>typeof n.execute!="function"?(this.logger.warn(`Skipped ${n.name} because execute is not a function.`),null):(await n.execute(e),null),"callback");for(const n of this.extensions)await o(n)}mapNegatableOptions(e,o){Object.entries(e.options).forEach(([n,r])=>{if(/^no\w+/.test(n)){const a=kt(n.replace("no",""));this.logger.debug(`mapping negated option "${n}" to "${a}"`),e.options[a]=!r,o.options?.forEach(s=>{s.name===a&&(s.__negated__=!0)})}})}mapImpliesOptions(e,o){Object.keys(e.options).forEach(n=>{const r=o.options?.find(a=>a.__camelCaseName__===n&&a.__negated__===void 0&&a.implies!==void 0);if(r?.implies){const a=r.implies;Object.entries(a).forEach(([s,i])=>{if(e.options[s]===void 0)e.options[s]=i;else{const l=o.options?.find(d=>d.name===s);(l?.defaultValue===void 0||e.options[s]===l.defaultValue)&&(e.options[s]=i)}})}})}}exports.Cli=Dt;
@@ -0,0 +1,10 @@
1
+ var X=Object.defineProperty;var c=(t,e)=>X(t,"name",{value:e,configurable:!0});import{argv as T,cwd as Z,env as d,execPath as ee,execArgv as te,exit as L}from"node:process";import{boxen as oe}from"@visulima/boxen";import{bold as ne,dim as re,reset as ae,green as se,yellow as ie}from"@visulima/colorize";import{MessageFormatterProcessor as le,CallerProcessor as ce}from"@visulima/pail/processor";import{createPail as pe}from"@visulima/pail/server";import me from"command-line-args";import w from"cli-table3";import de from"@visulima/colorize/template";import ge from"node:os";import{distance as ue}from"fastest-levenshtein";const he=/[\p{Lu}]/u,fe=/[\p{Ll}]/u,I=/^[\p{Lu}](?![\p{Lu}])/gu,q=/([\p{Alpha}\p{N}_]|$)/u,R=/[_.\- ]+/,ve=new RegExp("^"+R.source),j=new RegExp(R.source+q.source,"gu"),V=new RegExp("\\d+"+q.source,"gu"),ye=c((t,e,o,n)=>{let a=!1,r=!1,s=!1,i=!1;for(let l=0;l<t.length;l++){const p=t[l];i=l>2?t[l-3]==="-":!0,a&&he.test(p)?(t=t.slice(0,l)+"-"+t.slice(l),a=!1,s=r,r=!0,l++):r&&s&&fe.test(p)&&(!i||n)?(t=t.slice(0,l-1)+"-"+t.slice(l-1),s=r,r=!1,a=!0):(a=e(p)===p&&o(p)!==p,s=r,r=o(p)===p&&e(p)!==p)}return t},"preserveCamelCase"),be=c((t,e)=>(I.lastIndex=0,t.replaceAll(I,o=>e(o))),"preserveConsecutiveUppercase"),$e=c((t,e)=>(j.lastIndex=0,V.lastIndex=0,t.replaceAll(V,(o,n,a)=>["_","-"].includes(t.charAt(a+o.length))?o:e(o)).replaceAll(j,(o,n)=>e(n))),"postProcess");function Ee(t,e){if(!(typeof t=="string"||Array.isArray(t)))throw new TypeError("Expected the input to be `string | string[]`");if(e={pascalCase:!1,preserveConsecutiveUppercase:!1,...e},Array.isArray(t)?t=t.map(r=>r.trim()).filter(r=>r.length).join("-"):t=t.trim(),t.length===0)return"";const o=e.locale===!1?r=>r.toLowerCase():r=>r.toLocaleLowerCase(e.locale),n=e.locale===!1?r=>r.toUpperCase():r=>r.toLocaleUpperCase(e.locale);return t.length===1?R.test(t)?"":e.pascalCase?n(t):o(t):(t!==o(t)&&(t=ye(t,o,n,e.preserveConsecutiveUppercase)),t=t.replace(ve,""),t=e.preserveConsecutiveUppercase?be(t,o):o(t),e.pascalCase&&(t=n(t.charAt(0))+t.slice(1)),$e(t,n))}c(Ee,"camelCase");const O=[{description:"Turn on verbose output",group:"global",name:"verbose",type:Boolean},{description:"Turn on debugging output",group:"global",name:"debug",type:Boolean},{alias:"h",description:"Print out helpful usage information",group:"global",name:"help",type:Boolean},{alias:"q",description:"Silence output",group:"global",name:"quiet",type:Boolean},{alias:"V",description:"Print version info",group:"global",name:"version",type:Boolean},{description:"Turn off colored output",group:"global",name:"no-color",type:Boolean},{description:"Force colored output",group:"global",name:"color",type:Boolean}];var we=Object.defineProperty,Oe=c((t,e)=>we(t,"name",{value:e,configurable:!0}),"e$4");const m=Oe(t=>t?de(Object.assign([],{raw:[t.replaceAll("`","\\`")]})):"","templateFormat");var Ce=Object.defineProperty,Ae=c((t,e)=>Ce(t,"name",{value:e,configurable:!0}),"t$6");let G=class{static{c(this,"n")}static{Ae(this,"BaseSection")}lines;constructor(){this.lines=[]}add(e){this.lines.push(e)}toString(){return this.lines.join(ge.EOL)}header(e){this.add(ne(e)),this.lines.push("")}};var Ne=Object.defineProperty,Le=c((t,e)=>Ne(t,"name",{value:e,configurable:!0}),"p$4");const $={chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,60],style:{border:[],compact:!0,head:[],"padding-left":2,"padding-right":1},wordWrap:!0};let _e=class extends G{static{c(this,"y")}static{Le(this,"ContentSection")}constructor(e){if(super(),e.header&&this.header(m(e.header)),e.content){if(e.raw)if(Array.isArray(e.content)&&e.content.every(o=>typeof o=="string"))e.content.forEach(o=>{Array.isArray(o)?o.forEach(n=>this.add(m(n))):this.add(m(o))});else if(typeof e.content=="string")this.add(m(e.content));else throw new TypeError("Invalid raw content, must be a string or array of strings.");else this.add(this.getContentLines(e.content));this.add("")}}getContentLines(e){if(typeof e=="string"){const o=new w({...$,colWidths:[80]});return o.push([m(e)]),o.toString()}if(Array.isArray(e)&&e.every(o=>typeof o=="string"||Array.isArray(o)&&o.every(n=>typeof n=="string"))){const o=new w({...$});return e.forEach(n=>{Array.isArray(n)?o.push(n.map(a=>m(a))):o.push([m(n)])}),o.toString()}if(typeof e=="object"){const o=e;if(!o.options||!o.data)throw new Error(`Must have an "options" or "data" property
2
+ ${JSON.stringify(e)}`);const n=new w({...$,...o.options,style:{...$.style,...o.options.style}});return o.data.forEach(a=>{Array.isArray(a)?n.push(a.map(r=>m(r))):n.push([m(a)])}),n.toString()}throw new Error(`invalid input - 'content' must be a string, array of strings or a object:
3
+
4
+ ${JSON.stringify(e)}`)}};var xe=Object.defineProperty,Re=c((t,e)=>xe(t,"name",{value:e,configurable:!0}),"a$1");let Se=class extends G{static{c(this,"c")}static{Re(this,"OptionListSection")}constructor(e){super();let o=e.optionList??[];const n=Array.isArray(e.hide)?e.hide:[e.hide].filter(Boolean),a=Array.isArray(e.group)?e.group:[e.group].filter(Boolean);n.length>0&&(o=o.filter(s=>!n.includes(s.name))),e.header&&this.header(m(e.header)),a.length>0&&(o=o.filter(s=>{const i=a.includes("_none")&&!s.group,l=this.intersect(Array.isArray(s.group)?s.group:[s.group],a);return i||l?s:void 0}));const r=new w({chars:{bottom:"","bottom-left":"","bottom-mid":"","bottom-right":"",left:" ","left-mid":"",mid:"","mid-mid":"",middle:" ",right:"","right-mid":"",top:"","top-left":"","top-mid":"","top-right":""},colWidths:[40,40],style:{"padding-left":2,"padding-right":1},wordWrap:!0});o.forEach(s=>r.push([this.getOptionNames(s,e.reverseNameOrder??!1,e.isArgument??!1),m(s.description)])),this.add(r.toString()),this.lines.push("")}getOptionNames(e,o,n){if(!e.name)throw new TypeError("Invalid option definition, name is required.");let a=e.type?e.type.name.toLowerCase():"string";const r=e.multiple||e.lazyMultiple?"[]":"";a=m(e.typeLabel??`{underline ${a}${r}}`);let s;if(e.alias)if(e.name){const i=n?e.name:`{yellow --${e.name}}`;s=m(o?`{bold ${i}}, {bold -${e.alias}} ${a}`:`{bold -${e.alias}}, {bold ${i}} ${a}`)}else o?s=m(`{bold -${e.alias}} ${a}`):s=m(`{bold -${e.alias}} ${a}`);else s=m(`{bold ${n?e.name:`{yellow --${e.name}}`}} ${a}`);return s}intersect(e,o){return e.some(n=>o.includes(n))}};var Pe=Object.defineProperty,Te=c((t,e)=>Pe(t,"name",{value:e,configurable:!0}),"o$3");const Y=Te(t=>(Array.isArray(t)?t:[t]).length===0?"":`
5
+ ${t.map(e=>e.optionList?new Se(e).toString():new _e(e).toString()).join(`
6
+ `)}`,"commandLineUsage");var Ie=Object.defineProperty,C=c((t,e)=>Ie(t,"name",{value:e,configurable:!0}),"l$5");const B="__Other",U=C(t=>t.charAt(0).toUpperCase()+t.slice(1),"upperFirstChar"),je=C((t,e,o,n)=>{t.debug("no command given, printing general help...");let a=[...new Set(o.values())].filter(s=>!s.hidden);n&&(a=a.filter(s=>s.group===n));const r=a.reduce((s,i)=>{const l=i.group??B;return s[l]||(s[l]=[]),s[l].push(i),s},{});t.raw(Y([{content:`{cyan ${e.getCliName()}} {green <command>} [positional arguments] {yellow [options]}`,header:"{inverse.cyan Usage }"},...Object.keys(r).map(s=>({content:r[s].map(i=>{let l="";return typeof i.alias=="string"?l=i.alias:Array.isArray(i.alias)&&(l=i.alias.join(", ")),l!==""&&(l=` [${l}]`),[`{green ${i.name}} ${l}`,i.description??""]}),header:s===B||n?`{inverse.green Available${n?` ${U(n)}`:""} Commands }`:` {inverse.green ${U(s)} }`})),o.has("help")?{header:"{inverse.yellow Command Options }",optionList:o.get("help").options?.filter(s=>!s.hidden)}:void 0,{header:"{inverse.yellow Global Options }",optionList:O},{content:`Run "{cyan ${e.getCliName()}} {green help <command>}" or "{cyan ${e.getCliName()}} {green <command>} {yellow --help}" for help with a specific command.`,raw:!0}].filter(Boolean)))},"printGeneralHelp"),Ve=C((t,e,o,n)=>{const a=o.get(n),r=[];if(r.push({content:`{cyan ${e.getCliName()}} {green ${a.name}}${a.argument?" [positional arguments]":""}${a.options?" [options]":""}`,header:"{inverse.cyan Usage }"}),a.description&&r.push({content:a.description,header:"{inverse.green Description }"}),a.argument&&r.push({header:"Command Positional Arguments",isArgument:!0,optionList:[a.argument]}),Array.isArray(a.options)&&a.options.length>0&&r.push({header:"{inverse.yellow Command Options }",optionList:a.options.filter(s=>!s.hidden)}),r.push({header:"{inverse.yellow Global Options }",optionList:O}),a.alias!==void 0&&a.alias.length>0){let s=a.alias;typeof a.alias=="string"&&(s=[a.alias]),r.splice(1,0,{content:s,header:"Alias(es)"})}Array.isArray(a.examples)&&a.examples.length>0&&r.push({content:a.examples,header:"Examples"}),t.raw(Y(r))},"printCommandHelp");class Be{static{c(this,"C")}static{C(this,"HelpCommand")}name="help";options=[{description:"Display only the specified group",name:"group",type:String}];commands;constructor(e){this.commands=e}execute(e){const{commandName:o,logger:n,options:a,runtime:r}=e,{footer:s,header:i}=r.getCommandSection();i&&n.raw(m(i)),o==="help"?je(n,r,this.commands,a?.group):Ve(n,r,this.commands,o),s&&n.raw(m(s))}}var Ue=Object.defineProperty,ke=c((t,e)=>Ue(t,"name",{value:e,configurable:!0}),"s$7");const De={alias:["v","V"],description:"Output the version number",execute:ke(({logger:t,runtime:e})=>{const o=e.getPackageVersion();o===void 0?(t.warn("Unknown version"),t.debug("The version number was not provided by the cli constructor.")):t.info(o)},"execute"),name:"version",options:[],usage:[]},k=16,Me=32,Fe=64,_=128,E="positionals";var qe=Object.defineProperty,Ge=c((t,e)=>qe(t,"name",{value:e,configurable:!0}),"m$2");let Ye=class{static{c(this,"c")}static{Ge(this,"EmptyToolbox")}result;argv;options;argument;command;commandName;runtime;logger;constructor(e,o){this.commandName=e,this.command=o}};var We=Object.defineProperty,He=c((t,e)=>We(t,"name",{value:e,configurable:!0}),"s$6");const Je=He(()=>{const t=process.env.CEREBRO_MIN_NODE_VERSION?Number(process.env.CEREBRO_MIN_NODE_VERSION):18,e=process.version.replace("v","");Number(/v([^.]+)/.exec(process.version)[1])<t&&(console.log(`cerebro supports a minimum Node version of ${t}. You have ${e}. Read our version support policy: https://github.com/visulima/visulima#supported-nodejs-versions`),process.exit(1))},"checkNodeVersion");var ze=Object.defineProperty,Ke=c((t,e)=>ze(t,"name",{value:e,configurable:!0}),"r$4");const Qe=/^-{1,2}(\w+)(=(\w+))?$/,W=Ke((t,e)=>{const o=Qe.exec(t);if(o==null)return{};const n=o[1],a=e.find(r=>r.name===n||r.alias===n);return a!==void 0?{argName:a.name,argValue:o[3],option:a}:{}},"getParameterOption");var Xe=Object.defineProperty,Ze=c((t,e)=>Xe(t,"name",{value:e,configurable:!0}),"i$3");const y=Ze(t=>t.type?.name==="Boolean","isBoolean");var et=Object.defineProperty,x=c((t,e)=>et(t,"name",{value:e,configurable:!0}),"n$2");const D=x((t,e)=>{if(e.type===void 0)return t;if(e.type.name==="Boolean"){if(t==="true"||t==="1")return e.type(!0);if(t==="false"||t==="0")return e.type(!1)}return e.type(t)},"convertType"),tt=new Set(["1","0","true","false"]),ot=x((t,e)=>{const o=x((n,a)=>{const{argName:r,argValue:s,option:i}=W(a,e),{lastOption:l}=n;return i&&y(i)&&s&&r?n.partial[r]=D(s,i):n.lastName&&l&&y(l)&&tt.has(a)&&(n.partial[n.lastName]=D(a,l)),{lastName:r,lastOption:i,partial:n.partial}},"getBooleanValue");return t.reduce(o,{partial:{}}).partial},"getBooleanValues");var nt=Object.defineProperty,H=c((t,e)=>nt(t,"name",{value:e,configurable:!0}),"p$1");const rt=H(t=>{let e=t.type?t.type.name.toLowerCase():"string";const o=t.multiple??t.lazyMultiple?"[]":"";return e&&(e=e==="boolean"?"":`{underline ${e}${o}}`),e},"getTypeLabel"),at=H(t=>(y(t)||(t.typeLabel=t.typeLabel??rt(t),t.defaultOption&&(t.typeLabel=`${t.typeLabel} (D)`),t.required&&(t.typeLabel=`${t.typeLabel} (R)`)),t),"mapOptionTypeLabel");var st=Object.defineProperty,M=c((t,e)=>st(t,"name",{value:e,configurable:!0}),"s$3");const it=new Set(["1","0","true","false"]),lt=M((t,e)=>{const o=M((n,a)=>{const{argValue:r,option:s}=W(a,e),{lastOption:i}=n;if(i&&y(i)&&it.has(a)){const l=[...n.args];return l.pop(),{args:l}}return s&&y(s)&&r?{args:n.args}:{args:[...n.args,a],lastOption:s}},"removeBooleanArguments");return t.reduce(o,{args:[]}).args},"removeBooleanValues");var ct=Object.defineProperty,J=c((t,e)=>ct(t,"name",{value:e,configurable:!0}),"e$2");const pt=new RegExp(/^-([^\d-])$/),mt=new RegExp(/^--(\S+)/),dt=new RegExp(/^-([^\d-]{2,})$/),gt=J(t=>pt.test(t)||mt.test(t)||dt.test(t),"isOption"),ut=J((t,e)=>{const o=e[0]&&gt(e[0])||e.length===0?null:e.shift()??null;if(!t.includes(o)){const n=new Error(`Command not recognised: ${o}`);throw n.command=o,n.name="INVALID_COMMAND",n}return{argv:e,command:o}},"commandLineCommands");var ht=Object.defineProperty,z=c((t,e)=>ht(t,"name",{value:e,configurable:!0}),"i$1");const ft=z((t,e)=>ue(t,e)<=t.length/3||e.includes(t),"isSimilar"),F=z((t,e)=>{const o=t.toLowerCase();return e.filter(n=>ft(n.toLowerCase(),o))},"findAlternatives");var vt=Object.defineProperty,yt=c((t,e)=>vt(t,"name",{value:e,configurable:!0}),"t$3");const bt=yt((t,e)=>t.filter(o=>o.required&&e[o.name]==null).filter(o=>o.type?.name==="Boolean"?(e[o.name]=!1,!1):!0),"listMissingArguments");var $t=Object.defineProperty,Et=c((t,e)=>$t(t,"name",{value:e,configurable:!0}),"t$2");const wt=Et(t=>{const e=new Map;return t.forEach(o=>{e.set(o.name,{...e.get(o.name),...o})}),[...e.values()]},"mergeArguments");var Ot=Object.defineProperty,A=c((t,e)=>Ot(t,"name",{value:e,configurable:!0}),"e$1");const Ct=A(()=>!!process.versions.electron,"isElectronApp"),At=A(()=>Ct()&&!process.defaultApp,"isBundledElectronApp"),Nt=A(()=>At()?0:1,"getProcessArgvBinIndex"),Lt=A(t=>t.slice(Nt()+1),"hideBin");var _t=Object.defineProperty,K=c((t,e)=>_t(t,"name",{value:e,configurable:!0}),"i");const xt=" ",Rt=K((t,e)=>t.length===e.length&&t.every((o,n)=>o===e[n]),"equals"),St=K(t=>typeof t=="string"?t.split(xt):Rt(t,process.argv)?Lt(t):t,"parseRawCommand");var Pt=Object.defineProperty,Tt=c((t,e)=>Pt(t,"name",{value:e,configurable:!0}),"t");const It=Tt(t=>{process.on("uncaughtException",e=>{t.error(`Uncaught exception: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)}),process.on("unhandledRejection",e=>{t.error(`Promise rejection: ${e}`),e?.stack&&t.error(e.stack),process.exit(1)})},"registerExceptionHandler");var jt=Object.defineProperty,v=c((t,e)=>jt(t,"name",{value:e,configurable:!0}),"g");const Vt="CI"in d&&("GITHUB_ACTIONS"in d||"GITLAB_CI"in d||"CIRCLECI"in d),Bt=v(t=>t.charAt(0).toLowerCase()+t.slice(1),"lowerFirstChar");class Zt{static{c(this,"Cli")}static{v(this,"Cli")}logger;argv;cwd;cliName;packageVersion;packageName;extensions=[];commands;defaultCommand;updateNotifierOptions;commandSection;constructor(e,o={}){const{argv:n,cwd:a,packageName:r,packageVersion:s}={argv:T,cwd:Z(),...o};this.argv=St(n),this.argv.includes("--quiet")||this.argv.includes("-q")?d.CEREBRO_OUTPUT_LEVEL=String(k):this.argv.includes("--verbose")||this.argv.includes("-v")?d.CEREBRO_OUTPUT_LEVEL=String(Fe):this.argv.includes("--debug")||this.argv.includes("-vvv")||"DEBUG"in d?d.CEREBRO_OUTPUT_LEVEL=String(_):d.CEREBRO_OUTPUT_LEVEL=String(Me);const i={32:"informational",64:"trace",128:"debug"},l=[new le];d.CEREBRO_OUTPUT_LEVEL===String(_)&&l.push(new ce),this.logger=pe({logLevel:d.CEREBRO_OUTPUT_LEVEL?i[d.CEREBRO_OUTPUT_LEVEL]??"informational":"informational",processors:l,...o.logger}),d.CEREBRO_OUTPUT_LEVEL===String(k)&&this.logger.disable(),Je(),It(this.logger),this.cliName=e,this.packageVersion=s,this.packageName=r,this.cwd=a,this.defaultCommand="help",this.commandSection={header:`${this.cliName}${this.packageVersion?` v${this.packageVersion}`:""}`},this.commands=new Map,this.addCoreExtensions(),this.addCommand(De),this.addCommand(new Be(this.commands))}setCommandSection(e){return this.commandSection=e,this}getCommandSection(){return this.commandSection}setDefaultCommand(e){return this.defaultCommand=e,this}addCommand(e){if(this.commands.has(e.name))throw new Error(`Ignored command with name "${e.name}", it was found in the command list.`);if(e.options?.map(o=>at(o)),this.validateDoubleOptions(e),this.addNegatableOption(e),e.options?.forEach(o=>{o.__camelCaseName__=Ee(o.name)}),this.commands.set(e.name,e),e.alias!==void 0){let o=e.alias;typeof e.alias=="string"&&(o=[e.alias]),o.forEach(n=>{if(this.logger.debug("adding alias",n),this.commands.has(n))throw new Error(`Ignoring command alias "${n}, command with the same name was found."`);this.commands.set(n,e)})}return this}addExtension(e){return this.extensions.push(e),this}enableUpdateNotifier(e={}){if(!this.packageName||!this.packageVersion)throw new Error("Cannot enable update notifier without package name and version.");const o=Object.keys(e);if(o.length>0&&!o.includes("alwaysRun")&&!o.includes("distTag")&&!o.includes("updateCheckInterval"))throw new Error("Invalid update notifier options, please check the documentation.");return this.updateNotifierOptions={alwaysRun:!1,debug:d.CEREBRO_OUTPUT_LEVEL===String(_),distTag:"latest",pkg:{name:this.packageName,version:this.packageVersion},updateCheckInterval:1e3*60*60*24,...e},this}getCliName(){return this.cliName}getPackageVersion(){return this.packageVersion}getPackageName(){return this.packageName}getCommands(){return this.commands}getCwd(){return this.cwd}async run(e={}){const{shouldExitProcess:o=!0,...n}=e,a=[...this.commands.keys()];let r;this.logger.debug(`process.execPath: ${ee}`),this.logger.debug(`process.execArgv: ${te.join(" ")}`),this.logger.debug(`process.argv: ${T.join(" ")}`);try{r=ut([null,...a],this.argv)}catch(h){if(h.name==="INVALID_COMMAND"&&h.command){let S="";const P=F(h.command,[...this.commands.keys()]);P.length>0&&(S=` Did you mean: \r
7
+ - ${P.join(` \r
8
+ - `)}`),this.logger.error(`"${h.command}" is not an available command.${S}`)}else this.logger.error(h);return o?L(1):void 0}const s=r.command??this.defaultCommand,i=this.commands.get(s);if(typeof i.execute!="function")return this.logger.error(`Command "${i.name}" has no function to execute.`),o?L(1):void 0;const l=r.argv;this.logger.debug(`command '${s}' found, parsing command args: ${l.join(", ")}`);let p=wt([...i.options??[],...O]);p.forEach(h=>{if(h.multiple&&h.lazyMultiple)throw new Error(`Argument "${h.name}" cannot have both multiple and lazyMultiple options, please choose one.`)}),i.argument&&(this.logger.debug("command has positional argument, parsing them..."),p=[{defaultOption:!0,description:i.argument?.description,group:"positionals",multiple:!0,name:E,type:i.argument?.type,typeLabel:i.argument?.typeLabel},...p]);const u=me(p,{argv:lt(l,i.options??[]),camelCase:!0,partial:!0,stopAtFirstUnknown:!0}),b=ot(l,i.options??[]),f={...u,_all:{...u._all,...b}};this.validateCommandOptions(p,f,i);const g=new Ye(i.name,i);g.runtime=this,await this.registerExtensions(g),await this.updateNotifier(g);const{_all:N,positionals:Q}=f;return N[E]&&delete N[E],g.argument=Q?.[E]??[],g.argv=this.argv,g.options={...N,...n},this.mapNegatableOptions(g,i),this.mapImpliesOptions(g,i),this.validateCommandArgsForConflicts(p,g.options,i),this.logger.debug("command options parsed from options:"),this.logger.debug(JSON.stringify(g.options,null,2)),this.logger.debug("command argument parsed from argument:"),this.logger.debug(JSON.stringify(g.argument,null,2)),await this.prepareToolboxResult(f,g,i),o?L(0):void 0}validateDoubleOptions(e){if(Array.isArray(e.options)){const o=e.options.reduce((r,s)=>{const i=`${s.name}-${s.alias}`;return r[i]||(r[i]=[]),r[i].push(s),r},{}),n=Object.values(o).filter(r=>r.length>1);let a="";if(n.forEach(r=>{const s=r[0],i=r[1];let l="alias";s.name===i.name&&(l="name",s.alias===i.alias&&(l+=" and alias")),a+=`Cannot add option ${l} "${JSON.stringify(i)}" to command "${e.name}" due to conflicting option ${JSON.stringify(s)}
9
+ `}),a.length>0)throw new Error(a)}}addCoreExtensions(){this.addExtension({execute:v(e=>{e.logger=this.logger},"execute"),name:"logger"})}async prepareToolboxResult(e,o,n){if(e.global?.help){this.logger.debug("'--help' option found, running 'help' for given command...");const a=this.commands.get("help");if(!a)throw new Error("Help command not found.");await a.execute(o);return}if(e.global?.version||e.global?.V){this.logger.debug("'--version' option found, running 'version' for given command...");const a=this.commands.get("version");if(!a)throw new Error("Version command not found.");await a.execute(o);return}await n.execute(o)}async updateNotifier({logger:e}){if(this.updateNotifierOptions?.alwaysRun||!(d.NO_UPDATE_NOTIFIER||d.NODE_ENV==="test"||this.argv.includes("--no-update-notifier")||Vt)&&this.updateNotifierOptions){e.raw("Checking for updates...");const o=await(await import("../chunks/has-new-version.mjs").then(n=>n.default))(this.updateNotifierOptions);if(o){const n="Update available "+re(this.packageVersion+"")+ae(" → ")+se(o);this.logger.error(oe(n,{borderColor:v(a=>ie(a),"borderColor"),borderStyle:"round",margin:1,padding:1,textAlignment:"center"}))}}}validateCommandOptions(e,o,n){const a=bt(e,o);if(a.length>0)throw new Error(`You called the command "${n.name}" without the required options: ${a.map(r=>r.name).join(", ")}`);if(o._unknown&&o._unknown.length>0){const r=[];if(o._unknown.forEach(s=>{const i=s.startsWith("--");let l=`Found unknown ${i?"option":"argument"} "${s}"`;if(i){const p=F(s.replace("--",""),[...(n.options??[]).map(u=>u.name),...O.map(u=>u.name)]);if(p.length>0){const[u,...b]=p.map(f=>`--${f}`);l+=b.length>0?`, did you mean ${u} or ${b.join(", ")}?`:`, did you mean ${u}?`}}r.push(l)}),r.length>0)throw new Error(r.join(`
10
+ `))}}validateCommandArgsForConflicts(e,o,n){const a=e.filter(r=>r.conflicts!==void 0);if(a.length>0){const r=a.find(s=>Array.isArray(s.conflicts)?s.conflicts.some(i=>o[i]!==void 0)&&o[s.name]!==void 0:o[s.conflicts]!==void 0&&o[s.name]!==void 0);if(r)throw new Error(`You called the command "${n.name}" with conflicting options: ${r.name} and ${typeof r.conflicts=="string"?r.conflicts:r.conflicts?.join(", ")}`)}}addNegatableOption(e){Array.isArray(e.options)&&e.options.forEach(o=>{if(o.name.startsWith("no-")&&!e.options.some(n=>n.name===o.name.replace("no-",""))){if(o.type!==Boolean){this.logger.debug(`Cannot add negated option "${o.name}" to command "${e.name}" because it is not a boolean.`);return}const n={...o,defaultValue:o.defaultValue===void 0?!0:!o.defaultValue,name:`${o.name.replace("no-","")}`};e.options.push(n)}})}async registerExtensions(e){const o=v(async n=>typeof n.execute!="function"?(this.logger.warn(`Skipped ${n.name} because execute is not a function.`),null):(await n.execute(e),null),"callback");for(const n of this.extensions)await o(n)}mapNegatableOptions(e,o){Object.entries(e.options).forEach(([n,a])=>{if(/^no\w+/.test(n)){const r=Bt(n.replace("no",""));this.logger.debug(`mapping negated option "${n}" to "${r}"`),e.options[r]=!a,o.options?.forEach(s=>{s.name===r&&(s.__negated__=!0)})}})}mapImpliesOptions(e,o){Object.keys(e.options).forEach(n=>{const a=o.options?.find(r=>r.__camelCaseName__===n&&r.__negated__===void 0&&r.implies!==void 0);if(a?.implies){const r=a.implies;Object.entries(r).forEach(([s,i])=>{if(e.options[s]===void 0)e.options[s]=i;else{const l=o.options?.find(p=>p.name===s);(l?.defaultValue===void 0||e.options[s]===l.defaultValue)&&(e.options[s]=i)}})}})}}export{Zt as C};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@visulima/cerebro",
3
- "version": "1.1.15",
3
+ "version": "1.1.16",
4
4
  "description": "A delightful toolkit for building Node-powered CLIs.",
5
5
  "keywords": [
6
6
  "command",
@@ -76,10 +76,10 @@
76
76
  "LICENSE.md"
77
77
  ],
78
78
  "dependencies": {
79
- "@visulima/boxen": "1.0.13",
80
- "@visulima/colorize": "1.4.5",
81
- "@visulima/find-cache-dir": "1.0.6",
82
- "@visulima/pail": "2.1.4",
79
+ "@visulima/boxen": "1.0.14",
80
+ "@visulima/colorize": "1.4.6",
81
+ "@visulima/find-cache-dir": "1.0.7",
82
+ "@visulima/pail": "2.1.5",
83
83
  "cli-table3": "^0.6.5",
84
84
  "command-line-args": "^6.0.0",
85
85
  "fastest-levenshtein": "^1.0.16"
@@ -96,12 +96,12 @@
96
96
  "@eslint-types/typescript-eslint": "^7.5.0",
97
97
  "@eslint-types/unicorn": "^52.0.0",
98
98
  "@rushstack/eslint-plugin-security": "^0.8.2",
99
- "@total-typescript/ts-reset": "^0.5.1",
99
+ "@total-typescript/ts-reset": "^0.6.0",
100
100
  "@types/command-line-args": "^5.2.3",
101
101
  "@types/node": "18.19.15",
102
102
  "@visulima/nextra-theme-docs": "4.0.26",
103
- "@visulima/packem": "^1.0.0-alpha.60",
104
- "@visulima/path": "1.0.4",
103
+ "@visulima/packem": "^1.0.0-alpha.86",
104
+ "@visulima/path": "1.0.5",
105
105
  "@vitest/coverage-v8": "^2.0.5",
106
106
  "camelcase": "8.0.0",
107
107
  "conventional-changelog-conventionalcommits": "8.0.0",