@heinrichb/console-toolkit 1.0.9 → 1.0.13
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/README.md +320 -162
- package/dist/components/progress.d.ts +10 -0
- package/dist/components/table.d.ts +31 -0
- package/dist/core/builders.d.ts +25 -0
- package/dist/core/layout.d.ts +1 -0
- package/dist/core/printer.d.ts +18 -2
- package/dist/core/style.d.ts +22 -10
- package/dist/core/types.d.ts +15 -1
- package/dist/core/utils.d.ts +9 -2
- package/dist/index.d.ts +3 -0
- package/dist/index.js +313 -92
- package/dist/index.min.js +2 -2
- package/dist/presets/ascii.d.ts +3 -1
- package/dist/presets/gradients.d.ts +6 -0
- package/package.json +35 -13
package/dist/index.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var
|
|
2
|
-
`}),
|
|
1
|
+
var k="\x1B",b=`${k}[0m`,Vz=Object.assign(Object.create(null),{black:"#000000",red:"#EF4444",green:"#10B981",yellow:"#F59E0B",blue:"#3B82F6",magenta:"#EC4899",cyan:"#06B6D4",white:"#FFFFFF",gray:"#6B7280",grey:"#6B7280"}),Yz=Object.assign(Object.create(null),{bold:"1",dim:"2",italic:"3",underline:"4",inverse:"7",hidden:"8",strikethrough:"9"});function A(z){if(z.startsWith("#"))return z;let J=Vz[z.toLowerCase()];if(!J)return"#FFFFFF";return J}function S(z){let J=z.replace(/^#/,"");if(J.length!==6)return{r:255,g:255,b:255};return{r:parseInt(J.substring(0,2),16),g:parseInt(J.substring(2,4),16),b:parseInt(J.substring(4,6),16)}}function R(z,J,K){return`${k}[38;2;${z};${J};${K}m`}function L(z,J,K){return`${k}[48;2;${z};${J};${K}m`}function Zz(z){let{r:J,g:K,b:Q}=E(z);return R(J,K,Q)}function E(z){let J=A(z);return S(J)}function m(z){if(!z||z.length===0)return"";return z.map((J)=>{let K=Yz[J];return K?`${k}[${K}m`:""}).join("")}function f(z){let J=Math.max(0,Math.min(255,Math.round(z))).toString(16);return J.length===1?"0"+J:J}function $z(z,J,K){let Q=Math.max(0,Math.min(1,K)),V=S(z),Z=S(J),_=V.r+Q*(Z.r-V.r),$=V.g+Q*(Z.g-V.g),Y=V.b+Q*(Z.b-V.b);return`#${f(_)}${f($)}${f(Y)}`}function c(z,J){let K=Math.max(0,Math.min(1,J)),Q=1/(z-1),V=Math.min(Math.floor(K/Q),z-2);return{index:V,factor:(K-V*Q)/Q}}function a(z,J,K){if(z.length===0)return"";if(z.length===1)return K(z[0].r,z[0].g,z[0].b);let Q=c(z.length,J),V=z[Q.index],Z=z[Q.index+1],_=Math.round(V.r+Q.factor*(Z.r-V.r)),$=Math.round(V.g+Q.factor*(Z.g-V.g)),Y=Math.round(V.b+Q.factor*(Z.b-V.b));return K(_,$,Y)}function u(z,J){return a(z,J,R)}function p(z,J){return a(z,J,L)}function v(z,J){if(z.length===0)return"#FFFFFF";if(z.length===1)return A(z[0]);let K=c(z.length,J);return $z(A(z[K.index]),A(z[K.index+1]),K.factor)}function y(z,J){if(!z&&!J)return{};if(!z)return J??{};if(!J)return z;let K=z.modifiers??[],Q=J.modifiers??[],V=[...K];for(let Z of Q)if(!V.includes(Z))V.push(Z);return{modifiers:V,color:J.color??z.color,bgColor:J.bgColor??z.bgColor}}function n(z,J=0){if(!z)return"";let K="";if(z.modifiers)K+=m(z.modifiers);if(z.color)if(Array.isArray(z.color)){let Q=z.color.map(E);K+=u(Q,J)}else K+=Zz(z.color);if(z.bgColor)if(Array.isArray(z.bgColor)){let Q=z.bgColor.map(E);K+=p(Q,J)}else{let{r:Q,g:V,b:Z}=E(z.bgColor);K+=L(Q,V,Z)}return K}function H(z,J){return{text:z,style:J}}function j(z=[],J){return{segments:z,style:J}}function i(z=[],J){return{lines:z,style:J}}function s(z){return z.segments.reduce((J,K)=>J+K.text.length,0)}function r(z){return z.reduce((J,K)=>Math.max(J,s(K)),0)}function l(z,J,K){let Q=s(z);if(Q<J)return j([...z.segments,H(" ".repeat(J-Q),K)],z.style);return z}var Uz=/\x1b\[[0-9;]*m/g;function jz(z){return z.replace(Uz,"")}class h{linesRendered=0;isLive;data;constructor(z={}){this.isLive=z.live??!1,this.data=z.data}getClearSequence(){if(!this.isLive||this.linesRendered===0)return"";return`${k}[1A${k}[2K\r`.repeat(this.linesRendered)}clear(){if(this.linesRendered>0)process.stdout.write(this.getClearSequence()),this.linesRendered=0}renderToString(z){if(z)this.data=z;if(!this.data)return"";return this.renderBlock(this.data)}print(z){if(z)this.data=z;if(!this.data)return;let J=this.getClearSequence()+this.renderBlock(this.data);process.stdout.write(J),this.linesRendered=this.data.lines.length}renderBlock(z){let J="",K=z.lines,Q=z.style??{};return K.forEach((V,Z)=>{J+=this.renderLine(V,Z,K.length,Q),J+=`
|
|
2
|
+
`}),J}resolveBlockStyleForLine(z,J,K){return{modifiers:z.modifiers,color:this.resolveGradientForLine(z.color,J,K),bgColor:this.resolveGradientForLine(z.bgColor,J,K)}}resolveGradientForLine(z,J,K){if(!z)return;if(Array.isArray(z)){if(K<=1)return z[0];return v(z,J/(K-1))}return z}renderLine(z,J,K,Q){let V=this.resolveBlockStyleForLine(Q,J,K),Z=y(V,z.style),_=z.segments.reduce((X,U)=>X+U.text.length,0),$=0,Y="";return z.segments.forEach((X)=>{let U=y(Z,X.style),N=Array.isArray(U.color),M=Array.isArray(U.bgColor);if(N||M){let q=X.text,D=U.color===Z.color,P,B="";if(N)P=U.color.map(E);else if(U.color){let{r:O,g:G,b:F}=E(U.color);B=R(O,G,F)}let I,W="";if(M)I=U.bgColor.map(E);else if(U.bgColor){let{r:O,g:G,b:F}=E(U.bgColor);W=L(O,G,F)}let w=m(U.modifiers);for(let O=0;O<q.length;O++){let G=0;if(D&&_>1)G=($+O)/(_-1);else if(!D&&q.length>1)G=O/(q.length-1);let F=P?u(P,G):B,x=I?p(I,G):W;Y+=`${w}${F}${x}${q[O]}`}Y+=b}else{let q=n(U);Y+=`${q}${X.text}${b}`}$+=X.text.length}),Y}}function Xz(z,J=" ",K,Q){if(z.length===0)return[];let V=z.reduce(($,Y)=>Math.max($,Y.length),0),Z=z.map(($,Y)=>{if(Q?.[Y]!==void 0)return Q[Y];return r($)}),_=[];for(let $=0;$<V;$++){let Y=[];for(let X=0;X<z.length;X++){let U=z[X][$]||j();if(X<z.length-1){let N=l(U,Z[X],K);Y.push(...N.segments,H(J,K))}else Y.push(...U.segments)}_.push(j(Y))}return _}function kz(z,J={}){let{widths:K,separator:Q=" ",defaultStyle:V,printer:Z=new h}=J,_=Xz(z,Q,V,K);Z.print(i(_))}function Tz(z){let{progress:J,width:K=20,style:Q,bracketStyle:V,startStyle:Z,endStyle:_,barStyle:$,fillStyle:Y,emptyStyle:X,percentageStyle:U,startChar:N="[",endChar:M="]",fillChar:q="█",completeChar:D,emptyChar:P="░",completeStyle:B,showPercentage:I=!0,formatPercentage:W}=z,w=Math.max(0,Math.min(1,J)),O=Math.round(w*K),G=K-O,F=V??Q,x=Z??F,t=_??F,C=$??Q,d=w>=1,e=d?B??Y??C:Y??C,zz=X??C,Jz=U??Q,T=[];if(N)T.push(H(N,x));let Kz=d?D??q:q;if(O>0)T.push(H(Kz.repeat(O),e));if(G>0)T.push(H(P.repeat(G),zz));if(M)T.push(H(M,t));if(I){let Qz=W?W(w):` ${Math.round(w*100)}%`;T.push(H(Qz,Jz))}return j(T)}var Az={dots:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],lines:["-","\\","|","/"],arrows:["←","↖","↑","↗","→","↘","↓","↙"],circle:["◐","◓","◑","◒"],square:["▖","▘","▝","▗"]};class qz{frames;interval;startTime;constructor(z){this.frames=z.frames,this.interval=z.interval??80,this.startTime=Date.now()}getFrame(){let J=Date.now()-this.startTime,K=Math.floor(J/this.interval)%this.frames.length;return this.frames[K]}}var _z={single:{tl:"┌",t:"─",tr:"┐",l:"│",r:"│",bl:"└",b:"─",br:"┘",ml:"├",m:"─",mr:"┤",tj:"┬",bj:"┴",mj:"┼"},double:{tl:"╔",t:"═",tr:"╗",l:"║",r:"║",bl:"╚",b:"═",br:"╝",ml:"╠",m:"═",mr:"╣",tj:"╦",bj:"╩",mj:"╬"},rounded:{tl:"╭",t:"─",tr:"╮",l:"│",r:"│",bl:"╰",b:"─",br:"╯",ml:"├",m:"─",mr:"┤",tj:"┬",bj:"┴",mj:"┼"}};function g(z,J,K,Q,V,Z,_){let $=[z];for(let Y=0;Y<V.length;Y++)if($.push(J.repeat(V[Y]+Z*2)),Y<V.length-1)$.push(K);return $.push(Q),j([H($.join(""),_)])}function o(z,J,K,Q,V,Z,_){let $=[];$.push(H(V,_));for(let Y=0;Y<Q;Y++){let X=z[Y]??"",U=" ".repeat(K)+X.padEnd(J[Y])+" ".repeat(K);if($.push(H(U,Z)),Y<Q-1)$.push(H(V,_))}return $.push(H(V,_)),j($)}function vz(z){let{headers:J,rows:K,style:Q,headerStyle:V,borderStyle:Z,border:_="single",columnWidths:$,cellPadding:Y=1}=z,X=K.reduce((q,D)=>Math.max(q,D.length),J?.length??0);if(X===0)return[];let U=[];for(let q=0;q<X;q++)if($?.[q]!==void 0)U.push($[q]);else{let D=J?.[q]?.length??0,P=K.reduce((B,I)=>Math.max(B,I[q]?.length??0),0);U.push(Math.max(D,P))}if(_==="none")return Nz(J,K,U,Y,X,Q,V);let N=_z[_],M=[];if(M.push(g(N.tl,N.t,N.tj,N.tr,U,Y,Z)),J)M.push(o(J,U,Y,X,N.l,V??Q,Z)),M.push(g(N.ml,N.m,N.mj,N.mr,U,Y,Z));for(let q of K)M.push(o(q,U,Y,X,N.l,Q,Z));return M.push(g(N.bl,N.b,N.bj,N.br,U,Y,Z)),M}function Nz(z,J,K,Q,V,Z,_){let $=[],Y=" ".repeat(Q);function X(U,N){let M=[];for(let q=0;q<V;q++){let D=U[q]??"";M.push(H(Y+D.padEnd(K[q])+Y,N))}return j(M)}if(z)$.push(X(z,_??Z));for(let U of J)$.push(X(U,Z));return $}function Sz(z=["#EF4444","#F59E0B"]){let J=[" ^ ^"," / \\ //\\"," |\\___/| / \\// .\\"," /O O \\__ / // | \\ \\","/ / \\_/_/ // | \\ \\","@___@' \\_// // | \\ \\ "," | \\_// // | \\ \\ "," | \\/// | \\ \\ "," _|_ / ) // | \\ _\\"," '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-."," ,-{ _ `-.|.-~-. .~ `."," '/\\ / ~-. _ .-~ .-~^-. \\"," `. { } / \\ \\"," .----~-\\. \\-' .~ \\ `. \\^-."," ///.----..> c \\ _ -~ `. ^-` ^-_"," ///-._ _ _ _ _ _ _}^ - - - - ~ ~--, .-~"," /.-'"];return J.map((K,Q)=>{let V=J.length<=1?0:Q/(J.length-1),Z=v(z,V);return j([H(K,{color:Z})])})}var mz={rainbow:["#EF4444","#F59E0B","#10B981","#06B6D4","#3B82F6","#8B5CF6"],ocean:["#1E3A5F","#0E7490","#06B6D4","#67E8F9"],fire:["#7F1D1D","#EF4444","#F59E0B","#FDE047"],sunset:["#7C3AED","#EC4899","#F97316","#FBBF24"],forest:["#064E3B","#10B981","#84CC16","#BEF264"],monochrome:["#000000","#6B7280","#FFFFFF"]};export{jz as stripAnsi,H as segment,L as rgbToBgAnsi,R as rgbToAnsi,n as resolveStyle,m as resolveModifiersToAnsi,E as resolveColorToRgb,Zz as resolveColorToAnsi,kz as printColumns,l as padLine,y as mergeStyles,Xz as mergeColumns,j as line,$z as interpolateHex,v as interpolateGradient,S as hexToRgb,s as getLineLength,u as getGradientColorFromRgb,p as getGradientBgColorFromRgb,Sz as getDragon,vz as createTable,Tz as createProgressBar,r as computeMaxWidth,A as colorToHex,i as block,qz as Spinner,Az as SPINNERS,b as RESET,h as Printer,mz as GRADIENTS,k as ESC};
|
package/dist/presets/ascii.d.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { PrintLine, Color } from "../core/types";
|
|
2
2
|
/**
|
|
3
3
|
* Returns the classic Dragon ASCII art as PrintLines with a vertical color gradient.
|
|
4
|
+
*
|
|
5
|
+
* @param colors - Array of gradient stops. Defaults to red-to-amber `["#EF4444", "#F59E0B"]`.
|
|
4
6
|
*/
|
|
5
|
-
export declare function getDragon(
|
|
7
|
+
export declare function getDragon(colors?: Color[]): PrintLine[];
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Color } from "../core/types";
|
|
2
|
+
/**
|
|
3
|
+
* Pre-defined gradient color arrays for common use cases.
|
|
4
|
+
* Use with any style's `color` or `bgColor` property that accepts `Color[]`.
|
|
5
|
+
*/
|
|
6
|
+
export declare const GRADIENTS: Record<"rainbow" | "ocean" | "fire" | "sunset" | "forest" | "monochrome", Color[]>;
|
package/package.json
CHANGED
|
@@ -1,14 +1,43 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heinrichb/console-toolkit",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.13",
|
|
4
4
|
"description": "A versatile TypeScript utility library for enhanced console logging, formatting, and layout management.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
7
7
|
"module": "./dist/index.js",
|
|
8
8
|
"types": "./dist/index.d.ts",
|
|
9
|
+
"exports": {
|
|
10
|
+
".": {
|
|
11
|
+
"import": "./dist/index.js",
|
|
12
|
+
"types": "./dist/index.d.ts"
|
|
13
|
+
}
|
|
14
|
+
},
|
|
9
15
|
"publishConfig": {
|
|
10
16
|
"access": "public"
|
|
11
17
|
},
|
|
18
|
+
"repository": {
|
|
19
|
+
"type": "git",
|
|
20
|
+
"url": "git+https://github.com/heinrichb/console-toolkit.git"
|
|
21
|
+
},
|
|
22
|
+
"homepage": "https://github.com/heinrichb/console-toolkit#readme",
|
|
23
|
+
"bugs": {
|
|
24
|
+
"url": "https://github.com/heinrichb/console-toolkit/issues"
|
|
25
|
+
},
|
|
26
|
+
"keywords": [
|
|
27
|
+
"console",
|
|
28
|
+
"terminal",
|
|
29
|
+
"cli",
|
|
30
|
+
"ansi",
|
|
31
|
+
"colors",
|
|
32
|
+
"gradient",
|
|
33
|
+
"progress-bar",
|
|
34
|
+
"spinner",
|
|
35
|
+
"typescript"
|
|
36
|
+
],
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=18",
|
|
39
|
+
"bun": ">=1.0"
|
|
40
|
+
},
|
|
12
41
|
"files": [
|
|
13
42
|
"dist"
|
|
14
43
|
],
|
|
@@ -17,28 +46,21 @@
|
|
|
17
46
|
"test": "bun test src",
|
|
18
47
|
"test:coverage": "bun test src --coverage --coverage-threshold=100",
|
|
19
48
|
"build": "bun run scripts/build.ts",
|
|
20
|
-
"
|
|
49
|
+
"release": "bun run build && bun publish --tag latest",
|
|
21
50
|
"typecheck": "bun x tsc --noEmit",
|
|
22
|
-
"format:check": "prettier --check \"src/**/*.{ts,json,md}\"",
|
|
23
|
-
"format:write": "prettier --write \"src/**/*.{ts,json,md}\"",
|
|
51
|
+
"format:check": "prettier --check \"src/**/*.{ts,json,md}\" \"*.md\"",
|
|
52
|
+
"format:write": "prettier --write \"src/**/*.{ts,json,md}\" \"*.md\"",
|
|
24
53
|
"lint": "eslint \"src/**/*.ts\"",
|
|
25
54
|
"tree": "tree -a -I '.git|node_modules|dist'"
|
|
26
55
|
},
|
|
27
|
-
"prettier": {
|
|
28
|
-
"printWidth": 128,
|
|
29
|
-
"tabWidth": 2,
|
|
30
|
-
"trailingComma": "none",
|
|
31
|
-
"bracketSameLine": true,
|
|
32
|
-
"semi": true,
|
|
33
|
-
"singleQuote": false,
|
|
34
|
-
"useTabs": true
|
|
35
|
-
},
|
|
36
56
|
"devDependencies": {
|
|
37
57
|
"@eslint/js": "^10.0.1",
|
|
38
58
|
"@types/bun": "^1.3.9",
|
|
59
|
+
"@types/node": "^25.5.2",
|
|
39
60
|
"eslint": "^10.0.2",
|
|
40
61
|
"eslint-config-prettier": "^10.1.8",
|
|
41
62
|
"globals": "^17.3.0",
|
|
63
|
+
"jiti": "^2.6.1",
|
|
42
64
|
"prettier": "^3.8.1",
|
|
43
65
|
"typescript": "^5.9.3",
|
|
44
66
|
"typescript-eslint": "^8.56.1"
|