@stacksjs/rpx 0.9.1 → 0.10.0

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.
@@ -1,2 +1,2 @@
1
1
  import{createRequire as k}from"node:module";var g=Object.create;var{getPrototypeOf:h,defineProperty:f,getOwnPropertyNames:i}=Object;var j=Object.prototype.hasOwnProperty;var l=(a,b,c)=>{c=a!=null?g(h(a)):{};let d=b||!a||!a.__esModule?f(c,"default",{value:a,enumerable:!0}):c;for(let e of i(a))if(!j.call(d,e))f(d,e,{get:()=>a[e],enumerable:!0});return d};var m=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports);var o=k(import.meta.url);
2
- export{l as P,m as Q,o as R};
2
+ export{l as N,m as O,o as P};
@@ -1,4 +1,4 @@
1
- import{P as q,R as X}from"./chunk-e794mmrn.js";import{createRequire as J}from"node:module";import{formatWithOptions as iD}from"node:util";import{sep as nD}from"node:path";import*as b from"node:tty";import g from"node:process";var DD=Object.create,{getPrototypeOf:uD,defineProperty:N,getOwnPropertyNames:tD}=Object,FD=Object.prototype.hasOwnProperty,HD=(u,t,e)=>{e=u!=null?DD(uD(u)):{};let F=t||!u||!u.__esModule?N(e,"default",{value:u,enumerable:!0}):e;for(let r of tD(u))if(!FD.call(F,r))N(F,r,{get:()=>u[r],enumerable:!0});return F},KD=(u,t)=>()=>(t||u((t={exports:{}}).exports,t),t.exports),QD=J(import.meta.url),n={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},M={silent:{level:-1},fatal:{level:n.fatal},error:{level:n.error},warn:{level:n.warn},log:{level:n.log},info:{level:n.info},success:{level:n.success},fail:{level:n.fail},ready:{level:n.info},start:{level:n.info},box:{level:n.info},debug:{level:n.debug},trace:{level:n.trace},verbose:{level:n.verbose}};function L(u){return u!==null&&typeof u==="object"}function O(u,t,e=".",F){if(!L(t))return O(u,{},e,F);let r=Object.assign({},t);for(let o in u){if(o==="__proto__"||o==="constructor")continue;let D=u[o];if(D===null||D===void 0)continue;if(F&&F(r,o,D,e))continue;if(Array.isArray(D)&&Array.isArray(r[o]))r[o]=[...D,...r[o]];else if(L(D)&&L(r[o]))r[o]=O(D,r[o],(e?`${e}.`:"")+o.toString(),F);else r[o]=D}return r}function eD(u){return(...t)=>t.reduce((e,F)=>O(e,F,"",u),{})}var rD=eD();function oD(u){return Object.prototype.toString.call(u)==="[object Object]"}function CD(u){if(!oD(u))return!1;if(!u.message&&!u.args)return!1;if(u.stack)return!1;return!0}var T=!1,U=[];class i{constructor(u={}){let t=u.types||M;this.options=rD({...u,defaults:{...u.defaults},level:S(u.level,t),reporters:[...u.reporters||[]]},{types:M,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let e in t){let F={type:e,...this.options.defaults,...t[e]};this[e]=this._wrapLogFn(F),this[e].raw=this._wrapLogFn(F,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(u){this.options.level=S(u,this.options.types,this.options.level)}prompt(u,t){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(u,t)}create(u){let t=new i({...this.options,...u});if(this._mockFn)t.mockTypes(this._mockFn);return t}withDefaults(u){return this.create({...this.options,defaults:{...this.options.defaults,...u}})}withTag(u){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+u:u})}addReporter(u){return this.options.reporters.push(u),this}removeReporter(u){if(u){let t=this.options.reporters.indexOf(u);if(t>=0)return this.options.reporters.splice(t,1)}else this.options.reporters.splice(0);return this}setReporters(u){return this.options.reporters=Array.isArray(u)?u:[u],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let u in this.options.types){if(!console["__"+u])console["__"+u]=console[u];console[u]=this[u].raw}}restoreConsole(){for(let u in this.options.types)if(console["__"+u])console[u]=console["__"+u],delete console["__"+u]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(u,t){if(!u)return;if(!u.__write)u.__write=u.write;u.write=(e)=>{this[t].raw(String(e).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(u){if(!u)return;if(u.__write)u.write=u.__write,delete u.__write}pauseLogs(){T=!0}resumeLogs(){T=!1;let u=U.splice(0);for(let t of u)t[0]._logFn(t[1],t[2])}mockTypes(u){let t=u||this.options.mockFn;if(this._mockFn=t,typeof t!=="function")return;for(let e in this.options.types)this[e]=t(e,this.options.types[e])||this[e],this[e].raw=this[e]}_wrapLogFn(u,t){return(...e)=>{if(T){U.push([this,u,e,t]);return}return this._logFn(u,e,t)}}_logFn(u,t,e){if((u.level||0)>this.level)return!1;let F={date:new Date,args:[],...u,level:S(u.level,this.options.types)};if(!e&&t.length===1&&CD(t[0]))Object.assign(F,t[0]);else F.args=[...t];if(F.message)F.args.unshift(F.message),delete F.message;if(F.additional){if(!Array.isArray(F.additional))F.additional=F.additional.split(`
1
+ import{N as q,P as X}from"./chunk-7am1svx0.js";import{createRequire as J}from"node:module";import{formatWithOptions as iD}from"node:util";import{sep as nD}from"node:path";import*as b from"node:tty";import g from"node:process";var DD=Object.create,{getPrototypeOf:uD,defineProperty:N,getOwnPropertyNames:tD}=Object,FD=Object.prototype.hasOwnProperty,HD=(u,t,e)=>{e=u!=null?DD(uD(u)):{};let F=t||!u||!u.__esModule?N(e,"default",{value:u,enumerable:!0}):e;for(let r of tD(u))if(!FD.call(F,r))N(F,r,{get:()=>u[r],enumerable:!0});return F},KD=(u,t)=>()=>(t||u((t={exports:{}}).exports,t),t.exports),QD=J(import.meta.url),n={silent:Number.NEGATIVE_INFINITY,fatal:0,error:0,warn:1,log:2,info:3,success:3,fail:3,ready:3,start:3,box:3,debug:4,trace:5,verbose:Number.POSITIVE_INFINITY},M={silent:{level:-1},fatal:{level:n.fatal},error:{level:n.error},warn:{level:n.warn},log:{level:n.log},info:{level:n.info},success:{level:n.success},fail:{level:n.fail},ready:{level:n.info},start:{level:n.info},box:{level:n.info},debug:{level:n.debug},trace:{level:n.trace},verbose:{level:n.verbose}};function L(u){return u!==null&&typeof u==="object"}function O(u,t,e=".",F){if(!L(t))return O(u,{},e,F);let r=Object.assign({},t);for(let o in u){if(o==="__proto__"||o==="constructor")continue;let D=u[o];if(D===null||D===void 0)continue;if(F&&F(r,o,D,e))continue;if(Array.isArray(D)&&Array.isArray(r[o]))r[o]=[...D,...r[o]];else if(L(D)&&L(r[o]))r[o]=O(D,r[o],(e?`${e}.`:"")+o.toString(),F);else r[o]=D}return r}function eD(u){return(...t)=>t.reduce((e,F)=>O(e,F,"",u),{})}var rD=eD();function oD(u){return Object.prototype.toString.call(u)==="[object Object]"}function CD(u){if(!oD(u))return!1;if(!u.message&&!u.args)return!1;if(u.stack)return!1;return!0}var T=!1,U=[];class i{constructor(u={}){let t=u.types||M;this.options=rD({...u,defaults:{...u.defaults},level:S(u.level,t),reporters:[...u.reporters||[]]},{types:M,throttle:1000,throttleMin:5,formatOptions:{date:!0,colors:!1,compact:!0}});for(let e in t){let F={type:e,...this.options.defaults,...t[e]};this[e]=this._wrapLogFn(F),this[e].raw=this._wrapLogFn(F,!0)}if(this.options.mockFn)this.mockTypes();this._lastLog={}}get level(){return this.options.level}set level(u){this.options.level=S(u,this.options.types,this.options.level)}prompt(u,t){if(!this.options.prompt)throw new Error("prompt is not supported!");return this.options.prompt(u,t)}create(u){let t=new i({...this.options,...u});if(this._mockFn)t.mockTypes(this._mockFn);return t}withDefaults(u){return this.create({...this.options,defaults:{...this.options.defaults,...u}})}withTag(u){return this.withDefaults({tag:this.options.defaults.tag?this.options.defaults.tag+":"+u:u})}addReporter(u){return this.options.reporters.push(u),this}removeReporter(u){if(u){let t=this.options.reporters.indexOf(u);if(t>=0)return this.options.reporters.splice(t,1)}else this.options.reporters.splice(0);return this}setReporters(u){return this.options.reporters=Array.isArray(u)?u:[u],this}wrapAll(){this.wrapConsole(),this.wrapStd()}restoreAll(){this.restoreConsole(),this.restoreStd()}wrapConsole(){for(let u in this.options.types){if(!console["__"+u])console["__"+u]=console[u];console[u]=this[u].raw}}restoreConsole(){for(let u in this.options.types)if(console["__"+u])console[u]=console["__"+u],delete console["__"+u]}wrapStd(){this._wrapStream(this.options.stdout,"log"),this._wrapStream(this.options.stderr,"log")}_wrapStream(u,t){if(!u)return;if(!u.__write)u.__write=u.write;u.write=(e)=>{this[t].raw(String(e).trim())}}restoreStd(){this._restoreStream(this.options.stdout),this._restoreStream(this.options.stderr)}_restoreStream(u){if(!u)return;if(u.__write)u.write=u.__write,delete u.__write}pauseLogs(){T=!0}resumeLogs(){T=!1;let u=U.splice(0);for(let t of u)t[0]._logFn(t[1],t[2])}mockTypes(u){let t=u||this.options.mockFn;if(this._mockFn=t,typeof t!=="function")return;for(let e in this.options.types)this[e]=t(e,this.options.types[e])||this[e],this[e].raw=this[e]}_wrapLogFn(u,t){return(...e)=>{if(T){U.push([this,u,e,t]);return}return this._logFn(u,e,t)}}_logFn(u,t,e){if((u.level||0)>this.level)return!1;let F={date:new Date,args:[],...u,level:S(u.level,this.options.types)};if(!e&&t.length===1&&CD(t[0]))Object.assign(F,t[0]);else F.args=[...t];if(F.message)F.args.unshift(F.message),delete F.message;if(F.additional){if(!Array.isArray(F.additional))F.additional=F.additional.split(`
2
2
  `);F.args.push(`
3
3
  `+F.additional.join(`
4
4
  `)),delete F.additional}F.type=typeof F.type==="string"?F.type.toLowerCase():"log",F.tag=typeof F.tag==="string"?F.tag:"";let r=(D=!1)=>{let E=(this._lastLog.count||0)-this.options.throttleMin;if(this._lastLog.object&&E>0){let p=[...this._lastLog.object.args];if(E>1)p.push(`(repeated ${E} times)`);this._log({...this._lastLog.object,args:p}),this._lastLog.count=1}if(D)this._lastLog.object=F,this._log(F)};clearTimeout(this._lastLog.timeout);let o=this._lastLog.time&&F.date?F.date.getTime()-this._lastLog.time.getTime():0;if(this._lastLog.time=F.date,o<this.options.throttle)try{let D=JSON.stringify([F.type,F.tag,F.args]),E=this._lastLog.serialized===D;if(this._lastLog.serialized=D,E){if(this._lastLog.count=(this._lastLog.count||0)+1,this._lastLog.count>this.options.throttleMin){this._lastLog.timeout=setTimeout(r,this.options.throttle);return}}}catch{}r(!0)}_log(u){for(let t of this.options.reporters)t.log(u,{options:this.options})}}function S(u,t={},e=3){if(u===void 0)return e;if(typeof u==="number")return u;if(t[u]&&t[u].level!==void 0)return t[u].level;return e}i.prototype.add=i.prototype.addReporter;i.prototype.remove=i.prototype.removeReporter;i.prototype.clear=i.prototype.removeReporter;i.prototype.withScope=i.prototype.withTag;i.prototype.mock=i.prototype.mockTypes;i.prototype.pause=i.prototype.pauseLogs;i.prototype.resume=i.prototype.resumeLogs;function ED(u={}){return new i(u)}function j(u){let t=process.cwd()+nD;return u.split(`
@@ -20,5 +20,5 @@ import{P as q,R as X}from"./chunk-e794mmrn.js";import{createRequire as J}from"no
20
20
  `+F.join(`
21
21
  `):""),u.type==="trace"){let s=new Error("Trace: "+u.message);l+=this.formatStack(s.stack||"")}return D?`
22
22
  `+l+`
23
- `:l}}function v(u){return u.replace(/`([^`]+)`/gm,(t,e)=>B.cyan(e)).replace(/\s+_([^_]+)_\s+/gm,(t,e)=>` ${B.underline(e)} `)}function WD(u="white"){return B[u]||B.white}function YD(u="bgWhite"){return B[`bg${u[0].toUpperCase()}${u.slice(1)}`]||B.bgWhite}function VD(u={}){let t=ZD();if(process.env.CONSOLA_LEVEL)t=Number.parseInt(process.env.CONSOLA_LEVEL)??t;return ED({level:t,defaults:{level:t},stdout:process.stdout,stderr:process.stderr,prompt:(...e)=>import("./chunk-45dw2f5f.js").then((F)=>F.prompt(...e)),reporters:u.reporters||[u.fancy??!(TD||Z)?new H:new w],...u})}function ZD(){if(SD)return n.debug;if(Z)return n.warn;return n.info}var uu=VD();
24
- export{HD as I,KD as J,QD as K,B as L,ND as M,PD as N,uu as O};
23
+ `:l}}function v(u){return u.replace(/`([^`]+)`/gm,(t,e)=>B.cyan(e)).replace(/\s+_([^_]+)_\s+/gm,(t,e)=>` ${B.underline(e)} `)}function WD(u="white"){return B[u]||B.white}function YD(u="bgWhite"){return B[`bg${u[0].toUpperCase()}${u.slice(1)}`]||B.bgWhite}function VD(u={}){let t=ZD();if(process.env.CONSOLA_LEVEL)t=Number.parseInt(process.env.CONSOLA_LEVEL)??t;return ED({level:t,defaults:{level:t},stdout:process.stdout,stderr:process.stderr,prompt:(...e)=>import("./chunk-1j93wxbr.js").then((F)=>F.prompt(...e)),reporters:u.reporters||[u.fancy??!(TD||Z)?new H:new w],...u})}function ZD(){if(SD)return n.debug;if(Z)return n.warn;return n.info}var uu=VD();
24
+ export{HD as G,KD as H,QD as I,B as J,ND as K,PD as L,uu as M};
@@ -0,0 +1,45 @@
1
+ import"./chunk-7am1svx0.js";import m,{stdin as iD,stdout as sD}from"node:process";import V from"node:readline";import{WriteStream as CD}from"node:tty";function nD(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var _,I;function aD(){if(I)return _;I=1;let e="\x1B",u=`${e}[`,t="\x07",r={to(D,C){if(!C)return`${u}${D+1}G`;return`${u}${C+1};${D+1}H`},move(D,C){let s="";if(D<0)s+=`${u}${-D}D`;else if(D>0)s+=`${u}${D}C`;if(C<0)s+=`${u}${-C}A`;else if(C>0)s+=`${u}${C}B`;return s},up:(D=1)=>`${u}${D}A`,down:(D=1)=>`${u}${D}B`,forward:(D=1)=>`${u}${D}C`,backward:(D=1)=>`${u}${D}D`,nextLine:(D=1)=>`${u}E`.repeat(D),prevLine:(D=1)=>`${u}F`.repeat(D),left:`${u}G`,hide:`${u}?25l`,show:`${u}?25h`,save:`${e}7`,restore:`${e}8`},F={up:(D=1)=>`${u}S`.repeat(D),down:(D=1)=>`${u}T`.repeat(D)},n={screen:`${u}2J`,up:(D=1)=>`${u}1J`.repeat(D),down:(D=1)=>`${u}J`.repeat(D),line:`${u}2K`,lineEnd:`${u}K`,lineStart:`${u}1K`,lines(D){let C="";for(let s=0;s<D;s++)C+=this.line+(s<D-1?r.up():"");if(D)C+=r.left;return C}};return _={cursor:r,scroll:F,erase:n,beep:t},_}var p=aD(),$={exports:{}},W;function oD(){if(W)return $.exports;W=1;let e=process||{},u=e.argv||[],t=e.env||{},r=!(!!t.NO_COLOR||u.includes("--no-color"))&&(!!t.FORCE_COLOR||u.includes("--color")||e.platform==="win32"||(e.stdout||{}).isTTY&&t.TERM!=="dumb"||!!t.CI),F=(C,s,o=C)=>(c)=>{let a=""+c,h=a.indexOf(s,C.length);return~h?C+n(a,s,o,h)+s:C+a+s},n=(C,s,o,c)=>{let a="",h=0;do a+=C.substring(h,c)+o,h=c+s.length,c=C.indexOf(s,h);while(~c);return a+C.substring(h)},D=(C=r)=>{let s=C?F:()=>String;return{isColorSupported:C,reset:s("\x1B[0m","\x1B[0m"),bold:s("\x1B[1m","\x1B[22m","\x1B[22m\x1B[1m"),dim:s("\x1B[2m","\x1B[22m","\x1B[22m\x1B[2m"),italic:s("\x1B[3m","\x1B[23m"),underline:s("\x1B[4m","\x1B[24m"),inverse:s("\x1B[7m","\x1B[27m"),hidden:s("\x1B[8m","\x1B[28m"),strikethrough:s("\x1B[9m","\x1B[29m"),black:s("\x1B[30m","\x1B[39m"),red:s("\x1B[31m","\x1B[39m"),green:s("\x1B[32m","\x1B[39m"),yellow:s("\x1B[33m","\x1B[39m"),blue:s("\x1B[34m","\x1B[39m"),magenta:s("\x1B[35m","\x1B[39m"),cyan:s("\x1B[36m","\x1B[39m"),white:s("\x1B[37m","\x1B[39m"),gray:s("\x1B[90m","\x1B[39m"),bgBlack:s("\x1B[40m","\x1B[49m"),bgRed:s("\x1B[41m","\x1B[49m"),bgGreen:s("\x1B[42m","\x1B[49m"),bgYellow:s("\x1B[43m","\x1B[49m"),bgBlue:s("\x1B[44m","\x1B[49m"),bgMagenta:s("\x1B[45m","\x1B[49m"),bgCyan:s("\x1B[46m","\x1B[49m"),bgWhite:s("\x1B[47m","\x1B[49m"),blackBright:s("\x1B[90m","\x1B[39m"),redBright:s("\x1B[91m","\x1B[39m"),greenBright:s("\x1B[92m","\x1B[39m"),yellowBright:s("\x1B[93m","\x1B[39m"),blueBright:s("\x1B[94m","\x1B[39m"),magentaBright:s("\x1B[95m","\x1B[39m"),cyanBright:s("\x1B[96m","\x1B[39m"),whiteBright:s("\x1B[97m","\x1B[39m"),bgBlackBright:s("\x1B[100m","\x1B[49m"),bgRedBright:s("\x1B[101m","\x1B[49m"),bgGreenBright:s("\x1B[102m","\x1B[49m"),bgYellowBright:s("\x1B[103m","\x1B[49m"),bgBlueBright:s("\x1B[104m","\x1B[49m"),bgMagentaBright:s("\x1B[105m","\x1B[49m"),bgCyanBright:s("\x1B[106m","\x1B[49m"),bgWhiteBright:s("\x1B[107m","\x1B[49m")}};return $.exports=D(),$.exports.createColors=D,$.exports}var ED=oD(),i=nD(ED);function lD({onlyFirst:e=!1}={}){let u=["[\\u001B\\u009B][[\\]()#;?]*(?:(?:(?:(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]+)*|[a-zA-Z\\d]+(?:;[-a-zA-Z\\d\\/#&.:=?%@~_]*)*)?(?:\\u0007|\\u001B\\u005C|\\u009C))","(?:(?:\\d{1,4}(?:;\\d{0,4})*)?[\\dA-PR-TZcf-nq-uy=><~]))"].join("|");return new RegExp(u,e?void 0:"g")}var cD=lD();function Z(e){if(typeof e!="string")throw new TypeError(`Expected a \`string\`, got \`${typeof e}\``);return e.replace(cD,"")}function H(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}var X={exports:{}};(function(e){var u={};e.exports=u,u.eastAsianWidth=function(r){var F=r.charCodeAt(0),n=r.length==2?r.charCodeAt(1):0,D=F;return 55296<=F&&F<=56319&&56320<=n&&n<=57343&&(F&=1023,n&=1023,D=F<<10|n,D+=65536),D==12288||65281<=D&&D<=65376||65504<=D&&D<=65510?"F":D==8361||65377<=D&&D<=65470||65474<=D&&D<=65479||65482<=D&&D<=65487||65490<=D&&D<=65495||65498<=D&&D<=65500||65512<=D&&D<=65518?"H":4352<=D&&D<=4447||4515<=D&&D<=4519||4602<=D&&D<=4607||9001<=D&&D<=9002||11904<=D&&D<=11929||11931<=D&&D<=12019||12032<=D&&D<=12245||12272<=D&&D<=12283||12289<=D&&D<=12350||12353<=D&&D<=12438||12441<=D&&D<=12543||12549<=D&&D<=12589||12593<=D&&D<=12686||12688<=D&&D<=12730||12736<=D&&D<=12771||12784<=D&&D<=12830||12832<=D&&D<=12871||12880<=D&&D<=13054||13056<=D&&D<=19903||19968<=D&&D<=42124||42128<=D&&D<=42182||43360<=D&&D<=43388||44032<=D&&D<=55203||55216<=D&&D<=55238||55243<=D&&D<=55291||63744<=D&&D<=64255||65040<=D&&D<=65049||65072<=D&&D<=65106||65108<=D&&D<=65126||65128<=D&&D<=65131||110592<=D&&D<=110593||127488<=D&&D<=127490||127504<=D&&D<=127546||127552<=D&&D<=127560||127568<=D&&D<=127569||131072<=D&&D<=194367||177984<=D&&D<=196605||196608<=D&&D<=262141?"W":32<=D&&D<=126||162<=D&&D<=163||165<=D&&D<=166||D==172||D==175||10214<=D&&D<=10221||10629<=D&&D<=10630?"Na":D==161||D==164||167<=D&&D<=168||D==170||173<=D&&D<=174||176<=D&&D<=180||182<=D&&D<=186||188<=D&&D<=191||D==198||D==208||215<=D&&D<=216||222<=D&&D<=225||D==230||232<=D&&D<=234||236<=D&&D<=237||D==240||242<=D&&D<=243||247<=D&&D<=250||D==252||D==254||D==257||D==273||D==275||D==283||294<=D&&D<=295||D==299||305<=D&&D<=307||D==312||319<=D&&D<=322||D==324||328<=D&&D<=331||D==333||338<=D&&D<=339||358<=D&&D<=359||D==363||D==462||D==464||D==466||D==468||D==470||D==472||D==474||D==476||D==593||D==609||D==708||D==711||713<=D&&D<=715||D==717||D==720||728<=D&&D<=731||D==733||D==735||768<=D&&D<=879||913<=D&&D<=929||931<=D&&D<=937||945<=D&&D<=961||963<=D&&D<=969||D==1025||1040<=D&&D<=1103||D==1105||D==8208||8211<=D&&D<=8214||8216<=D&&D<=8217||8220<=D&&D<=8221||8224<=D&&D<=8226||8228<=D&&D<=8231||D==8240||8242<=D&&D<=8243||D==8245||D==8251||D==8254||D==8308||D==8319||8321<=D&&D<=8324||D==8364||D==8451||D==8453||D==8457||D==8467||D==8470||8481<=D&&D<=8482||D==8486||D==8491||8531<=D&&D<=8532||8539<=D&&D<=8542||8544<=D&&D<=8555||8560<=D&&D<=8569||D==8585||8592<=D&&D<=8601||8632<=D&&D<=8633||D==8658||D==8660||D==8679||D==8704||8706<=D&&D<=8707||8711<=D&&D<=8712||D==8715||D==8719||D==8721||D==8725||D==8730||8733<=D&&D<=8736||D==8739||D==8741||8743<=D&&D<=8748||D==8750||8756<=D&&D<=8759||8764<=D&&D<=8765||D==8776||D==8780||D==8786||8800<=D&&D<=8801||8804<=D&&D<=8807||8810<=D&&D<=8811||8814<=D&&D<=8815||8834<=D&&D<=8835||8838<=D&&D<=8839||D==8853||D==8857||D==8869||D==8895||D==8978||9312<=D&&D<=9449||9451<=D&&D<=9547||9552<=D&&D<=9587||9600<=D&&D<=9615||9618<=D&&D<=9621||9632<=D&&D<=9633||9635<=D&&D<=9641||9650<=D&&D<=9651||9654<=D&&D<=9655||9660<=D&&D<=9661||9664<=D&&D<=9665||9670<=D&&D<=9672||D==9675||9678<=D&&D<=9681||9698<=D&&D<=9701||D==9711||9733<=D&&D<=9734||D==9737||9742<=D&&D<=9743||9748<=D&&D<=9749||D==9756||D==9758||D==9792||D==9794||9824<=D&&D<=9825||9827<=D&&D<=9829||9831<=D&&D<=9834||9836<=D&&D<=9837||D==9839||9886<=D&&D<=9887||9918<=D&&D<=9919||9924<=D&&D<=9933||9935<=D&&D<=9953||D==9955||9960<=D&&D<=9983||D==10045||D==10071||10102<=D&&D<=10111||11093<=D&&D<=11097||12872<=D&&D<=12879||57344<=D&&D<=63743||65024<=D&&D<=65039||D==65533||127232<=D&&D<=127242||127248<=D&&D<=127277||127280<=D&&D<=127337||127344<=D&&D<=127386||917760<=D&&D<=917999||983040<=D&&D<=1048573||1048576<=D&&D<=1114109?"A":"N"},u.characterLength=function(r){var F=this.eastAsianWidth(r);return F=="F"||F=="W"||F=="A"?2:1};function t(r){return r.match(/[\uD800-\uDBFF][\uDC00-\uDFFF]|[^\uD800-\uDFFF]/g)||[]}u.length=function(r){for(var F=t(r),n=0,D=0;D<F.length;D++)n=n+this.characterLength(F[D]);return n},u.slice=function(r,F,n){textLen=u.length(r),F=F||0,n=n||1,F<0&&(F=textLen+F),n<0&&(n=textLen+n);for(var D="",C=0,s=t(r),o=0;o<s.length;o++){var c=s[o],a=u.length(c);if(C>=F-(a==2?1:0))if(C+a<=n)D+=c;else break;C+=a}return D}})(X);var hD=X.exports,BD=H(hD),mD=function(){return/\uD83C\uDFF4\uDB40\uDC67\uDB40\uDC62(?:\uDB40\uDC77\uDB40\uDC6C\uDB40\uDC73|\uDB40\uDC73\uDB40\uDC63\uDB40\uDC74|\uDB40\uDC65\uDB40\uDC6E\uDB40\uDC67)\uDB40\uDC7F|(?:\uD83E\uDDD1\uD83C\uDFFF\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFF\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFE])|(?:\uD83E\uDDD1\uD83C\uDFFE\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFE\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFD\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFD\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFC\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFC\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|(?:\uD83E\uDDD1\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83E\uDDD1|\uD83D\uDC69\uD83C\uDFFB\u200D\uD83E\uDD1D\u200D(?:\uD83D[\uDC68\uDC69]))(?:\uD83C[\uDFFC-\uDFFF])|\uD83D\uDC68(?:\uD83C\uDFFB(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFC-\uDFFF])|[\u2695\u2696\u2708]\uFE0F|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))?|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFF]))|\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D)?\uD83D\uDC68|(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFE])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB-\uDFFD\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFC\uDFFE\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83E\uDD1D\u200D\uD83D\uDC68(?:\uD83C[\uDFFB\uDFFD-\uDFFF])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])\uFE0F|\u200D(?:(?:\uD83D[\uDC68\uDC69])\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D[\uDC66\uDC67])|\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC)?|(?:\uD83D\uDC69(?:\uD83C\uDFFB\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|(?:\uD83C[\uDFFC-\uDFFF])\u200D\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69]))|\uD83E\uDDD1(?:\uD83C[\uDFFB-\uDFFF])\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1)(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67]))|\uD83D\uDC69(?:\u200D(?:\u2764\uFE0F\u200D(?:\uD83D\uDC8B\u200D(?:\uD83D[\uDC68\uDC69])|\uD83D[\uDC68\uDC69])|\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83E\uDDD1(?:\u200D(?:\uD83E\uDD1D\u200D\uD83E\uDDD1|\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFF\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFE\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFD\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFC\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD])|\uD83C\uDFFB\u200D(?:\uD83C[\uDF3E\uDF73\uDF7C\uDF84\uDF93\uDFA4\uDFA8\uDFEB\uDFED]|\uD83D[\uDCBB\uDCBC\uDD27\uDD2C\uDE80\uDE92]|\uD83E[\uDDAF-\uDDB3\uDDBC\uDDBD]))|\uD83D\uDC69\u200D\uD83D\uDC66\u200D\uD83D\uDC66|\uD83D\uDC69\u200D\uD83D\uDC69\u200D(?:\uD83D[\uDC66\uDC67])|\uD83D\uDC69\u200D\uD83D\uDC67\u200D(?:\uD83D[\uDC66\uDC67])|(?:\uD83D\uDC41\uFE0F\u200D\uD83D\uDDE8|\uD83E\uDDD1(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDC69(?:\uD83C\uDFFF\u200D[\u2695\u2696\u2708]|\uD83C\uDFFE\u200D[\u2695\u2696\u2708]|\uD83C\uDFFD\u200D[\u2695\u2696\u2708]|\uD83C\uDFFC\u200D[\u2695\u2696\u2708]|\uD83C\uDFFB\u200D[\u2695\u2696\u2708]|\u200D[\u2695\u2696\u2708])|\uD83D\uDE36\u200D\uD83C\uDF2B|\uD83C\uDFF3\uFE0F\u200D\u26A7|\uD83D\uDC3B\u200D\u2744|(?:(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF])\u200D[\u2640\u2642]|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])\u200D[\u2640\u2642]|\uD83C\uDFF4\u200D\u2620|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])\u200D[\u2640\u2642]|[\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u2328\u23CF\u23ED-\u23EF\u23F1\u23F2\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB\u25FC\u2600-\u2604\u260E\u2611\u2618\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u2692\u2694-\u2697\u2699\u269B\u269C\u26A0\u26A7\u26B0\u26B1\u26C8\u26CF\u26D1\u26D3\u26E9\u26F0\u26F1\u26F4\u26F7\u26F8\u2702\u2708\u2709\u270F\u2712\u2714\u2716\u271D\u2721\u2733\u2734\u2744\u2747\u2763\u27A1\u2934\u2935\u2B05-\u2B07\u3030\u303D\u3297\u3299]|\uD83C[\uDD70\uDD71\uDD7E\uDD7F\uDE02\uDE37\uDF21\uDF24-\uDF2C\uDF36\uDF7D\uDF96\uDF97\uDF99-\uDF9B\uDF9E\uDF9F\uDFCD\uDFCE\uDFD4-\uDFDF\uDFF5\uDFF7]|\uD83D[\uDC3F\uDCFD\uDD49\uDD4A\uDD6F\uDD70\uDD73\uDD76-\uDD79\uDD87\uDD8A-\uDD8D\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA\uDECB\uDECD-\uDECF\uDEE0-\uDEE5\uDEE9\uDEF0\uDEF3])\uFE0F|\uD83C\uDFF3\uFE0F\u200D\uD83C\uDF08|\uD83D\uDC69\u200D\uD83D\uDC67|\uD83D\uDC69\u200D\uD83D\uDC66|\uD83D\uDE35\u200D\uD83D\uDCAB|\uD83D\uDE2E\u200D\uD83D\uDCA8|\uD83D\uDC15\u200D\uD83E\uDDBA|\uD83E\uDDD1(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83D\uDC69(?:\uD83C\uDFFF|\uD83C\uDFFE|\uD83C\uDFFD|\uD83C\uDFFC|\uD83C\uDFFB)?|\uD83C\uDDFD\uD83C\uDDF0|\uD83C\uDDF6\uD83C\uDDE6|\uD83C\uDDF4\uD83C\uDDF2|\uD83D\uDC08\u200D\u2B1B|\u2764\uFE0F\u200D(?:\uD83D\uDD25|\uD83E\uDE79)|\uD83D\uDC41\uFE0F|\uD83C\uDFF3\uFE0F|\uD83C\uDDFF(?:\uD83C[\uDDE6\uDDF2\uDDFC])|\uD83C\uDDFE(?:\uD83C[\uDDEA\uDDF9])|\uD83C\uDDFC(?:\uD83C[\uDDEB\uDDF8])|\uD83C\uDDFB(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDEE\uDDF3\uDDFA])|\uD83C\uDDFA(?:\uD83C[\uDDE6\uDDEC\uDDF2\uDDF3\uDDF8\uDDFE\uDDFF])|\uD83C\uDDF9(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDED\uDDEF-\uDDF4\uDDF7\uDDF9\uDDFB\uDDFC\uDDFF])|\uD83C\uDDF8(?:\uD83C[\uDDE6-\uDDEA\uDDEC-\uDDF4\uDDF7-\uDDF9\uDDFB\uDDFD-\uDDFF])|\uD83C\uDDF7(?:\uD83C[\uDDEA\uDDF4\uDDF8\uDDFA\uDDFC])|\uD83C\uDDF5(?:\uD83C[\uDDE6\uDDEA-\uDDED\uDDF0-\uDDF3\uDDF7-\uDDF9\uDDFC\uDDFE])|\uD83C\uDDF3(?:\uD83C[\uDDE6\uDDE8\uDDEA-\uDDEC\uDDEE\uDDF1\uDDF4\uDDF5\uDDF7\uDDFA\uDDFF])|\uD83C\uDDF2(?:\uD83C[\uDDE6\uDDE8-\uDDED\uDDF0-\uDDFF])|\uD83C\uDDF1(?:\uD83C[\uDDE6-\uDDE8\uDDEE\uDDF0\uDDF7-\uDDFB\uDDFE])|\uD83C\uDDF0(?:\uD83C[\uDDEA\uDDEC-\uDDEE\uDDF2\uDDF3\uDDF5\uDDF7\uDDFC\uDDFE\uDDFF])|\uD83C\uDDEF(?:\uD83C[\uDDEA\uDDF2\uDDF4\uDDF5])|\uD83C\uDDEE(?:\uD83C[\uDDE8-\uDDEA\uDDF1-\uDDF4\uDDF6-\uDDF9])|\uD83C\uDDED(?:\uD83C[\uDDF0\uDDF2\uDDF3\uDDF7\uDDF9\uDDFA])|\uD83C\uDDEC(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEE\uDDF1-\uDDF3\uDDF5-\uDDFA\uDDFC\uDDFE])|\uD83C\uDDEB(?:\uD83C[\uDDEE-\uDDF0\uDDF2\uDDF4\uDDF7])|\uD83C\uDDEA(?:\uD83C[\uDDE6\uDDE8\uDDEA\uDDEC\uDDED\uDDF7-\uDDFA])|\uD83C\uDDE9(?:\uD83C[\uDDEA\uDDEC\uDDEF\uDDF0\uDDF2\uDDF4\uDDFF])|\uD83C\uDDE8(?:\uD83C[\uDDE6\uDDE8\uDDE9\uDDEB-\uDDEE\uDDF0-\uDDF5\uDDF7\uDDFA-\uDDFF])|\uD83C\uDDE7(?:\uD83C[\uDDE6\uDDE7\uDDE9-\uDDEF\uDDF1-\uDDF4\uDDF6-\uDDF9\uDDFB\uDDFC\uDDFE\uDDFF])|\uD83C\uDDE6(?:\uD83C[\uDDE8-\uDDEC\uDDEE\uDDF1\uDDF2\uDDF4\uDDF6-\uDDFA\uDDFC\uDDFD\uDDFF])|[#\*0-9]\uFE0F\u20E3|\u2764\uFE0F|(?:\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD])(?:\uD83C[\uDFFB-\uDFFF])|(?:\u26F9|\uD83C[\uDFCB\uDFCC]|\uD83D\uDD75)(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|\uD83C\uDFF4|(?:[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5])(?:\uD83C[\uDFFB-\uDFFF])|(?:[\u261D\u270C\u270D]|\uD83D[\uDD74\uDD90])(?:\uFE0F|\uD83C[\uDFFB-\uDFFF])|[\u270A\u270B]|\uD83C[\uDF85\uDFC2\uDFC7]|\uD83D[\uDC08\uDC15\uDC3B\uDC42\uDC43\uDC46-\uDC50\uDC66\uDC67\uDC6B-\uDC6D\uDC72\uDC74-\uDC76\uDC78\uDC7C\uDC83\uDC85\uDC8F\uDC91\uDCAA\uDD7A\uDD95\uDD96\uDE2E\uDE35\uDE36\uDE4C\uDE4F\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1C\uDD1E\uDD1F\uDD30-\uDD34\uDD36\uDD77\uDDB5\uDDB6\uDDBB\uDDD2\uDDD3\uDDD5]|\uD83C[\uDFC3\uDFC4\uDFCA]|\uD83D[\uDC6E\uDC70\uDC71\uDC73\uDC77\uDC81\uDC82\uDC86\uDC87\uDE45-\uDE47\uDE4B\uDE4D\uDE4E\uDEA3\uDEB4-\uDEB6]|\uD83E[\uDD26\uDD35\uDD37-\uDD39\uDD3D\uDD3E\uDDB8\uDDB9\uDDCD-\uDDCF\uDDD4\uDDD6-\uDDDD]|\uD83D\uDC6F|\uD83E[\uDD3C\uDDDE\uDDDF]|[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF84\uDF86-\uDF93\uDFA0-\uDFC1\uDFC5\uDFC6\uDFC8\uDFC9\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC07\uDC09-\uDC14\uDC16-\uDC3A\uDC3C-\uDC3E\uDC40\uDC44\uDC45\uDC51-\uDC65\uDC6A\uDC79-\uDC7B\uDC7D-\uDC80\uDC84\uDC88-\uDC8E\uDC90\uDC92-\uDCA9\uDCAB-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDDA4\uDDFB-\uDE2D\uDE2F-\uDE34\uDE37-\uDE44\uDE48-\uDE4A\uDE80-\uDEA2\uDEA4-\uDEB3\uDEB7-\uDEBF\uDEC1-\uDEC5\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0D\uDD0E\uDD10-\uDD17\uDD1D\uDD20-\uDD25\uDD27-\uDD2F\uDD3A\uDD3F-\uDD45\uDD47-\uDD76\uDD78\uDD7A-\uDDB4\uDDB7\uDDBA\uDDBC-\uDDCB\uDDD0\uDDE0-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6]|(?:[\u231A\u231B\u23E9-\u23EC\u23F0\u23F3\u25FD\u25FE\u2614\u2615\u2648-\u2653\u267F\u2693\u26A1\u26AA\u26AB\u26BD\u26BE\u26C4\u26C5\u26CE\u26D4\u26EA\u26F2\u26F3\u26F5\u26FA\u26FD\u2705\u270A\u270B\u2728\u274C\u274E\u2753-\u2755\u2757\u2795-\u2797\u27B0\u27BF\u2B1B\u2B1C\u2B50\u2B55]|\uD83C[\uDC04\uDCCF\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE1A\uDE2F\uDE32-\uDE36\uDE38-\uDE3A\uDE50\uDE51\uDF00-\uDF20\uDF2D-\uDF35\uDF37-\uDF7C\uDF7E-\uDF93\uDFA0-\uDFCA\uDFCF-\uDFD3\uDFE0-\uDFF0\uDFF4\uDFF8-\uDFFF]|\uD83D[\uDC00-\uDC3E\uDC40\uDC42-\uDCFC\uDCFF-\uDD3D\uDD4B-\uDD4E\uDD50-\uDD67\uDD7A\uDD95\uDD96\uDDA4\uDDFB-\uDE4F\uDE80-\uDEC5\uDECC\uDED0-\uDED2\uDED5-\uDED7\uDEEB\uDEEC\uDEF4-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])|(?:[#\*0-9\xA9\xAE\u203C\u2049\u2122\u2139\u2194-\u2199\u21A9\u21AA\u231A\u231B\u2328\u23CF\u23E9-\u23F3\u23F8-\u23FA\u24C2\u25AA\u25AB\u25B6\u25C0\u25FB-\u25FE\u2600-\u2604\u260E\u2611\u2614\u2615\u2618\u261D\u2620\u2622\u2623\u2626\u262A\u262E\u262F\u2638-\u263A\u2640\u2642\u2648-\u2653\u265F\u2660\u2663\u2665\u2666\u2668\u267B\u267E\u267F\u2692-\u2697\u2699\u269B\u269C\u26A0\u26A1\u26A7\u26AA\u26AB\u26B0\u26B1\u26BD\u26BE\u26C4\u26C5\u26C8\u26CE\u26CF\u26D1\u26D3\u26D4\u26E9\u26EA\u26F0-\u26F5\u26F7-\u26FA\u26FD\u2702\u2705\u2708-\u270D\u270F\u2712\u2714\u2716\u271D\u2721\u2728\u2733\u2734\u2744\u2747\u274C\u274E\u2753-\u2755\u2757\u2763\u2764\u2795-\u2797\u27A1\u27B0\u27BF\u2934\u2935\u2B05-\u2B07\u2B1B\u2B1C\u2B50\u2B55\u3030\u303D\u3297\u3299]|\uD83C[\uDC04\uDCCF\uDD70\uDD71\uDD7E\uDD7F\uDD8E\uDD91-\uDD9A\uDDE6-\uDDFF\uDE01\uDE02\uDE1A\uDE2F\uDE32-\uDE3A\uDE50\uDE51\uDF00-\uDF21\uDF24-\uDF93\uDF96\uDF97\uDF99-\uDF9B\uDF9E-\uDFF0\uDFF3-\uDFF5\uDFF7-\uDFFF]|\uD83D[\uDC00-\uDCFD\uDCFF-\uDD3D\uDD49-\uDD4E\uDD50-\uDD67\uDD6F\uDD70\uDD73-\uDD7A\uDD87\uDD8A-\uDD8D\uDD90\uDD95\uDD96\uDDA4\uDDA5\uDDA8\uDDB1\uDDB2\uDDBC\uDDC2-\uDDC4\uDDD1-\uDDD3\uDDDC-\uDDDE\uDDE1\uDDE3\uDDE8\uDDEF\uDDF3\uDDFA-\uDE4F\uDE80-\uDEC5\uDECB-\uDED2\uDED5-\uDED7\uDEE0-\uDEE5\uDEE9\uDEEB\uDEEC\uDEF0\uDEF3-\uDEFC\uDFE0-\uDFEB]|\uD83E[\uDD0C-\uDD3A\uDD3C-\uDD45\uDD47-\uDD78\uDD7A-\uDDCB\uDDCD-\uDDFF\uDE70-\uDE74\uDE78-\uDE7A\uDE80-\uDE86\uDE90-\uDEA8\uDEB0-\uDEB6\uDEC0-\uDEC2\uDED0-\uDED6])\uFE0F|(?:[\u261D\u26F9\u270A-\u270D]|\uD83C[\uDF85\uDFC2-\uDFC4\uDFC7\uDFCA-\uDFCC]|\uD83D[\uDC42\uDC43\uDC46-\uDC50\uDC66-\uDC78\uDC7C\uDC81-\uDC83\uDC85-\uDC87\uDC8F\uDC91\uDCAA\uDD74\uDD75\uDD7A\uDD90\uDD95\uDD96\uDE45-\uDE47\uDE4B-\uDE4F\uDEA3\uDEB4-\uDEB6\uDEC0\uDECC]|\uD83E[\uDD0C\uDD0F\uDD18-\uDD1F\uDD26\uDD30-\uDD39\uDD3C-\uDD3E\uDD77\uDDB5\uDDB6\uDDB8\uDDB9\uDDBB\uDDCD-\uDDCF\uDDD1-\uDDDD])/g},pD=H(mD);function A(e,u={}){if(typeof e!="string"||e.length===0||(u={ambiguousIsNarrow:!0,...u},e=Z(e),e.length===0))return 0;e=e.replace(pD()," ");let t=u.ambiguousIsNarrow?1:2,r=0;for(let F of e){let n=F.codePointAt(0);if(n<=31||n>=127&&n<=159||n>=768&&n<=879)continue;switch(BD.eastAsianWidth(F)){case"F":case"W":r+=2;break;case"A":r+=t;break;default:r+=1}}return r}var k=10,P=(e=0)=>(u)=>`\x1B[${u+e}m`,L=(e=0)=>(u)=>`\x1B[${38+e};5;${u}m`,N=(e=0)=>(u,t,r)=>`\x1B[${38+e};2;${u};${t};${r}m`,l={modifier:{reset:[0,0],bold:[1,22],dim:[2,22],italic:[3,23],underline:[4,24],overline:[53,55],inverse:[7,27],hidden:[8,28],strikethrough:[9,29]},color:{black:[30,39],red:[31,39],green:[32,39],yellow:[33,39],blue:[34,39],magenta:[35,39],cyan:[36,39],white:[37,39],blackBright:[90,39],gray:[90,39],grey:[90,39],redBright:[91,39],greenBright:[92,39],yellowBright:[93,39],blueBright:[94,39],magentaBright:[95,39],cyanBright:[96,39],whiteBright:[97,39]},bgColor:{bgBlack:[40,49],bgRed:[41,49],bgGreen:[42,49],bgYellow:[43,49],bgBlue:[44,49],bgMagenta:[45,49],bgCyan:[46,49],bgWhite:[47,49],bgBlackBright:[100,49],bgGray:[100,49],bgGrey:[100,49],bgRedBright:[101,49],bgGreenBright:[102,49],bgYellowBright:[103,49],bgBlueBright:[104,49],bgMagentaBright:[105,49],bgCyanBright:[106,49],bgWhiteBright:[107,49]}};Object.keys(l.modifier);var bD=Object.keys(l.color),dD=Object.keys(l.bgColor);[...bD];function gD(){let e=new Map;for(let[u,t]of Object.entries(l)){for(let[r,F]of Object.entries(t))l[r]={open:`\x1B[${F[0]}m`,close:`\x1B[${F[1]}m`},t[r]=l[r],e.set(F[0],F[1]);Object.defineProperty(l,u,{value:t,enumerable:!1})}return Object.defineProperty(l,"codes",{value:e,enumerable:!1}),l.color.close="\x1B[39m",l.bgColor.close="\x1B[49m",l.color.ansi=P(),l.color.ansi256=L(),l.color.ansi16m=N(),l.bgColor.ansi=P(k),l.bgColor.ansi256=L(k),l.bgColor.ansi16m=N(k),Object.defineProperties(l,{rgbToAnsi256:{value:(u,t,r)=>u===t&&t===r?u<8?16:u>248?231:Math.round((u-8)/247*24)+232:16+36*Math.round(u/255*5)+6*Math.round(t/255*5)+Math.round(r/255*5),enumerable:!1},hexToRgb:{value:(u)=>{let t=/[a-f\d]{6}|[a-f\d]{3}/i.exec(u.toString(16));if(!t)return[0,0,0];let[r]=t;r.length===3&&(r=[...r].map((n)=>n+n).join(""));let F=Number.parseInt(r,16);return[F>>16&255,F>>8&255,F&255]},enumerable:!1},hexToAnsi256:{value:(u)=>l.rgbToAnsi256(...l.hexToRgb(u)),enumerable:!1},ansi256ToAnsi:{value:(u)=>{if(u<8)return 30+u;if(u<16)return 90+(u-8);let t,r,F;if(u>=232)t=((u-232)*10+8)/255,r=t,F=t;else{u-=16;let C=u%36;t=Math.floor(u/36)/5,r=Math.floor(C/6)/5,F=C%6/5}let n=Math.max(t,r,F)*2;if(n===0)return 30;let D=30+(Math.round(F)<<2|Math.round(r)<<1|Math.round(t));return n===2&&(D+=60),D},enumerable:!1},rgbToAnsi:{value:(u,t,r)=>l.ansi256ToAnsi(l.rgbToAnsi256(u,t,r)),enumerable:!1},hexToAnsi:{value:(u)=>l.ansi256ToAnsi(l.hexToAnsi256(u)),enumerable:!1}}),l}var AD=gD(),y=new Set(["\x1B","›"]),fD=39,O="\x07",Q="[",$D="]",DD="m",R=`${$D}8;;`,q=(e)=>`${y.values().next().value}${Q}${e}${DD}`,G=(e)=>`${y.values().next().value}${R}${e}${O}`,vD=(e)=>e.split(" ").map((u)=>A(u)),M=(e,u,t)=>{let r=[...u],F=!1,n=!1,D=A(Z(e[e.length-1]));for(let[C,s]of r.entries()){let o=A(s);if(D+o<=t?e[e.length-1]+=s:(e.push(s),D=0),y.has(s)&&(F=!0,n=r.slice(C+1).join("").startsWith(R)),F){n?s===O&&(F=!1,n=!1):s===DD&&(F=!1);continue}D+=o,D===t&&C<r.length-1&&(e.push(""),D=0)}!D&&e[e.length-1].length>0&&e.length>1&&(e[e.length-2]+=e.pop())},xD=(e)=>{let u=e.split(" "),t=u.length;for(;t>0&&!(A(u[t-1])>0);)t--;return t===u.length?e:u.slice(0,t).join(" ")+u.slice(t).join("")},yD=(e,u,t={})=>{if(t.trim!==!1&&e.trim()==="")return"";let r="",F,n,D=vD(e),C=[""];for(let[o,c]of e.split(" ").entries()){t.trim!==!1&&(C[C.length-1]=C[C.length-1].trimStart());let a=A(C[C.length-1]);if(o!==0&&(a>=u&&(t.wordWrap===!1||t.trim===!1)&&(C.push(""),a=0),(a>0||t.trim===!1)&&(C[C.length-1]+=" ",a++)),t.hard&&D[o]>u){let h=u-a,d=1+Math.floor((D[o]-h-1)/u);Math.floor((D[o]-1)/u)<d&&C.push(""),M(C,c,u);continue}if(a+D[o]>u&&a>0&&D[o]>0){if(t.wordWrap===!1&&a<u){M(C,c,u);continue}C.push("")}if(a+D[o]>u&&t.wordWrap===!1){M(C,c,u);continue}C[C.length-1]+=c}t.trim!==!1&&(C=C.map((o)=>xD(o)));let s=[...C.join(`
2
+ `)];for(let[o,c]of s.entries()){if(r+=c,y.has(c)){let{groups:h}=new RegExp(`(?:\\${Q}(?<code>\\d+)m|\\${R}(?<uri>.*)${O})`).exec(s.slice(o).join(""))||{groups:{}};if(h.code!==void 0){let d=Number.parseFloat(h.code);F=d===fD?void 0:d}else h.uri!==void 0&&(n=h.uri.length===0?void 0:h.uri)}let a=AD.codes.get(Number(F));s[o+1]===`
3
+ `?(n&&(r+=G("")),F&&a&&(r+=q(a))):c===`
4
+ `&&(F&&a&&(r+=q(F)),n&&(r+=G(n)))}return r};function z(e,u,t){return String(e).normalize().replace(/\r\n/g,`
5
+ `).split(`
6
+ `).map((r)=>yD(r,u,t)).join(`
7
+ `)}var wD=["up","down","left","right","space","enter","cancel"],x={actions:new Set(wD),aliases:new Map([["k","up"],["j","down"],["h","left"],["l","right"],["\x03","cancel"],["escape","cancel"]])};function uD(e,u){if(typeof e=="string")return x.aliases.get(e)===u;for(let t of e)if(t!==void 0&&uD(t,u))return!0;return!1}function _D(e,u){if(e===u)return;let t=e.split(`
8
+ `),r=u.split(`
9
+ `),F=[];for(let n=0;n<Math.max(t.length,r.length);n++)t[n]!==r[n]&&F.push(n);return F}globalThis.process.platform.startsWith("win");var K=Symbol("clack:cancel");function v(e,u){let t=e;t.isTTY&&t.setRawMode(u)}var kD=Object.defineProperty,MD=(e,u,t)=>(u in e)?kD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,B=(e,u,t)=>(MD(e,typeof u!="symbol"?u+"":u,t),t);class f{constructor(e,u=!0){B(this,"input"),B(this,"output"),B(this,"_abortSignal"),B(this,"rl"),B(this,"opts"),B(this,"_render"),B(this,"_track",!1),B(this,"_prevFrame",""),B(this,"_subscribers",new Map),B(this,"_cursor",0),B(this,"state","initial"),B(this,"error",""),B(this,"value");let{input:t=iD,output:r=sD,render:F,signal:n,...D}=e;this.opts=D,this.onKeypress=this.onKeypress.bind(this),this.close=this.close.bind(this),this.render=this.render.bind(this),this._render=F.bind(this),this._track=u,this._abortSignal=n,this.input=t,this.output=r}unsubscribe(){this._subscribers.clear()}setSubscriber(e,u){let t=this._subscribers.get(e)??[];t.push(u),this._subscribers.set(e,t)}on(e,u){this.setSubscriber(e,{cb:u})}once(e,u){this.setSubscriber(e,{cb:u,once:!0})}emit(e,...u){let t=this._subscribers.get(e)??[],r=[];for(let F of t)F.cb(...u),F.once&&r.push(()=>t.splice(t.indexOf(F),1));for(let F of r)F()}prompt(){return new Promise((e,u)=>{if(this._abortSignal){if(this._abortSignal.aborted)return this.state="cancel",this.close(),e(K);this._abortSignal.addEventListener("abort",()=>{this.state="cancel",this.close()},{once:!0})}let t=new CD(0);t._write=(r,F,n)=>{this._track&&(this.value=this.rl?.line.replace(/\t/g,""),this._cursor=this.rl?.cursor??0,this.emit("value",this.value)),n()},this.input.pipe(t),this.rl=V.createInterface({input:this.input,output:t,tabSize:2,prompt:"",escapeCodeTimeout:50}),V.emitKeypressEvents(this.input,this.rl),this.rl.prompt(),this.opts.initialValue!==void 0&&this._track&&this.rl.write(this.opts.initialValue),this.input.on("keypress",this.onKeypress),v(this.input,!0),this.output.on("resize",this.render),this.render(),this.once("submit",()=>{this.output.write(p.cursor.show),this.output.off("resize",this.render),v(this.input,!1),e(this.value)}),this.once("cancel",()=>{this.output.write(p.cursor.show),this.output.off("resize",this.render),v(this.input,!1),e(K)})})}onKeypress(e,u){if(this.state==="error"&&(this.state="active"),u?.name&&(!this._track&&x.aliases.has(u.name)&&this.emit("cursor",x.aliases.get(u.name)),x.actions.has(u.name)&&this.emit("cursor",u.name)),e&&(e.toLowerCase()==="y"||e.toLowerCase()==="n")&&this.emit("confirm",e.toLowerCase()==="y"),e==="\t"&&this.opts.placeholder&&(this.value||(this.rl?.write(this.opts.placeholder),this.emit("value",this.opts.placeholder))),e&&this.emit("key",e.toLowerCase()),u?.name==="return"){if(this.opts.validate){let t=this.opts.validate(this.value);t&&(this.error=t instanceof Error?t.message:t,this.state="error",this.rl?.write(this.value))}this.state!=="error"&&(this.state="submit")}uD([e,u?.name,u?.sequence],"cancel")&&(this.state="cancel"),(this.state==="submit"||this.state==="cancel")&&this.emit("finalize"),this.render(),(this.state==="submit"||this.state==="cancel")&&this.close()}close(){this.input.unpipe(),this.input.removeListener("keypress",this.onKeypress),this.output.write(`
10
+ `),v(this.input,!1),this.rl?.close(),this.rl=void 0,this.emit(`${this.state}`,this.value),this.unsubscribe()}restoreCursor(){let e=z(this._prevFrame,process.stdout.columns,{hard:!0}).split(`
11
+ `).length-1;this.output.write(p.cursor.move(-999,e*-1))}render(){let e=z(this._render(this)??"",process.stdout.columns,{hard:!0});if(e!==this._prevFrame){if(this.state==="initial")this.output.write(p.cursor.hide);else{let u=_D(this._prevFrame,e);if(this.restoreCursor(),u&&u?.length===1){let t=u[0];this.output.write(p.cursor.move(0,t)),this.output.write(p.erase.lines(1));let r=e.split(`
12
+ `);this.output.write(r[t]),this._prevFrame=e,this.output.write(p.cursor.move(0,r.length-t-1));return}if(u&&u?.length>1){let t=u[0];this.output.write(p.cursor.move(0,t)),this.output.write(p.erase.down());let r=e.split(`
13
+ `).slice(t);this.output.write(r.join(`
14
+ `)),this._prevFrame=e;return}this.output.write(p.erase.down())}this.output.write(e),this.state==="initial"&&(this.state="active"),this._prevFrame=e}}}class eD extends f{get cursor(){return this.value?0:1}get _value(){return this.cursor===0}constructor(e){super(e,!1),this.value=!!e.initialValue,this.on("value",()=>{this.value=this._value}),this.on("confirm",(u)=>{this.output.write(p.cursor.move(0,-1)),this.value=u,this.state="submit",this.close()}),this.on("cursor",()=>{this.value=!this.value})}}var SD=Object.defineProperty,TD=(e,u,t)=>(u in e)?SD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,Y=(e,u,t)=>(TD(e,typeof u!="symbol"?u+"":u,t),t),jD=class extends f{constructor(e){super(e,!1),Y(this,"options"),Y(this,"cursor",0),this.options=e.options,this.value=[...e.initialValues??[]],this.cursor=Math.max(this.options.findIndex(({value:u})=>u===e.cursorAt),0),this.on("key",(u)=>{u==="a"&&this.toggleAll()}),this.on("cursor",(u)=>{switch(u){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break;case"space":this.toggleValue();break}})}get _value(){return this.options[this.cursor].value}toggleAll(){let e=this.value.length===this.options.length;this.value=e?[]:this.options.map((u)=>u.value)}toggleValue(){let e=this.value.includes(this._value);this.value=e?this.value.filter((u)=>u!==this._value):[...this.value,this._value]}},OD=Object.defineProperty,RD=(e,u,t)=>(u in e)?OD(e,u,{enumerable:!0,configurable:!0,writable:!0,value:t}):e[u]=t,J=(e,u,t)=>(RD(e,typeof u!="symbol"?u+"":u,t),t);class tD extends f{constructor(e){super(e,!1),J(this,"options"),J(this,"cursor",0),this.options=e.options,this.cursor=this.options.findIndex(({value:u})=>u===e.initialValue),this.cursor===-1&&(this.cursor=0),this.changeValue(),this.on("cursor",(u)=>{switch(u){case"left":case"up":this.cursor=this.cursor===0?this.options.length-1:this.cursor-1;break;case"down":case"right":this.cursor=this.cursor===this.options.length-1?0:this.cursor+1;break}this.changeValue()})}get _value(){return this.options[this.cursor]}changeValue(){this.value=this._value.value}}class rD extends f{get valueWithCursor(){if(this.state==="submit")return this.value;if(this.cursor>=this.value.length)return`${this.value}█`;let e=this.value.slice(0,this.cursor),[u,...t]=this.value.slice(this.cursor);return`${e}${i.inverse(u)}${t.join("")}`}get cursor(){return this._cursor}constructor(e){super(e),this.on("finalize",()=>{this.value||(this.value=e.defaultValue)})}}function VD(){return m.platform!=="win32"?m.env.TERM!=="linux":!!m.env.CI||!!m.env.WT_SESSION||!!m.env.TERMINUS_SUBLIME||m.env.ConEmuTask==="{cmd::Cmder}"||m.env.TERM_PROGRAM==="Terminus-Sublime"||m.env.TERM_PROGRAM==="vscode"||m.env.TERM==="xterm-256color"||m.env.TERM==="alacritty"||m.env.TERMINAL_EMULATOR==="JetBrains-JediTerm"}var ID=VD(),b=(e,u)=>ID?e:u,WD=b("❯",">"),PD=b("■","x"),LD=b("▲","x"),ND=b("✔","√"),E=b(""),g=b(""),S=b("●",">"),T=b("○"," "),qD=b("◻","[•]"),U=b("◼","[+]"),GD=b("◻","[ ]"),w=(e)=>{switch(e){case"initial":case"active":return i.cyan(WD);case"cancel":return i.red(PD);case"error":return i.yellow(LD);case"submit":return i.green(ND)}},j=(e)=>{let{cursor:u,options:t,style:r}=e,F=e.maxItems??Number.POSITIVE_INFINITY,n=Math.max(process.stdout.rows-4,0),D=Math.min(n,Math.max(F,5)),C=0;u>=C+D-3?C=Math.max(Math.min(u-D+3,t.length-D),0):u<C+2&&(C=Math.max(u-2,0));let s=D<t.length&&C>0,o=D<t.length&&C+D<t.length;return t.slice(C,C+D).map((c,a,h)=>{let d=a===0&&s,FD=a===h.length-1&&o;return d||FD?i.dim("..."):r(c,a+C===u)})},zD=(e)=>new rD({validate:e.validate,placeholder:e.placeholder,defaultValue:e.defaultValue,initialValue:e.initialValue,render(){let u=`${i.gray(E)}
15
+ ${w(this.state)} ${e.message}
16
+ `,t=e.placeholder?i.inverse(e.placeholder[0])+i.dim(e.placeholder.slice(1)):i.inverse(i.hidden("_")),r=this.value?this.valueWithCursor:t;switch(this.state){case"error":return`${u.trim()}
17
+ ${i.yellow(E)} ${r}
18
+ ${i.yellow(g)} ${i.yellow(this.error)}
19
+ `;case"submit":return`${u}${i.gray(E)} ${i.dim(this.value||e.placeholder)}`;case"cancel":return`${u}${i.gray(E)} ${i.strikethrough(i.dim(this.value??""))}${this.value?.trim()?`
20
+ ${i.gray(E)}`:""}`;default:return`${u}${i.cyan(E)} ${r}
21
+ ${i.cyan(g)}
22
+ `}}}).prompt(),KD=(e)=>{let u=e.active??"Yes",t=e.inactive??"No";return new eD({active:u,inactive:t,initialValue:e.initialValue??!0,render(){let r=`${i.gray(E)}
23
+ ${w(this.state)} ${e.message}
24
+ `,F=this.value?u:t;switch(this.state){case"submit":return`${r}${i.gray(E)} ${i.dim(F)}`;case"cancel":return`${r}${i.gray(E)} ${i.strikethrough(i.dim(F))}
25
+ ${i.gray(E)}`;default:return`${r}${i.cyan(E)} ${this.value?`${i.green(S)} ${u}`:`${i.dim(T)} ${i.dim(u)}`} ${i.dim("/")} ${this.value?`${i.dim(T)} ${i.dim(t)}`:`${i.green(S)} ${t}`}
26
+ ${i.cyan(g)}
27
+ `}}}).prompt()},YD=(e)=>{let u=(t,r)=>{let F=t.label??String(t.value);switch(r){case"selected":return`${i.dim(F)}`;case"active":return`${i.green(S)} ${F} ${t.hint?i.dim(`(${t.hint})`):""}`;case"cancelled":return`${i.strikethrough(i.dim(F))}`;default:return`${i.dim(T)} ${i.dim(F)}`}};return new tD({options:e.options,initialValue:e.initialValue,render(){let t=`${i.gray(E)}
28
+ ${w(this.state)} ${e.message}
29
+ `;switch(this.state){case"submit":return`${t}${i.gray(E)} ${u(this.options[this.cursor],"selected")}`;case"cancel":return`${t}${i.gray(E)} ${u(this.options[this.cursor],"cancelled")}
30
+ ${i.gray(E)}`;default:return`${t}${i.cyan(E)} ${j({cursor:this.cursor,options:this.options,maxItems:e.maxItems,style:(r,F)=>u(r,F?"active":"inactive")}).join(`
31
+ ${i.cyan(E)} `)}
32
+ ${i.cyan(g)}
33
+ `}}}).prompt()},JD=(e)=>{let u=(t,r)=>{let F=t.label??String(t.value);return r==="active"?`${i.cyan(qD)} ${F} ${t.hint?i.dim(`(${t.hint})`):""}`:r==="selected"?`${i.green(U)} ${i.dim(F)}`:r==="cancelled"?`${i.strikethrough(i.dim(F))}`:r==="active-selected"?`${i.green(U)} ${F} ${t.hint?i.dim(`(${t.hint})`):""}`:r==="submitted"?`${i.dim(F)}`:`${i.dim(GD)} ${i.dim(F)}`};return new jD({options:e.options,initialValues:e.initialValues,required:e.required??!0,cursorAt:e.cursorAt,validate(t){if(this.required&&t.length===0)return`Please select at least one option.
34
+ ${i.reset(i.dim(`Press ${i.gray(i.bgWhite(i.inverse(" space ")))} to select, ${i.gray(i.bgWhite(i.inverse(" enter ")))} to submit`))}`},render(){let t=`${i.gray(E)}
35
+ ${w(this.state)} ${e.message}
36
+ `,r=(F,n)=>{let D=this.value.includes(F.value);return n&&D?u(F,"active-selected"):D?u(F,"selected"):u(F,n?"active":"inactive")};switch(this.state){case"submit":return`${t}${i.gray(E)} ${this.options.filter(({value:F})=>this.value.includes(F)).map((F)=>u(F,"submitted")).join(i.dim(", "))||i.dim("none")}`;case"cancel":{let F=this.options.filter(({value:n})=>this.value.includes(n)).map((n)=>u(n,"cancelled")).join(i.dim(", "));return`${t}${i.gray(E)} ${F.trim()?`${F}
37
+ ${i.gray(E)}`:""}`}case"error":{let F=this.error.split(`
38
+ `).map((n,D)=>D===0?`${i.yellow(g)} ${i.yellow(n)}`:` ${n}`).join(`
39
+ `);return`${t+i.yellow(E)} ${j({options:this.options,cursor:this.cursor,maxItems:e.maxItems,style:r}).join(`
40
+ ${i.yellow(E)} `)}
41
+ ${F}
42
+ `}default:return`${t}${i.cyan(E)} ${j({options:this.options,cursor:this.cursor,maxItems:e.maxItems,style:r}).join(`
43
+ ${i.cyan(E)} `)}
44
+ ${i.cyan(g)}
45
+ `}}}).prompt()},UD=Symbol.for("cancel");async function ZD(e,u={}){let t=(r)=>{if(typeof r!=="symbol"||r.toString()!=="Symbol(clack:cancel)")return r;switch(u.cancel){case"reject":{let F=new Error("Prompt cancelled.");if(F.name="ConsolaPromptCancelledError",Error.captureStackTrace)Error.captureStackTrace(F,ZD);throw F}case"undefined":return;case"null":return null;case"symbol":return UD;default:case"default":return u.default??u.initial}};if(!u.type||u.type==="text")return await zD({message:e,defaultValue:u.default,placeholder:u.placeholder,initialValue:u.initial}).then(t);if(u.type==="confirm")return await KD({message:e,initialValue:u.initial}).then(t);if(u.type==="select")return await YD({message:e,options:u.options.map((r)=>typeof r==="string"?{value:r,label:r}:r),initialValue:u.initial}).then(t);if(u.type==="multiselect")return await JD({message:e,options:u.options.map((r)=>typeof r==="string"?{value:r,label:r}:r),required:u.required,initialValues:u.initial}).then(t);throw new Error(`Unknown prompt type: ${u.type}`)}export{ZD as prompt,UD as kCancel};
package/dist/config.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import type { ReverseProxyConfig } from './types';
1
+ import type { ProxyConfig } from './types';
2
2
 
3
- export declare const defaultConfig: ReverseProxyConfig;
4
- export declare const config: ReverseProxyConfig;
3
+ export declare const defaultConfig: ProxyConfig;
4
+ export declare const config: ProxyConfig;
package/dist/https.d.ts CHANGED
@@ -1,12 +1,12 @@
1
- import type { ReverseProxyConfigs, ReverseProxyOption, ReverseProxyOptions, TlsConfig } from './types';
1
+ import type { ProxyConfigs, ProxyOption, ProxyOptions, TlsConfig } from './types';
2
2
 
3
- export declare function resolveSSLPaths(options: ReverseProxyConfigs, defaultConfig: typeof config): TlsConfig;
3
+ export declare function resolveSSLPaths(options: ProxyConfigs, defaultConfig: typeof config): TlsConfig;
4
4
  export declare function generateWildcardPatterns(domain: string): string[];
5
- export declare function generateSSLPaths(options?: ReverseProxyOptions): void;
6
- export declare function getAllDomains(options: ReverseProxyOption | ReverseProxyOptions): Set<string>;
7
- export declare function loadSSLConfig(options: ReverseProxyOption): Promise<SSLConfig | null>;
8
- export declare function generateCertificate(options: ReverseProxyOptions): Promise<void>;
5
+ export declare function generateSSLPaths(options?: ProxyOptions): void;
6
+ export declare function getAllDomains(options: ProxyOption | ProxyOptions): Set<string>;
7
+ export declare function loadSSLConfig(options: ProxyOption): Promise<SSLConfig | null>;
8
+ export declare function generateCertificate(options: ProxyOptions): Promise<void>;
9
9
  export declare function getSSLConfig(): void;
10
- export declare function checkExistingCertificates(options?: ReverseProxyOptions): Promise<SSLConfig | null>;
11
- export declare function httpsConfig(options: ReverseProxyOption | ReverseProxyOptions, verbose?: boolean): TlsConfig;
10
+ export declare function checkExistingCertificates(options?: ProxyOptions): Promise<SSLConfig | null>;
11
+ export declare function httpsConfig(options: ProxyOption | ProxyOptions, verbose?: boolean): TlsConfig;
12
12
  export declare function cleanupCertificates(domain: string, verbose?: boolean): Promise<void>;
@@ -0,0 +1,152 @@
1
+ import type { ChildProcess } from 'node:child_process';
2
+ import type { StartOptions } from './types';
3
+
4
+ export declare interface ManagedProcess {
5
+ command: string
6
+ cwd: string
7
+ process: ChildProcess | null
8
+ env?: Record<string, string>
9
+ }
10
+ export declare class ProcessManager {
11
+ private processes: Map<string, ManagedProcess> = new Map()
12
+ private isShuttingDown = false
13
+
14
+ async startProcess(id: string, options: StartOptions, verbose?: boolean): Promise<void> {
15
+ if (this.processes.has(id)) {
16
+ debugLog('start', `Process ${id} is already running`, verbose)
17
+ return
18
+ }
19
+
20
+ const [cmd, ...args] = options.command.split(' ')
21
+ const cwd = options.cwd || process.cwd()
22
+
23
+ debugLog('start', `Starting process ${id}:`, verbose)
24
+ debugLog('start', ` Command: ${cmd} ${args.join(' ')}`, verbose)
25
+ debugLog('start', ` Working directory: ${cwd}`, verbose)
26
+ debugLog('start', ` Environment variables: ${JSON.stringify(options.env)}`, verbose)
27
+
28
+ const childProcess = spawn(cmd, args, {
29
+ cwd,
30
+ env: { ...process.env, ...options.env },
31
+ shell: true,
32
+ stdio: 'inherit',
33
+ })
34
+
35
+ this.processes.set(id, {
36
+ command: options.command,
37
+ cwd,
38
+ process: childProcess,
39
+ env: options.env,
40
+ })
41
+
42
+ return new Promise((resolve, reject) => {
43
+ childProcess.on('error', (err) => {
44
+ if (!this.isShuttingDown) {
45
+ debugLog('start', `Process ${id} failed to start: ${err}`, verbose)
46
+ this.processes.delete(id)
47
+ reject(err)
48
+ process.emit('SIGINT')
49
+ }
50
+ })
51
+
52
+ childProcess.on('exit', (code) => {
53
+ if (!this.isShuttingDown && code !== null && code !== 0) {
54
+ debugLog('start', `Process ${id} exited with code ${code}`, verbose)
55
+ this.processes.delete(id)
56
+ reject(new Error(`Process ${id} exited with code ${code}`))
57
+ process.emit('SIGINT')
58
+ }
59
+ })
60
+
61
+ if (verbose) {
62
+ childProcess.stdout?.on('data', (data) => {
63
+ debugLog('process', `[${id}] ${data.toString().trim()}`, true)
64
+ })
65
+
66
+ childProcess.stderr?.on('data', (data) => {
67
+ debugLog('process', `[${id}] ERR: ${data.toString().trim()}`, true)
68
+ })
69
+ }
70
+
71
+ setTimeout(() => {
72
+ if (!this.isShuttingDown && childProcess.killed) {
73
+ this.processes.delete(id)
74
+ reject(new Error(`Process ${id} was killed during startup`))
75
+ }
76
+ else {
77
+ debugLog('start', `Process ${id} started successfully`, verbose)
78
+ resolve()
79
+ }
80
+ }, 1000)
81
+ })
82
+ }
83
+
84
+ async stopProcess(id: string, verbose?: boolean): Promise<void> {
85
+ const managed = this.processes.get(id)
86
+ if (!managed?.process) {
87
+ debugLog('start', `No process found for ${id}`, verbose)
88
+ return
89
+ }
90
+
91
+ debugLog('start', `Stopping process ${id}`, verbose)
92
+
93
+ return new Promise((resolve) => {
94
+ if (!managed.process) {
95
+ resolve()
96
+ return
97
+ }
98
+
99
+ managed.process.once('exit', () => {
100
+ this.processes.delete(id)
101
+ debugLog('start', `Process ${id} stopped`, verbose)
102
+ resolve()
103
+ })
104
+
105
+ try {
106
+ managed.process.kill('SIGTERM')
107
+
108
+ setTimeout(() => {
109
+ if (managed.process) {
110
+ debugLog('start', `Force killing process ${id}`, verbose)
111
+ try {
112
+ managed.process.kill('SIGKILL')
113
+ }
114
+ catch (err) {
115
+ }
116
+ }
117
+ }, 3000)
118
+ }
119
+ catch (err) {
120
+ debugLog('start', `Error stopping process ${id}: ${err}`, verbose)
121
+ this.processes.delete(id)
122
+ resolve()
123
+ }
124
+ })
125
+ }
126
+
127
+ async stopAll(verbose?: boolean): Promise<void> {
128
+ if (this.isShuttingDown) {
129
+ debugLog('start', 'Already shutting down, skipping duplicate stopAll call', verbose)
130
+ return
131
+ }
132
+
133
+ this.isShuttingDown = true
134
+ debugLog('start', 'Stopping all processes', verbose)
135
+
136
+ const promises = Array.from(this.processes.keys()).map(id =>
137
+ this.stopProcess(id, verbose).catch((err) => {
138
+ log.error(`Failed to stop process ${id}:`, err)
139
+ }),
140
+ )
141
+
142
+ await Promise.allSettled(promises)
143
+ this.processes.clear()
144
+ this.isShuttingDown = false
145
+ }
146
+
147
+ isRunning(id: string): boolean {
148
+ const managed = this.processes.get(id)
149
+ return !!managed?.process && !managed.process.killed
150
+ }
151
+ }
152
+ export declare const processManager: ProcessManager;
package/dist/src/index.js CHANGED
@@ -1 +1 @@
1
- import{A as R,B as S,C as T,D as o,b as r,c as j,d as k,e as n,f as q,g as v,h as w,i as y,j as z,k as A,l as B,m as C,n as D,o as E,p as F,q as G,r as H,s as I,t as J,u as K,v as L,w as M,x as N,y as O,z as Q}from"../chunk-wn28gp4d.js";import"../chunk-en36kajt.js";import"../chunk-2y0c08hn.js";import"../chunk-e794mmrn.js";var i=o;export{Q as startServer,T as startProxy,o as startProxies,S as startHttpRedirectServer,R as setupReverseProxy,z as safeDeleteFile,E as resolveSSLPaths,C as removeHosts,I as loadSSLConfig,n as isValidRootCA,y as isSingleProxyOptions,w as isMultiProxyOptions,v as isMultiProxyConfig,M as httpsConfig,A as hostsFilePath,K as getSSLConfig,q as getPrimaryDomain,H as getAllDomains,F as generateWildcardPatterns,G as generateSSLPaths,J as generateCertificate,k as extractHostname,i as default,j as debugLog,r as config,N as cleanupCertificates,O as cleanup,D as checkHosts,L as checkExistingCertificates,B as addHosts};
1
+ import{A as Q,B as R,C as S,D as T,E as U,F as o,b as r,c as j,d as k,e as n,f as q,g as v,h as w,i as y,j as z,k as A,l as B,m as C,n as D,o as E,p as F,q as G,r as H,s as I,t as J,u as K,v as L,w as M,x as N,y as O}from"../chunk-1rkjbws7.js";import"../chunk-ny83tnrp.js";import"../chunk-7am1svx0.js";var i=o;export{R as startServer,U as startProxy,o as startProxies,T as startHttpRedirectServer,S as setupProxy,A as safeDeleteFile,F as resolveSSLPaths,D as removeHosts,J as loadSSLConfig,n as isValidRootCA,y as isSingleProxyOptions,z as isSingleProxyConfig,w as isMultiProxyOptions,v as isMultiProxyConfig,N as httpsConfig,B as hostsFilePath,L as getSSLConfig,q as getPrimaryDomain,I as getAllDomains,G as generateWildcardPatterns,H as generateSSLPaths,K as generateCertificate,k as extractHostname,i as default,j as debugLog,r as config,O as cleanupCertificates,Q as cleanup,E as checkHosts,M as checkExistingCertificates,C as addHosts};
package/dist/start.d.ts CHANGED
@@ -1,12 +1,94 @@
1
- import type { CleanupOptions, ProxySetupOptions, ReverseProxyOption, ReverseProxyOptions, SingleReverseProxyConfig } from './types';
1
+ import type { CleanupOptions, ProxyOption } from './types';
2
+ import type { IncomingHttpHeaders } from 'node:http2';
2
3
 
3
4
  declare const activeServers: Set<http.Server | https.Server>;
4
- export declare function cleanup(options?: CleanupOptions): Promise<void>;
5
+ declare type AnyServerType = http.Server | https.Server | http2.Http2SecureServer
6
+ type AnyIncomingMessage = http.IncomingMessage | http2.Http2ServerRequest
7
+ type AnyServerResponse = http.ServerResponse | http2.Http2ServerResponse
8
+
9
+ let isCleaningUp = false
10
+
11
+ export async function cleanup(options?: CleanupOptions): Promise<void> {
12
+ if (isCleaningUp) {
13
+ debugLog('cleanup', 'Cleanup already in progress, skipping', options?.verbose)
14
+ return
15
+ }
16
+
17
+ isCleaningUp = true
18
+ debugLog('cleanup', 'Starting cleanup process', options?.verbose)
19
+
20
+ try {
21
+ await processManager.stopAll(options?.verbose)
22
+
23
+ log.info('Shutting down proxy servers...')
24
+
25
+ const cleanupPromises: Promise<void>[] = []
26
+
27
+ const serverClosePromises = Array.from(activeServers).map(server =>
28
+ new Promise<void>((resolve) => {
29
+ server.close(() => {
30
+ debugLog('cleanup', 'Server closed successfully', options?.verbose)
31
+ resolve()
32
+ })
33
+ }),
34
+ )
35
+ cleanupPromises.push(...serverClosePromises)
36
+
37
+ if (options?.hosts && options.domains?.length) {
38
+ debugLog('cleanup', 'Cleaning up hosts file entries', options?.verbose)
39
+ const domainsToClean = options.domains.filter(domain => !domain.includes('localhost'))
40
+
41
+ if (domainsToClean.length > 0) {
42
+ log.info('Cleaning up hosts file entries...')
43
+ cleanupPromises.push(
44
+ removeHosts(domainsToClean, options?.verbose)
45
+ .then(() => {
46
+ debugLog('cleanup', `Removed hosts entries for ${domainsToClean.join(', ')}`, options?.verbose)
47
+ })
48
+ .catch((err) => {
49
+ debugLog('cleanup', `Failed to remove hosts entries: ${err}`, options?.verbose)
50
+ log.warn(`Failed to clean up hosts file entries for ${domainsToClean.join(', ')}:`, err)
51
+ }),
52
+ )
53
+ }
54
+ }
55
+
56
+ if (options?.certs && options.domains?.length) {
57
+ debugLog('cleanup', 'Cleaning up SSL certificates', options?.verbose)
58
+ log.info('Cleaning up SSL certificates...')
59
+
60
+ const certCleanupPromises = options.domains.map(async (domain) => {
61
+ try {
62
+ await cleanupCertificates(domain, options?.verbose)
63
+ debugLog('cleanup', `Removed certificates for ${domain}`, options?.verbose)
64
+ }
65
+ catch (err) {
66
+ debugLog('cleanup', `Failed to remove certificates for ${domain}: ${err}`, options?.verbose)
67
+ log.warn(`Failed to clean up certificates for ${domain}:`, err)
68
+ }
69
+ })
70
+
71
+ cleanupPromises.push(...certCleanupPromises)
72
+ }
73
+
74
+ await Promise.allSettled(cleanupPromises)
75
+ debugLog('cleanup', 'All cleanup tasks completed successfully', options?.verbose)
76
+ log.success('All cleanup tasks completed successfully')
77
+ }
78
+ catch (err) {
79
+ debugLog('cleanup', `Error during cleanup: ${err}`, options?.verbose)
80
+ log.error('Error during cleanup:', err)
81
+ }
82
+ finally {
83
+ isCleaningUp = false
84
+ process.exit(0)
85
+ }
86
+ }
87
+
88
+ let isHandlingSignal = false
89
+ declare function signalHandler(): void;
5
90
  declare function isPortInUse(port: number, hostname: string, verbose?: boolean): Promise<boolean>;
6
- declare function findAvailablePort(startPort: number, hostname: string, verbose?: boolean): Promise<number>;
7
- declare function testConnection(hostname: string, port: number, verbose?: boolean): Promise<void>;
8
- export declare function startServer(options: SingleReverseProxyConfig): Promise<void>;
9
- export declare function setupReverseProxy(options: ProxySetupOptions): Promise<void>;
91
+ declare function normalizeHeaders(headers: IncomingHttpHeaders): http.OutgoingHttpHeaders;
92
+ declare function setupServer(serverInstance: AnyServerType): void;
10
93
  export declare function startHttpRedirectServer(verbose?: boolean): void;
11
- export declare function startProxy(options: ReverseProxyOption): void;
12
- export declare function startProxies(options?: ReverseProxyOptions): Promise<void>;
94
+ export declare function startProxy(options: ProxyOption): void;
package/dist/types.d.ts CHANGED
@@ -1,12 +1,17 @@
1
1
  import type { TlsConfig, TlsOption } from '@stacksjs/tlsx';
2
2
 
3
3
  export type { TlsConfig, TlsOption }
4
- export declare interface BaseReverseProxyConfig {
4
+ export declare interface StartOptions {
5
+ command: string
6
+ cwd?: string
7
+ env?: Record<string, string>
8
+ }
9
+ export declare interface BaseProxyConfig {
5
10
  from: string
6
11
  to: string
7
- cleanUrls: boolean
12
+ start?: StartOptions
8
13
  }
9
- export declare type BaseReverseProxyOptions = Partial<BaseReverseProxyConfig>
14
+ export declare type BaseProxyOptions = Partial<BaseProxyConfig>
10
15
 
11
16
  export interface CleanupConfig {
12
17
  domains: string[]
@@ -23,19 +28,24 @@ export interface SharedProxyConfig {
23
28
  vitePluginUsage: boolean
24
29
  verbose: boolean
25
30
  _cachedSSLConfig?: SSLConfig | null
31
+ start?: StartOptions
32
+ cleanUrls: boolean
26
33
  }
34
+
27
35
  export type SharedProxyOptions = Partial<SharedProxyConfig>
28
36
 
29
- export interface SingleReverseProxyConfig extends BaseReverseProxyConfig, SharedProxyConfig {}
30
- export interface MultiReverseProxyConfig extends SharedProxyConfig {
31
- proxies: BaseReverseProxyConfig[]
37
+ export interface SingleProxyConfig extends BaseProxyConfig, SharedProxyConfig {}
38
+
39
+ export interface MultiProxyConfig extends SharedProxyConfig {
40
+ proxies: Array<BaseProxyConfig & { cleanUrls: boolean }>
32
41
  }
33
- export type ReverseProxyConfig = SingleReverseProxyConfig
34
- export type ReverseProxyConfigs = SingleReverseProxyConfig | MultiReverseProxyConfig
35
42
 
36
- export type BaseReverseProxyOption = Partial<BaseReverseProxyConfig>
37
- export type ReverseProxyOption = Partial<SingleReverseProxyConfig>
38
- export type ReverseProxyOptions = Partial<SingleReverseProxyConfig> | Partial<MultiReverseProxyConfig>
43
+ export type ProxyConfig = SingleProxyConfig
44
+ export type ProxyConfigs = SingleProxyConfig | MultiProxyConfig
45
+
46
+ export type BaseProxyOption = Partial<BaseProxyConfig>
47
+ export type ProxyOption = Partial<SingleProxyConfig>
48
+ export type ProxyOptions = Partial<SingleProxyConfig> | Partial<MultiProxyConfig>
39
49
 
40
50
  export interface SSLConfig {
41
51
  key: string
@@ -43,24 +53,16 @@ export interface SSLConfig {
43
53
  ca?: string | string[]
44
54
  }
45
55
 
46
- export interface ProxySetupOptions extends Omit<ReverseProxyOption, 'from'> {
56
+ export interface ProxySetupOptions extends Omit<ProxyOption, 'from'> {
47
57
  fromPort: number
48
58
  sourceUrl: Pick<URL, 'hostname' | 'host'>
49
59
  ssl: SSLConfig | null
50
60
  from: string
51
61
  to: string
62
+ portManager?: PortManager
52
63
  }
53
64
 
54
65
  export interface PortManager {
55
66
  usedPorts: Set<number>
56
67
  getNextAvailablePort: (startPort: number) => Promise<number>
57
- }
58
-
59
- export interface ProxySetupOptions extends Omit<ReverseProxyOption, 'from'> {
60
- fromPort: number
61
- sourceUrl: Pick<URL, 'hostname' | 'host'>
62
- ssl: SSLConfig | null
63
- from: string
64
- to: string
65
- portManager?: PortManager
66
68
  }
package/dist/utils.d.ts CHANGED
@@ -1,14 +1,15 @@
1
- import type { ReverseProxyConfigs, ReverseProxyOption } from './types';
1
+ import type { ProxyConfigs, ProxyOption } from './types';
2
2
 
3
3
  export declare function debugLog(category: string, message: string, verbose?: boolean): void;
4
- export declare function extractHostname(options: ReverseProxyOption | ReverseProxyOptions): string[];
4
+ export declare function extractHostname(options: ProxyOption | ProxyOptions): string[];
5
5
  declare interface RootCA {
6
6
  certificate: string
7
7
  privateKey: string
8
8
  }
9
9
  export declare function isValidRootCA(value: unknown): value is RootCA;
10
- export declare function getPrimaryDomain(options?: ReverseProxyOption | ReverseProxyOptions): string;
11
- export declare function isMultiProxyConfig(options: ReverseProxyConfigs): options is MultiReverseProxyConfig;
12
- export declare function isMultiProxyOptions(options: ReverseProxyOption | ReverseProxyOptions): options is MultiReverseProxyConfig;
13
- export declare function isSingleProxyOptions(options: ReverseProxyOption | ReverseProxyOptions): options is SingleReverseProxyConfig;
10
+ export declare function getPrimaryDomain(options?: ProxyOption | ProxyOptions): string;
11
+ export declare function isMultiProxyConfig(options: ProxyConfigs | ProxyOptions): options is MultiProxyConfig;
12
+ export declare function isMultiProxyOptions(options: ProxyOption | ProxyOptions): options is MultiProxyConfig;
13
+ export declare function isSingleProxyOptions(options: ProxyOption | ProxyOptions): options is SingleProxyConfig;
14
+ export declare function isSingleProxyConfig(options: ProxyConfigs | ProxyOptions): options is SingleProxyConfig;
14
15
  export declare function safeDeleteFile(filePath: string, verbose?: boolean): Promise<void>;