@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/dist/index.min.js CHANGED
@@ -1,2 +1,2 @@
1
- var A="\x1B",T=`${A}[0m`,a={black:"#000000",red:"#EF4444",green:"#10B981",yellow:"#F59E0B",blue:"#3B82F6",magenta:"#EC4899",cyan:"#06B6D4",white:"#FFFFFF",gray:"#6B7280",grey:"#6B7280"},i={default:"0",bold:"1",dim:"2",italic:"3",underline:"4",inverse:"7",hidden:"8",strikethrough:"9"};function W(q){if(q.startsWith("#"))return q;let z=a[q.toLowerCase()];if(!z)return"#FFFFFF";return z}function E(q){let z=q.replace(/^#/,"");if(z.length!==6)return{r:255,g:255,b:255};return{r:parseInt(z.substring(0,2),16),g:parseInt(z.substring(2,4),16),b:parseInt(z.substring(4,6),16)}}function s(q,z,J){return`${A}[38;2;${q};${z};${J}m`}function P(q){let z=W(q),{r:J,g:K,b:Q}=E(z);return s(J,K,Q)}function w(q){if(!q||q.length===0)return"";return q.map((z)=>{let J=i[z];return J?`${A}[${J}m`:""}).join("")}function R(q){let z=Math.max(0,Math.min(255,Math.round(q))).toString(16);return z.length===1?"0"+z:z}function r(q,z,J){let K=Math.max(0,Math.min(1,J)),Q=E(q),U=E(z),Y=Q.r+K*(U.r-Q.r),V=Q.g+K*(U.g-Q.g),X=Q.b+K*(U.b-Q.b);return`#${R(Y)}${R(V)}${R(X)}`}function O(q,z,J){return r(W(q),W(z),J)}function I(q,z){if(q.length===0)return"";if(q.length===1)return P(q[0]);let J=Math.max(0,Math.min(1,z)),K=1/(q.length-1),Q=Math.min(Math.floor(J/K),q.length-2),U=(J-Q*K)/K,Y=q[Q],V=q[Q+1],X=O(Y,V,U);return P(X)}function k(q,z){if(!q&&!z)return{};if(!q)return z??{};if(!z)return q;return{modifiers:Array.from(new Set([...q.modifiers??[],...z.modifiers??[]])),color:z.color??q.color}}function C(q,z=0){if(!q)return"";let J="";if(q.modifiers)J+=w(q.modifiers);if(q.color)if(Array.isArray(q.color)){let K=I(q.color,z);J+=K}else J+=P(q.color);return J}function f(q){return q.segments.reduce((z,J)=>z+J.text.length,0)}function u(q){return q.length>0?Math.max(...q.map(f)):0}function S(q,z,J){let K=f(q);if(K<z)return{segments:[...q.segments,{text:" ".repeat(z-K),style:J}]};return q}var m="\x1B";class v{linesRendered=0;isLive;data;constructor(q={}){this.isLive=q.live??!1,this.data=q.data}getClearSequence(){if(!this.isLive||this.linesRendered===0)return"";return`${m}[1A${m}[2K\r`.repeat(this.linesRendered)}clear(){if(this.linesRendered>0)process.stdout.write(this.getClearSequence()),this.linesRendered=0}print(q){if(q)this.data=q;if(!this.data)return;let z=this.getClearSequence(),J=this.data.lines,K=this.data.style??{};J.forEach((Q,U)=>{z+=this.renderLine(Q,U,J.length,K),z+=`
2
- `}),process.stdout.write(z),this.linesRendered=J.length}resolveBlockColorForLine(q,z,J){if(!q.color)return;if(Array.isArray(q.color)){if(J<=1)return q.color[0];let K=q.color,Q=z/(J-1),U=Math.max(0,Math.min(1,Q)),Y=1/(K.length-1),V=Math.min(Math.floor(U/Y),K.length-2),X=(U-V*Y)/Y,Z=K[V],$=K[V+1];return O(Z,$,X)}return q.color}renderLine(q,z,J,K){let Q=this.resolveBlockColorForLine(K,z,J),U={modifiers:K.modifiers,color:Q},Y=k(U,q.style),V=q.segments.reduce(($,_)=>$+_.text.length,0),X=0,Z="";return q.segments.forEach(($)=>{let _=k(Y,$.style);if(Array.isArray(_.color)){let j=_.color,G=$.text,D=_.color===Y.color,B=w(_.modifiers);for(let N=0;N<G.length;N++){let M=0;if(D&&V>1)M=(X+N)/(V-1);else if(!D&&G.length>1)M=N/(G.length-1);let H=I(j,M);Z+=`${B}${H}${G[N]}`}Z+=T}else{let j=C(_);Z+=`${j}${$.text}${T}`}X+=$.text.length}),Z}}function n(q,z=" ",J,K){if(q.length===0)return[];let Q=Math.max(...q.map((V)=>V.length)),U=q.map((V,X)=>{if(K?.[X]!==void 0)return K[X];return u(V)}),Y=[];for(let V=0;V<Q;V++){let X=[];for(let Z=0;Z<q.length;Z++){let $=q[Z][V]||{segments:[]};if(Z<q.length-1){let _=S($,U[Z],J);X=[...X,..._.segments,{text:z,style:J}]}else X=[...X,...$.segments]}Y.push({segments:X})}return Y}function Kq(q,z={}){let{widths:J,separator:K=" ",printer:Q=new v}=z,U=n(q,K,void 0,J);Q.print({lines:U})}function Uq(q){let{progress:z,width:J=20,style:K,bracketStyle:Q,startStyle:U,endStyle:Y,barStyle:V,fillStyle:X,emptyStyle:Z,percentageStyle:$,startChar:_="[",endChar:j="]",fillChar:G="█",emptyChar:D="░",showPercentage:B=!0,formatPercentage:N}=q,M=Math.max(0,Math.min(1,z)),H=Math.round(M*J),b=J-H,L=Q??K,h=U??L,p=Y??L,x=V??K,y=X??x,g=Z??x,d=$??K,F=[];if(_)F.push({text:_,style:h});if(H>0)F.push({text:G.repeat(H),style:y});if(b>0)F.push({text:D.repeat(b),style:g});if(j)F.push({text:j,style:p});if(B){let c=N?N(M):` ${Math.round(M*100)}%`;F.push({text:c,style:d})}return{segments:F}}var Xq={dots:["⠋","⠙","⠹","⠸","⠼","⠴","⠦","⠧","⠇","⠏"],lines:["-","\\","|","/"],arrows:["←","↖","↑","↗","→","↘","↓","↙"],circle:["◐","◓","◑","◒"],square:["▖","▘","▝","▗"]};class l{frames;interval;startTime;constructor(q){this.frames=q.frames,this.interval=q.interval??80,this.startTime=Date.now()}getFrame(){let z=Date.now()-this.startTime,J=Math.floor(z/this.interval)%this.frames.length;return this.frames[J]}}function $q(q="#EF4444",z="#F59E0B"){let J=[" ^ ^"," / \\ //\\"," |\\___/| / \\// .\\"," /O O \\__ / // | \\ \\","/ / \\_/_/ // | \\ \\","@___@' \\_// // | \\ \\ "," | \\_// // | \\ \\ "," | \\/// | \\ \\ "," _|_ / ) // | \\ _\\"," '/,_ _ _/ ( ; -. | _ _\\.-~ .-~~~^-."," ,-{ _ `-.|.-~-. .~ `."," '/\\ / ~-. _ .-~ .-~^-. \\"," `. { } / \\ \\"," .----~-\\. \\-' .~ \\ `. \\^-."," ///.----..> c \\ _ -~ `. ^-` ^-_"," ///-._ _ _ _ _ _ _}^ - - - - ~ ~--, .-~"," /.-'"];return J.map((K,Q)=>{let U=J.length<=1?0:Q/(J.length-1),Y=O(q,z,U);return{segments:[{text:K,style:{color:Y}}]}})}export{s as rgbToAnsi,C as resolveStyle,w as resolveModifiersToAnsi,P as resolveColorToAnsi,Kq as printColumns,S as padLine,k as mergeStyles,n as mergeColumns,r as interpolateHex,O as interpolateColor,E as hexToRgb,f as getLineLength,I as getGradientColor,$q as getDragon,Uq as createProgressBar,u as computeMaxWidth,W as colorToHex,l as Spinner,Xq as SPINNERS,T as RESET,v as Printer};
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};
@@ -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(startColor?: Color, endColor?: Color): PrintLine[];
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.9",
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
- "publish": "bun run build && bun publish --tag latest",
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"