UNPKG

@remotex-labs/xansi

Version:

A lightweight ANSI utility library for styling terminal output

4 lines (3 loc) 4.1 kB
"use strict";var a=Object.defineProperty;var w=Object.getOwnPropertyDescriptor;var C=Object.getOwnPropertyNames;var L=Object.prototype.hasOwnProperty;var E=(i,t)=>{for(var n in t)a(i,n,{get:t[n],enumerable:!0})},A=(i,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let e of C(t))!L.call(i,e)&&e!==n&&a(i,e,{get:()=>t[e],enumerable:!(r=w(t,e))||r.enumerable});return i};var B=i=>A(a({},"__esModule",{value:!0}),i);var S={};E(S,{ShadowRenderer:()=>g});module.exports=B(S);var d={1:"22",3:"23",4:"24",5:"25",7:"27",8:"28",9:"29",30:"39",31:"39",32:"39",33:"39",34:"39",35:"39",36:"39",37:"39",40:"49",41:"49",42:"49",43:"49",44:"49",45:"49",46:"49",47:"49",0:null,22:null,23:null,24:null,25:null,27:null,28:null,29:null,39:null,49:null};function x(i,t,n,r){if((i==="38"||i==="48")&&n[t+1]==="2"){let s=n.slice(t+2,t+5);if(s.length===3){let l=`${i};2;${s.join(";")}`,o=i==="38"?"39":"49";return r.set(l,o),t+4}}let e=d[i];if(e===null)if(i==="0")r.clear();else for(let[s,l]of r)(s===i||l===i)&&r.delete(s);else e&&r.set(i,e);return t}function b(i){let t=/\x1b\[[0-9;]*m/g,n=i.match(new RegExp(`${t.source}|.`,"g"))||[],r=new Map,e=[];for(let s of n){if(!s.startsWith("\x1B[")){let o=[...r.keys()].map(u=>`\x1B[${u}m`).join(""),c=[...new Set(r.values())].map(u=>`\x1B[${u}m`).join("");e.push(`${o}${s}${c}`);continue}let l=s.slice(2,-1).split(";");for(let o=0;o<l.length;o++)o=x(l[o],o,l,r)}return e}function m(i){process.stdout.write?process.stdout.write(i):console.log(i)}function v(i,t=0){return`\x1B[${i};${t}H`}function R(i){return i.replace(/\x1b\[[0-9;]*m/g,"")}var f={CLEAR_LINE:"\x1B[K",HIDE_CURSOR:"\x1B[?25l",SHOW_CURSOR:"\x1B[?25h",SAVE_CURSOR:"\x1B[s",CLEAR_SCREEN:"\x1B[2J\x1B[H",RESTORE_CURSOR:"\x1B[u",CLEAR_SCREEN_DOWN:"\x1B[J",RESET_TERMINAL:"\x1Bc"};var g=class{constructor(t,n,r,e){this.terminalHeight=t;this.terminalWidth=n;this.topPosition=r;this.leftPosition=e}scrollPosition=0;viewBuffer=[];contentBuffer=[];get top(){return this.topPosition}get left(){return this.leftPosition}get width(){return this.terminalWidth}get height(){return this.terminalHeight}get scroll(){return this.scrollPosition}set top(t){this.topPosition=t}set left(t){this.leftPosition=t}set width(t){this.terminalWidth=t}set height(t){this.terminalHeight=t}set scroll(t){let n=t<0?this.scrollPosition+t:t;n>=this.contentBuffer.length||(this.scrollPosition=n,this.render())}clear(){this.clearScreen(),this.viewBuffer=[],this.contentBuffer=[]}clearScreen(){let t="";for(let n=0;n<this.viewBuffer.length;n++)t+=this.moveCursor(n,0),t+=f.CLEAR_LINE;m(t)}writeText(t,n,r,e=!1){if(t<0||n>=this.terminalWidth)return;e&&(this.contentBuffer[t]=[]),r=r.split(` `)[0];let s=this.contentBuffer[t]??=[],l=R(r),o=Math.min(this.terminalWidth-n,l.length),c=b(r);for(let u=0;u<o;u++){let h=n+u,p=c[u];s[h]||(s[h]={char:"",dirty:!0}),s[h].char!==p&&(s[h].char=p,s[h].dirty=!0)}s.length=Math.min(Math.max(n+o,this.terminalWidth),this.terminalWidth)}render(t=!1){let n=Math.min(this.scrollPosition,this.contentBuffer.length),r=Math.min(n+this.terminalHeight,this.contentBuffer.length);if(n>=r)return;let e={force:t,output:"",viewLine:[],screenRow:1,contentLine:[]};for(let s=n;s<r;s++,e.screenRow++)e.contentLine=this.contentBuffer[s],e.contentLine&&(e.viewLine=this.viewBuffer[e.screenRow]??=[],this.renderLine(e),e.viewLine.length>e.contentLine.length&&(e.output+=f.CLEAR_LINE,e.viewLine.length=e.contentLine.length));if(r>=this.contentBuffer.length){this.viewBuffer.length=e.screenRow;for(let s=e.screenRow;s<=this.terminalHeight;s++)e.output+=this.moveCursor(s,0),e.output+=f.CLEAR_LINE}e.output+=this.moveCursor(this.viewBuffer.length,this.terminalWidth),m(e.output)}renderLine(t){let n=!0;for(let r=0;r<t.contentLine.length;r++){let e=t.contentLine[r];if(e&&!e.dirty&&e.char===t.viewLine[r]&&!t.force){n=!0;continue}if(n&&(t.output+=this.moveCursor(t.screenRow,r+1),n=!1),!e){t.viewLine[r]=" ",t.output+=" ";continue}t.viewLine[r]=e.char,t.output+=e.char,e.dirty=!1}}moveCursor(t,n=0){return v(t+this.topPosition,n+this.leftPosition)}};0&&(module.exports={ShadowRenderer}); //# sourceMappingURL=shadow.service.js.map