@homedev/framework 1.0.5 → 1.0.7

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.d.ts CHANGED
@@ -1,8 +1,13 @@
1
- export declare type ColorValue = string | {
1
+ /**
2
+ * Defines a color value with red, green, and blue components.
3
+ *
4
+ * @public
5
+ */
6
+ export declare interface ColorValue {
2
7
  r: number;
3
8
  g: number;
4
9
  b: number;
5
- } | [number, number, number] | number;
10
+ }
6
11
 
7
12
  /**
8
13
  * Parses and queries command-line arguments.
@@ -190,14 +195,17 @@ export declare interface LoadResult<T> {
190
195
  export declare const locate: (fileName: string, dirs?: string[]) => Promise<string>;
191
196
 
192
197
  /**
198
+ * Defines a color for log output. Can be a named color, hex string, or RGB string.
199
+ *
193
200
  * @public
194
201
  */
195
- export declare type LogFunction = (className: string, ...args: any[]) => void;
202
+ export declare type LogColor = string | ColorValue;
196
203
 
197
204
  /**
198
205
  * @public
199
206
  */
200
207
  export declare class Logger {
208
+ #private;
201
209
  options: LoggerOptions;
202
210
  /**
203
211
  * Creates a logger with optional configuration overrides.
@@ -212,13 +220,10 @@ export declare class Logger {
212
220
  * @param args - Log payload values.
213
221
  */
214
222
  write(className: string, ...args: any[]): void;
215
- /**
216
- * Wraps a text in an RGB color code for console output.
217
- * @param text - The text to color.
218
- * @param color - The RGB color.
219
- * @returns The colored text for console output.
220
- */
221
- color(text: string, color: ColorValue): string;
223
+ onTime(time: string, _className: string): string;
224
+ onClass(className: string): string;
225
+ onElement(element: any, _className: string): string;
226
+ onLog(className: string, ...args: any[]): void;
222
227
  /**
223
228
  * Writes an INFO level log entry.
224
229
  *
@@ -257,15 +262,17 @@ export declare class Logger {
257
262
  export declare interface LoggerOptions {
258
263
  level: string;
259
264
  showClass: boolean;
260
- useColors: boolean;
261
265
  levels: string[];
262
266
  timeStamp: boolean;
263
267
  timeLocale?: string;
264
268
  timeOptions?: Intl.DateTimeFormatOptions;
265
- logFunction: LogFunction;
266
- onClass: (className: string) => string;
267
- onTime: (time: string, className: string) => string;
268
- onPrefix: (prefix: string, className: string) => string;
269
+ colors?: {
270
+ default?: LogColor;
271
+ time?: LogColor;
272
+ levels?: Record<string, LogColor>;
273
+ number?: LogColor;
274
+ quoted?: LogColor;
275
+ };
269
276
  }
270
277
 
271
278
  /**
@@ -606,9 +613,12 @@ declare global {
606
613
  tokenize(from: Record<string, unknown>, tokenizer?: RegExp): string;
607
614
  stripIndent(): string;
608
615
  toHtmlLink(path?: string): string;
616
+ toHtml(): string;
609
617
  toStringBuilder(): StringBuilder;
610
618
  toRgb(): string;
611
619
  toArgb(): string;
620
+ toColor(defaultColor?: ColorValue): ColorValue;
621
+ colorize(color: string | ColorValue): string;
612
622
  single(char: string): string;
613
623
  remove(char: string): string;
614
624
  toAlphanum(replaceWith?: string): string;
package/dist/index.js CHANGED
@@ -1,11 +1,11 @@
1
- Array.prototype.findOrFail=function(T,U,O){let b=this.find(T,O);if(b===void 0)throw Error(U??"Element not found");return b};Array.flat=function(T){if(Array.isArray(T))return T.flat(2);else return[T]};Array.prototype.forEachAsync=async function(T){for(let U=0;U<this.length;U++)await T(this[U],U,this)};Array.prototype.groupBy=function(T){return this.reduce((U,O)=>{let b=T(O);if(!U[b])U[b]=[];return U[b].push(O),U},{})};Array.prototype.createInstances=function(T,...U){return this.map((O,b)=>new T(...U,O,b))};Array.prototype.mapAsync=async function(T){return Promise.all(this.map(T))};Array.prototype.nonNullMap=function(T){let U=[];for(let O=0;O<this.length;O++){let b=T(this[O],O,this);if(b!=null)U.push(b)}return U};Array.prototype.nonNullMapAsync=async function(T){let U=[];for(let O=0;O<this.length;O++){let b=await T(this[O],O,this);if(b!=null)U.push(b)}return U};Array.prototype.mergeAll=function(T){let U={};for(let O of this.slice().reverse())Object.merge(O,U,T);return U};Array.prototype.toObject=function(T,U){return Object.fromEntries(this.map((O)=>{let b=T(O),A=U?U(O):O;return[b,A]}))};Array.prototype.toObjectWithKey=function(T){return Object.fromEntries(this.map((U)=>[String(U[T]),U]))};Array.prototype.selectFor=function(T,U,O,b){let A=this.find(T,b);if(A===void 0)throw Error(O??"Element not found");return U(A)};Array.prototype.sortBy=function(T,U=!0){return this.slice().sort((O,b)=>{let A=T(O),E=T(b);if(A<E)return U?-1:1;if(A>E)return U?1:-1;return 0})};Array.prototype.unique=function(){return Array.from(new Set(this))};Array.prototype.uniqueBy=function(T){let U=new Set;return this.filter((O)=>{let b=T(O);if(U.has(b))return!1;else return U.add(b),!0})};var w;((F)=>{F[F.Explore=0]="Explore";F[F.SkipSiblings=1]="SkipSiblings";F[F.NoExplore=2]="NoExplore";F[F.ReplaceParent=3]="ReplaceParent";F[F.DeleteParent=4]="DeleteParent";F[F.MergeParent=5]="MergeParent";F[F.ReplaceItem=6]="ReplaceItem";F[F.DeleteItem=7]="DeleteItem"})(w||={});class ${action;by;skipSiblings;reexplore;constructor(T,U,O,b){this.action=T;this.by=U;this.skipSiblings=O;this.reexplore=b}static _explore=new $(0);static _noExplore=new $(2);static _skipSiblings=new $(1);static _deleteParent=new $(4);static ReplaceParent(T,U){return new $(3,T,void 0,U)}static SkipSiblings(){return $._skipSiblings}static Explore(){return $._explore}static NoExplore(){return $._noExplore}static DeleteParent(){return $._deleteParent}static MergeParent(T){return new $(5,T)}static ReplaceItem(T,U){return new $(6,T,U)}static DeleteItem(T){return new $(7,void 0,T)}}Object.navigate=async(T,U)=>{let O=new WeakSet,b=[],A=[],E=async(X,F,f)=>{let B=X===null,Y=B?$.Explore():await U({key:X,value:F,path:b,parent:f,parents:A});if(F&&typeof F==="object"&&Y.action===0){if(O.has(F))return Y;if(O.add(F),!B)b.push(X),A.push(f);let x=F;while(await K(x,X,f))x=f[X];if(!B)A.pop(),b.pop()}return Y},K=async(X,F,f)=>{let B=Object.keys(X),j=B.length;for(let Y=0;Y<j;Y++){let Z=B[Y],Q=X[Z],x=await E(Z,Q,X),G=x.action;if(G===0||G===2)continue;if(G===6){if(X[Z]=x.by,x.skipSiblings)return;continue}if(G===7){if(delete X[Z],x.skipSiblings)return;continue}if(G===1)return;if(G===3){if(F===null)throw Error("Cannot replace root object");if(f[F]=x.by,x.reexplore)return!0;return}if(G===4){if(F===null)throw Error("Cannot delete root object");delete f[F];return}if(G===5)delete X[Z],Object.assign(X,x.by)}};await E(null,T,null)};Object.find=async function(T,U){let O=[];return await Object.navigate(T,(b)=>{if(U([...b.path,b.key].join("."),b.value))O.push(b.value);return $.Explore()}),O};Object.merge=(T,U,O)=>{for(let b of Object.keys(U)){if(T[b]===void 0)continue;let A=U[b],E=T[b];if(typeof E!==typeof A||Array.isArray(E)!==Array.isArray(A)){let X=O?.mismatch?.(b,E,A,T,U);if(X!==void 0){U[b]=X;continue}throw Error(`Type mismatch: ${b}`)}let K=O?.mode?.(b,E,A,T,U)??U[".merge"]??"merge";switch(K){case"source":U[b]=E;continue;case"target":continue;case"skip":delete U[b],delete T[b];continue;case"merge":break;default:throw Error(`Unknown merge mode: ${K}`)}if(typeof E==="object")if(Array.isArray(E))A.push(...E);else{if(O?.navigate?.(b,E,A,T,U)===!1)continue;Object.merge(E,A,O)}else{if(E===A)continue;let X=O?.conflict?.(b,E,A,T,U);U[b]=X===void 0?A:X}}for(let b of Object.keys(T))if(U[b]===void 0)U[b]=T[b]};var L=/^\[([^=\]]*)([=]*)([^\]]*)\]$/,V=/^([^[\]]*)\[([^\]]*)]$/,C=(T,U,O,b)=>{if(T.startsWith("{")&&T.endsWith("}")){let A=T.substring(1,T.length-1);return Object.select(U,A,O)?.toString()}return b?T:void 0},P=(T,U,O,b)=>{let A=C(U,O,b);if(A)return Object.select(T,A,b);let E=L.exec(U);if(E){let[,X,F,f]=E,B=C(X.trim(),O,b,!0),j=C(f.trim(),O,b,!0);if(Array.isArray(T)&&(F==="="||F==="==")&&B)return T.find((Y)=>Y?.[B]==j)}let K=V.exec(U);if(K){let[,X,F]=K;return T?.[X]?.[F]}return T?.[U]};Object.select=(T,U,O)=>{let b=void 0,A=void 0,E=U??"",K=(j)=>{if(!j)return[j,!1];return j.endsWith("?")?[j.substring(0,j.length-1),!0]:[j,!1]},X=(j,Y)=>{let[Z,Q]=K(Y.pop());if(!Z){if(O?.set!==void 0&&A!==void 0&&b!==void 0)b[A]=O.set;return j}let x=P(j,Z,T,O);if(x===void 0){if(Q||O?.optional||O?.defaultValue!==void 0)return;throw Error(`Unknown path element: "${Z}" in "${E}"`)}return b=j,A=Z,X(x,Y)},F=E.splitNested(O?.separator??".","{","}"),f=void 0;if(F.length>0&&F[F.length-1].startsWith("?="))f=F.pop()?.substring(2);F.reverse();let B=X(T,F);if(B===void 0)return f??O?.defaultValue;return B};Object.deepClone=function(T){if(typeof structuredClone<"u")try{return structuredClone(T)}catch{}return JSON.parse(JSON.stringify(T))};Object.toList=function(T,U){return Object.entries(T).map(([O,b])=>({[U]:O,...b}))};Object.mapEntries=function(T,U){let b=Object.entries(T).map(([A,E])=>U(A,E));return Object.fromEntries(b)};global.AsyncFunction=Object.getPrototypeOf(async function(){}).constructor;global.defined=(T,U="Value is undefined")=>{if(T===void 0||T===null)throw Error(U);return T};String.prototype.tokenize=function(T,U=/\${([^}]+)}/g){return this.replace(U,(O,b)=>{let A=T[b];if(A===null||A===void 0)return"";if(typeof A==="string")return A;if(typeof A==="number"||typeof A==="boolean")return String(A);return String(A)})};String.prototype.toPascal=function(){return this.replace(/((?:[_ ]+)\w|^\w)/g,(T,U)=>U.toUpperCase()).replace(/[^a-zA-Z0-9 ]/g,"").replace(/[_ ]/g,"")};String.prototype.capitalize=function(){return this.replace(/((?:[ ]+)\w|^\w)/g,(T,U)=>U.toUpperCase())};String.prototype.toCamel=function(){return this.toPascal().replace(/((?:[ ]+\w)|^\w)/g,(T,U)=>U.toLowerCase())};String.prototype.toSnake=function(){return this.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/\s+/g,"_")};String.prototype.toKebab=function(){return this.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/\s+/g,"-")};String.prototype.changeCase=function(T){switch(T){case"upper":return this.toUpperCase();case"lower":return this.toLowerCase();case"pascal":return this.toPascal();case"camel":return this.toCamel();case"snake":return this.toSnake();case"kebab":return this.toKebab();default:throw Error(`Unsupported case type: ${T}`)}};String.prototype.splitWithQuotes=function(T=","){let U=[],O=this.length,b=T.length,A=0,E=(K)=>{if(K+b>O)return!1;for(let X=0;X<b;X++)if(this[K+X]!==T[X])return!1;return!0};while(A<O){while(A<O&&this[A]===" ")A++;if(A>=O)break;let K="",X=this[A]==='"'||this[A]==="'";if(X){let F=this[A++];while(A<O&&this[A]!==F)K+=this[A++];if(A<O)A++}else{while(A<O&&!E(A)){let F=this[A];if(F==='"'||F==="'"){K+=F,A++;while(A<O&&this[A]!==F)K+=this[A++];if(A<O)K+=this[A++]}else K+=this[A++]}K=K.trim()}if(K)U.push({value:K,quoted:X});if(E(A))A+=b}return U};String.prototype.splitNested=function(T,U,O){let b=0,A="",E=[];for(let K of this){if(A+=K,K===U)b++;if(K===O)b--;if(b===0&&K===T)E.push(A.slice(0,-1)),A=""}if(A)E.push(A);return E};String.prototype.toStringBuilder=function(){return new J(this.split(`
1
+ Array.prototype.findOrFail=function(T,U,O){let A=this.find(T,O);if(A===void 0)throw Error(U??"Element not found");return A};Array.flat=function(T){if(Array.isArray(T))return T.flat(2);else return[T]};Array.prototype.forEachAsync=async function(T){for(let U=0;U<this.length;U++)await T(this[U],U,this)};Array.prototype.groupBy=function(T){return this.reduce((U,O)=>{let A=T(O);if(!U[A])U[A]=[];return U[A].push(O),U},{})};Array.prototype.createInstances=function(T,...U){return this.map((O,A)=>new T(...U,O,A))};Array.prototype.mapAsync=async function(T){return Promise.all(this.map(T))};Array.prototype.nonNullMap=function(T){let U=[];for(let O=0;O<this.length;O++){let A=T(this[O],O,this);if(A!=null)U.push(A)}return U};Array.prototype.nonNullMapAsync=async function(T){let U=[];for(let O=0;O<this.length;O++){let A=await T(this[O],O,this);if(A!=null)U.push(A)}return U};Array.prototype.mergeAll=function(T){let U={};for(let O of this.slice().reverse())Object.merge(O,U,T);return U};Array.prototype.toObject=function(T,U){return Object.fromEntries(this.map((O)=>{let A=T(O),E=U?U(O):O;return[A,E]}))};Array.prototype.toObjectWithKey=function(T){return Object.fromEntries(this.map((U)=>[String(U[T]),U]))};Array.prototype.selectFor=function(T,U,O,A){let E=this.find(T,A);if(E===void 0)throw Error(O??"Element not found");return U(E)};Array.prototype.sortBy=function(T,U=!0){return this.slice().sort((O,A)=>{let E=T(O),K=T(A);if(E<K)return U?-1:1;if(E>K)return U?1:-1;return 0})};Array.prototype.unique=function(){return Array.from(new Set(this))};Array.prototype.uniqueBy=function(T){let U=new Set;return this.filter((O)=>{let A=T(O);if(U.has(A))return!1;else return U.add(A),!0})};var P;((X)=>{X[X.Explore=0]="Explore";X[X.SkipSiblings=1]="SkipSiblings";X[X.NoExplore=2]="NoExplore";X[X.ReplaceParent=3]="ReplaceParent";X[X.DeleteParent=4]="DeleteParent";X[X.MergeParent=5]="MergeParent";X[X.ReplaceItem=6]="ReplaceItem";X[X.DeleteItem=7]="DeleteItem"})(P||={});class j{action;by;skipSiblings;reexplore;constructor(T,U,O,A){this.action=T;this.by=U;this.skipSiblings=O;this.reexplore=A}static _explore=new j(0);static _noExplore=new j(2);static _skipSiblings=new j(1);static _deleteParent=new j(4);static ReplaceParent(T,U){return new j(3,T,void 0,U)}static SkipSiblings(){return j._skipSiblings}static Explore(){return j._explore}static NoExplore(){return j._noExplore}static DeleteParent(){return j._deleteParent}static MergeParent(T){return new j(5,T)}static ReplaceItem(T,U){return new j(6,T,U)}static DeleteItem(T){return new j(7,void 0,T)}}Object.navigate=async(T,U)=>{let O=new WeakSet,A=[],E=[],K=async($,X,G)=>{let J=$===null,Q=J?j.Explore():await U({key:$,value:X,path:A,parent:G,parents:E});if(X&&typeof X==="object"&&Q.action===0){if(O.has(X))return Q;if(O.add(X),!J)A.push($),E.push(G);let Z=X;while(await F(Z,$,G))Z=G[$];if(!J)E.pop(),A.pop()}return Q},F=async($,X,G)=>{let J=Object.keys($),Y=J.length;for(let Q=0;Q<Y;Q++){let b=J[Q],H=$[b],Z=await K(b,H,$),_=Z.action;if(_===0||_===2)continue;if(_===6){if($[b]=Z.by,Z.skipSiblings)return;continue}if(_===7){if(delete $[b],Z.skipSiblings)return;continue}if(_===1)return;if(_===3){if(X===null)throw Error("Cannot replace root object");if(G[X]=Z.by,Z.reexplore)return!0;return}if(_===4){if(X===null)throw Error("Cannot delete root object");delete G[X];return}if(_===5)delete $[b],Object.assign($,Z.by)}};await K(null,T,null)};Object.find=async function(T,U){let O=[];return await Object.navigate(T,(A)=>{if(U([...A.path,A.key].join("."),A.value))O.push(A.value);return j.Explore()}),O};Object.merge=(T,U,O)=>{for(let A of Object.keys(U)){if(T[A]===void 0)continue;let E=U[A],K=T[A];if(typeof K!==typeof E||Array.isArray(K)!==Array.isArray(E)){let $=O?.mismatch?.(A,K,E,T,U);if($!==void 0){U[A]=$;continue}throw Error(`Type mismatch: ${A}`)}let F=O?.mode?.(A,K,E,T,U)??U[".merge"]??"merge";switch(F){case"source":U[A]=K;continue;case"target":continue;case"skip":delete U[A],delete T[A];continue;case"merge":break;default:throw Error(`Unknown merge mode: ${F}`)}if(typeof K==="object")if(Array.isArray(K))E.push(...K);else{if(O?.navigate?.(A,K,E,T,U)===!1)continue;Object.merge(K,E,O)}else{if(K===E)continue;let $=O?.conflict?.(A,K,E,T,U);U[A]=$===void 0?E:$}}for(let A of Object.keys(T))if(U[A]===void 0)U[A]=T[A]};var R=/^\[([^=\]]*)([=]*)([^\]]*)\]$/,S=/^([^[\]]*)\[([^\]]*)]$/,D=(T,U,O,A)=>{if(T.startsWith("{")&&T.endsWith("}")){let E=T.substring(1,T.length-1);return Object.select(U,E,O)?.toString()}return A?T:void 0},x=(T,U,O,A)=>{let E=D(U,O,A);if(E)return Object.select(T,E,A);let K=R.exec(U);if(K){let[,$,X,G]=K,J=D($.trim(),O,A,!0),Y=D(G.trim(),O,A,!0);if(Array.isArray(T)&&(X==="="||X==="==")&&J)return T.find((Q)=>Q?.[J]==Y)}let F=S.exec(U);if(F){let[,$,X]=F;return T?.[$]?.[X]}return T?.[U]};Object.select=(T,U,O)=>{let A=void 0,E=void 0,K=U??"",F=(Y)=>{if(!Y)return[Y,!1];return Y.endsWith("?")?[Y.substring(0,Y.length-1),!0]:[Y,!1]},$=(Y,Q)=>{let[b,H]=F(Q.pop());if(!b){if(O?.set!==void 0&&E!==void 0&&A!==void 0)A[E]=O.set;return Y}let Z=x(Y,b,T,O);if(Z===void 0){if(H||O?.optional||O?.defaultValue!==void 0)return;throw Error(`Unknown path element: "${b}" in "${K}"`)}return A=Y,E=b,$(Z,Q)},X=K.splitNested(O?.separator??".","{","}"),G=void 0;if(X.length>0&&X[X.length-1].startsWith("?="))G=X.pop()?.substring(2);X.reverse();let J=$(T,X);if(J===void 0)return G??O?.defaultValue;return J};Object.deepClone=function(T){if(typeof structuredClone<"u")try{return structuredClone(T)}catch{}return JSON.parse(JSON.stringify(T))};Object.toList=function(T,U){return Object.entries(T).map(([O,A])=>({[U]:O,...A}))};Object.mapEntries=function(T,U){let A=Object.entries(T).map(([E,K])=>U(E,K));return Object.fromEntries(A)};global.AsyncFunction=Object.getPrototypeOf(async function(){}).constructor;global.defined=(T,U="Value is undefined")=>{if(T===void 0||T===null)throw Error(U);return T};String.prototype.tokenize=function(T,U=/\${([^}]+)}/g){return this.replace(U,(O,A)=>{let E=T[A];if(E===null||E===void 0)return"";if(typeof E==="string")return E;if(typeof E==="number"||typeof E==="boolean")return String(E);return String(E)})};String.prototype.toPascal=function(){return this.replace(/((?:[_ ]+)\w|^\w)/g,(T,U)=>U.toUpperCase()).replace(/[^a-zA-Z0-9 ]/g,"").replace(/[_ ]/g,"")};String.prototype.capitalize=function(){return this.replace(/((?:[ ]+)\w|^\w)/g,(T,U)=>U.toUpperCase())};String.prototype.toCamel=function(){return this.toPascal().replace(/((?:[ ]+\w)|^\w)/g,(T,U)=>U.toLowerCase())};String.prototype.toSnake=function(){return this.replace(/([a-z])([A-Z])/g,"$1_$2").replace(/\s+/g,"_")};String.prototype.toKebab=function(){return this.replace(/([a-z])([A-Z])/g,"$1-$2").replace(/\s+/g,"-")};String.prototype.changeCase=function(T){switch(T){case"upper":return this.toUpperCase();case"lower":return this.toLowerCase();case"pascal":return this.toPascal();case"camel":return this.toCamel();case"snake":return this.toSnake();case"kebab":return this.toKebab();default:throw Error(`Unsupported case type: ${T}`)}};String.prototype.splitWithQuotes=function(T=","){let U=[],O=this.length,A=T.length,E=0,K=(F)=>{if(F+A>O)return!1;for(let $=0;$<A;$++)if(this[F+$]!==T[$])return!1;return!0};while(E<O){while(E<O&&this[E]===" ")E++;if(E>=O)break;let F="",$=this[E]==='"'||this[E]==="'";if($){let X=this[E++];while(E<O&&this[E]!==X)F+=this[E++];if(E<O)E++}else{while(E<O&&!K(E)){let X=this[E];if(X==='"'||X==="'"){F+=X,E++;while(E<O&&this[E]!==X)F+=this[E++];if(E<O)F+=this[E++]}else F+=this[E++]}F=F.trim()}if(F)U.push({value:F,quoted:$});if(K(E))E+=A}return U};String.prototype.splitNested=function(T,U,O){let A=0,E="",K=[];for(let F of this){if(E+=F,F===U)A++;if(F===O)A--;if(A===0&&F===T)K.push(E.slice(0,-1)),E=""}if(E)K.push(E);return K};String.prototype.toStringBuilder=function(){return new B(this.split(`
2
2
  `))};String.prototype.padBlock=function(T,U=`
3
- `,O=" "){let b=O.repeat(T);return this.split(U).map((A)=>b+A).join(U)};String.prototype.stripIndent=function(){let T=this.split(/\r?\n/),U=T.filter((b)=>b.trim().length>0).map((b)=>/^[ \t]*/.exec(b)?.[0].length??0),O=U.length>0?Math.min(...U):0;if(O===0)return this;return T.map((b)=>b.slice(O)).join(`
4
- `)};String.prototype.toHtmlLink=function(T){return`<a href="${T??this.toString()}">${this.toString()}</a>`};String.prototype.toRgb=function(){let T=this.toString().replace("#","");if(T.length!==6)throw Error("Invalid hex color");let U=parseInt(T.substring(0,2),16),O=parseInt(T.substring(2,4),16),b=parseInt(T.substring(4,6),16);return`rgb(${U.toString()}, ${O.toString()}, ${b.toString()})`};String.prototype.toArgb=function(){let T=this.toString().replace("#","");if(T.length!==8)throw Error("Invalid hex color");let U=parseInt(T.substring(0,2),16),O=parseInt(T.substring(2,4),16),b=parseInt(T.substring(4,6),16),A=parseInt(T.substring(6,8),16);return`argb(${U.toString()}, ${O.toString()}, ${b.toString()}, ${A.toString()})`};String.prototype.single=function(T){return this.replaceAll(new RegExp(`(${T})+`,"g"),"$1")};String.prototype.remove=function(T){return this.replaceAll(new RegExp(T,"g"),"")};String.prototype.toAlphanum=function(T=""){return this.replace(/[^a-z0-9]/gi,T)};String.prototype.toAlpha=function(T=""){return this.replace(/[^a-z]/gi,T)};class R{options;constructor(T){this.options={level:"INFO",showClass:!1,useColors:!0,levels:["DEBUG","VERBOSE","INFO","WARN","ERROR"],timeStamp:!1,timeOptions:{second:"2-digit",minute:"2-digit",hour:"2-digit",day:"2-digit",month:"2-digit",year:"2-digit"},onClass:(U)=>{return U},onTime:(U,O)=>{return U},onPrefix:(U,O)=>{return U},logFunction:(U,...O)=>{switch(U){case"ERROR":console.error(...O);break;case"WARN":console.warn(...O);break;case"DEBUG":console.debug(...O);break;case"VERBOSE":console.log(...O);break;default:console.log(...O)}},...T}}write(T,...U){if(this.options.level){let E=this.options.levels.indexOf(this.options.level),K=this.options.levels.indexOf(T);if(E===-1)throw Error(`Unknown configured log level: ${this.options.level}`);if(K===-1)throw Error(`Unknown log level: ${T}`);if(K<E)return}let O=[],b=[];if(this.options.timeStamp)b.push(this.options.onTime(new Date().toLocaleString(this.options.timeLocale,this.options.timeOptions),T));if(this.options.showClass)b.push(this.options.onClass(T));if(b.length>0)O.push(this.options.onPrefix(`[${b.join(" ")}]`,T));O.push(...U);let A=O.map((E)=>{if(this.options.useColors&&typeof E==="string"){let K=/<color=([^>]+)>(.*?)<\/color>/g;return E=E.replace(K,(X,F,f)=>this.color(f,F)),E}return E});this.options.logFunction(T,...A)}color(T,U){let O,b,A;if(typeof U==="string"){let E={red:"#FF0000",green:"#00FF00",blue:"#0000FF",yellow:"#FFFF00",cyan:"#00FFFF",magenta:"#FF00FF",white:"#FFFFFF",black:"#000000",orange:"#FFA500",purple:"#800080",pink:"#FFC0CB",gray:"#808080",grey:"#808080"};if(E[U])U=E[U];if(U.startsWith("#")){let K=U.slice(1);if(K.length===3)O=parseInt(K[0]+K[0],16),b=parseInt(K[1]+K[1],16),A=parseInt(K[2]+K[2],16);else if(K.length===6)O=parseInt(K.slice(0,2),16),b=parseInt(K.slice(2,4),16),A=parseInt(K.slice(4,6),16);else throw Error(`Invalid hex color: ${U}`)}else if(U.includes(";")){let K=U.split(";").map(Number);if(K.length!==3||K.some(isNaN))throw Error(`Invalid RGB color string: ${U}`);[O,b,A]=K}else throw Error(`Unsupported color string format: ${U}`)}else if(Array.isArray(U))[O,b,A]=U;else if(typeof U==="number")O=U>>16&255,b=U>>8&255,A=U&255;else({r:O,g:b,b:A}=U);return`\x1B[38;2;${O.toString()};${b.toString()};${A.toString()}m${T}\x1B[0m`}info(...T){this.write("INFO",...T)}error(...T){this.write("ERROR",...T)}warn(...T){this.write("WARN",...T)}debug(...T){this.write("DEBUG",...T)}verbose(...T){this.write("VERBOSE",...T)}}class J{#T=[];#U=0;options;constructor(T,U){if(T instanceof J)this.options={...T.options,...U},this.#T.push(...T.#T);else if(this.options=U??{},T)if(Array.isArray(T))this.#T.push(...T);else this.#T.push(T)}setOptions(T){return this.options=T,this}clear(){return this.#T.length=0,this}isEmpty(){return this.#T.length===0}toString(){return this.#T.join("")}indent(){return this.#U+=1,this}dedent(){if(this.#U>0)this.#U-=1;return this}getCurrentIndent(){return this.#U}getLines(){return this.toString().split(`
3
+ `,O=" "){let A=O.repeat(T);return this.split(U).map((E)=>A+E).join(U)};String.prototype.stripIndent=function(){let T=this.split(/\r?\n/),U=T.filter((A)=>A.trim().length>0).map((A)=>/^[ \t]*/.exec(A)?.[0].length??0),O=U.length>0?Math.min(...U):0;if(O===0)return this;return T.map((A)=>A.slice(O)).join(`
4
+ `)};String.prototype.toHtmlLink=function(T){return`<a href="${T??this.toString()}">${this.toString()}</a>`};String.prototype.toHtml=function(){return this.toString().trim().replace(/[<>&"_]/g,(T)=>`&#${T.charCodeAt(0).toString()};`).replace(/\n/g,"<br/>")};String.prototype.toRgb=function(){let T=this.toString().replace("#","");if(T.length!==6)throw Error("Invalid hex color");let U=parseInt(T.substring(0,2),16),O=parseInt(T.substring(2,4),16),A=parseInt(T.substring(4,6),16);return`rgb(${U.toString()}, ${O.toString()}, ${A.toString()})`};String.prototype.toArgb=function(){let T=this.toString().replace("#","");if(T.length!==8)throw Error("Invalid hex color");let U=parseInt(T.substring(0,2),16),O=parseInt(T.substring(2,4),16),A=parseInt(T.substring(4,6),16),E=parseInt(T.substring(6,8),16);return`argb(${U.toString()}, ${O.toString()}, ${A.toString()}, ${E.toString()})`};var W={red:"#FF0000",green:"#00FF00",blue:"#0000FF",yellow:"#FFFF00",cyan:"#00FFFF",magenta:"#FF00FF",white:"#FFFFFF",black:"#000000",orange:"#FFA500",purple:"#800080",pink:"#FFC0CB",gray:"#808080",grey:"#808080"};String.prototype.toColor=function(T){let U=this.toString().trim(),O,A,E;if(W[U])U=W[U];if(U.startsWith("#")){let K=U.slice(1);if(K.length===3)O=parseInt(K[0]+K[0],16),A=parseInt(K[1]+K[1],16),E=parseInt(K[2]+K[2],16);else if(K.length===6)O=parseInt(K.slice(0,2),16),A=parseInt(K.slice(2,4),16),E=parseInt(K.slice(4,6),16);else{if(T)return T;throw Error(`Invalid hex color: ${U}`)}return{r:O,g:A,b:E}}if(U.includes(";")){let K=U.split(";").map(Number);if(K.length!==3||K.some(isNaN)){if(T)return T;throw Error(`Invalid RGB color string: ${U}`)}return{r:K[0],g:K[1],b:K[2]}}if(T)return T;throw Error(`Unsupported color string format: ${U}`)};String.prototype.colorize=function(T){let U=typeof T==="string"?T.toColor({r:255,g:255,b:255}):T;return`\x1B[38;2;${U.r.toString()};${U.g.toString()};${U.b.toString()}m${this.toString()}\x1B[0m`};String.prototype.single=function(T){return this.replaceAll(new RegExp(`(${T})+`,"g"),"$1")};String.prototype.remove=function(T){return this.replaceAll(new RegExp(T,"g"),"")};String.prototype.toAlphanum=function(T=""){return this.replace(/[^a-z0-9]/gi,T)};String.prototype.toAlpha=function(T=""){return this.replace(/[^a-z]/gi,T)};class m{options;#T=/(["'])(?:(?=(\\?))\2.)*?\1/g;#U=/<color=([^>]+)>(.*?)<\/color>/g;#O=/\b\d+(?:\.\d+)?\b/g;constructor(T){this.options={level:"INFO",showClass:!1,levels:["DEBUG","VERBOSE","INFO","WARN","ERROR"],timeStamp:!1,timeOptions:{second:"2-digit",minute:"2-digit",hour:"2-digit",day:"2-digit",month:"2-digit",year:"2-digit"},colors:{},...T}}write(T,...U){if(this.options.level){let E=this.options.levels.indexOf(this.options.level),K=this.options.levels.indexOf(T);if(E===-1)throw Error(`Unknown configured log level: ${this.options.level}`);if(K===-1)throw Error(`Unknown log level: ${T}`);if(K<E)return}let O=[],A=[];if(this.options.timeStamp)A.push(this.onTime(new Date().toLocaleString(this.options.timeLocale,this.options.timeOptions),T));if(this.options.showClass)A.push(this.onClass(T));if(A.length>0)O.push(`[${A.join(" ")}]`);O.push(...U.map((E)=>this.onElement(E,T))),this.onLog(T,...O)}onTime(T,U){if(this.options.colors?.time)T=T.colorize(this.options.colors.time);return T}onClass(T){if(this.options.colors?.levels?.[T])T=T.colorize(this.options.colors.levels[T]);return T}onElement(T,U){if(typeof T==="number")return this.#A(T.toString(),this.options.colors?.number);if(typeof T==="string")return this.#X(T,this.options.colors?.default);return T}#A(T,U){if(!U)return T;return T.colorize(U)}#X(T,U){let O=[],A=0;while(A<T.length){let E=this.#K(T,A,this.#T,"quoted"),K=this.#K(T,A,this.#U,"color"),F=this.#K(T,A,this.#O,"number"),$=this.#E(E,K,F);if(!$){O.push(this.#A(T.slice(A),U));break}if($.index>A)O.push(this.#A(T.slice(A,$.index),U));if($.kind==="quoted")O.push(this.#A($.match[0],this.options.colors?.quoted));else if($.kind==="number")O.push(this.#A($.match[0],this.options.colors?.number));else{let X=$.match[2]??"";O.push(this.#X(X,$.match[1]))}A=$.index+$.match[0].length}return O.join("")}#K(T,U,O,A){let E=new RegExp(O.source,O.flags);E.lastIndex=U;let K=E.exec(T);if(!K)return null;return{index:K.index,match:K,kind:A}}#E(T,U,O){let A=[T,U,O].filter((E)=>E!==null);if(A.length===0)return null;return A.reduce((E,K)=>K.index<E.index?K:E)}onLog(T,...U){switch(T){case"ERROR":console.error(...U);break;case"WARN":console.warn(...U);break;case"DEBUG":console.debug(...U);break;case"VERBOSE":console.log(...U);break;default:console.log(...U)}}info(...T){this.write("INFO",...T)}error(...T){this.write("ERROR",...T)}warn(...T){this.write("WARN",...T)}debug(...T){this.write("DEBUG",...T)}verbose(...T){this.write("VERBOSE",...T)}}class B{#T=[];#U=0;options;constructor(T,U){if(T instanceof B)this.options={...T.options,...U},this.#T.push(...T.#T);else if(this.options=U??{},T)if(Array.isArray(T))this.#T.push(...T);else this.#T.push(T)}setOptions(T){return this.options=T,this}clear(){return this.#T.length=0,this}isEmpty(){return this.#T.length===0}toString(){return this.#T.join("")}indent(){return this.#U+=1,this}dedent(){if(this.#U>0)this.#U-=1;return this}getCurrentIndent(){return this.#U}getLines(){return this.toString().split(`
5
5
  `)}formatLine(T){T??=`
6
6
  `;let U=(this.options.indentChar??" ").repeat(this.#U*(this.options.indentSize??2));if(this.options.trim)T=T.trim();return U+(this.options.linePrefix??"")+T+(this.options.lineSuffix??"")+(this.options.lineSeparator??`
7
- `)}write(...T){return this.#T.push(...T.flatMap((U)=>{if(U!==void 0){if(typeof U==="string")return U;if(Array.isArray(U))return U.flat();if(U instanceof J)return U.toString();if(typeof U==="function")return U(this);return String(U)}}).filter((U)=>U!==void 0)),this}writeLine(...T){return this.write(T.length>0?T.map((U)=>this.formatLine(U)):`
8
- `)}writeMap(T,U){return T.forEach((O,b)=>U(O,b,this)),this}}class S extends J{#T=0;#U="```";#O(T){return Math.min(6,Math.max(1,Math.floor(T)))}#b(T){if(T===void 0)return"```";let U=0;for(let O of T.matchAll(/`+/g))U=Math.max(U,O[0].length);return"`".repeat(Math.max(3,U+1))}header(T,U=1){let O=this.#O(U);return this.writeLine(`${"#".repeat(O)} ${T}`,"")}codeBlock(T,U){let O=this.#b(T);if(this.#U=O,U??="",this.writeLine(O+U),T!==void 0)this.writeLine(T).endCodeBlock();return this}endCodeBlock(){let T=this.#U;return this.#U="```",this.writeLine(T)}link(T,U,O){if(O)return this.write(`[${T}](${U} "${O}")`);return this.write(`[${T}](${U})`)}table(T,U){if(T.length===0)throw Error("Table requires at least one header");let O=T.map((E,K)=>{let X=E.length;return U.forEach((F)=>{if(F[K])X=Math.max(X,F[K].length)}),X}),b=T.map((E,K)=>E.padEnd(O[K]));this.writeLine("| "+b.join(" | ")+" |");let A=O.map((E)=>"-".repeat(E));return this.writeLine("| "+A.join(" | ")+" |"),U.forEach((E)=>{let K=T.map((X,F)=>(E[F]??"").padEnd(O[F]));this.writeLine("| "+K.join(" | ")+" |")}),this}blockquote(T){return T.split(`
9
- `).forEach((O)=>this.writeLine("> "+O)),this}bold(T){return this.write(`**${T}**`)}italic(T){return this.write(`*${T}*`)}item(T){return this.writeLine(`- ${T}`)}items(T){if(Array.isArray(T))T.forEach((U)=>this.item(U));else Object.entries(T).forEach(([U,O])=>O!==void 0&&this.item(`${U}: ${O!==void 0?String(O):""}`));return this}orderedList(T,U=1){return T.forEach((O,b)=>this.writeLine(`${(b+U).toString()}. ${O}`)),this}code(T){return this.write(`\`${T}\``)}horizontalRule(){return this.writeLine("---")}image(T,U){return this.writeLine(`![${T}](${U})`)}strikethrough(T){return this.write(`~~${T}~~`)}highlight(T){return this.write(`==${T}==`)}subscript(T){return this.write(`~${T}~`)}superscript(T){return this.write(`^${T}^`)}taskList(T){return T.forEach((U)=>this.writeLine(`- [${U.checked?"x":" "}] ${U.text}`)),this}section(T,U){if(U!==void 0)this.#T=this.#O(U);else this.#T=Math.min(6,this.#T+1);return this.header(T,this.#T)}endSection(){if(this.#T>0)this.#T--;return this}setSectionLevel(T){return this.#T=Math.min(6,Math.max(0,Math.floor(T))),this}}class k{#T;#U;#O=new Map;#b=[];constructor(T,U=[]){this.#T=[...T],this.#U=[...U],this.#K()}get args(){return[...this.#T]}get positionals(){return[...this.#b]}has(T){return this.#O.has(this.#A(T))}getArgs(T){return[...this.#O.get(this.#A(T))?.values??[]]}get(T){let U=this.#O.get(this.#A(T))?.values;if(!U)return;if(U.length===0)return!0;return U[0]}toObject(){let T={};for(let[U,O]of this.#O.entries())T[U]=O.values.length>0?[...O.values]:!0;return T}usage(T="command"){let U=[`Usage: ${T} [options]`];if(this.#b.length>0)U[0]+=" [values]";if(this.#U.length===0)return U.join(`
10
- `);U.push("","Options:");for(let O of this.#U){let b=`--${O.name}`,A=O.alias?`-${O.alias}`:void 0,E=O.valueName??"value",K=O.takesValue?O.multiple?` <${E}...>`:` <${E}>`:"",X=A?`${A}, ${b}`:b,F=O.description?` ${O.description}`:"";U.push(` ${X}${K}${F}`)}return U.join(`
11
- `)}#K(){for(let T=0;T<this.#T.length;T++){let U=this.#T[T];if(!U.startsWith("-")||U==="-"){this.#b.push(U);continue}if(U.startsWith("--")&&U.includes("=")){let A=U.indexOf("="),E=this.#A(U.slice(0,A)),K=U.slice(A+1);this.#E(E,K.length>0?[K]:[""],!0);continue}let O=this.#A(U),b=[];while(T+1<this.#T.length){let A=this.#T[T+1];if(A.startsWith("-")&&A!=="-")break;b.push(A),T++}this.#E(O,b,!1)}}#E(T,U,O){let b=this.#O.get(T);if(!b){this.#O.set(T,{values:[...U],sawEqualsStyle:O});return}b.values.push(...U),b.sawEqualsStyle=b.sawEqualsStyle||O}#A(T){return T.replace(/^-+/,"").trim()}}import D from"fs/promises";var I=async(T)=>{try{return await D.access(T,D.constants.R_OK),!0}catch{return!1}};import _ from"path";var M=async(T,U)=>{let O=!_.isAbsolute(T)&&U?["",...U]:[""];for(let b of O){let A=_.join(b,T);if(await I(A))return _.resolve(A)}throw Error(`File not found: "${T}"`)};import N from"fs/promises";import d from"path";var h=(T,U)=>U?.some((O)=>new RegExp(O).test(T))===!0,pT=async(T,U)=>{let O=await M(T,U?.dirs),b=await N.readFile(O,"utf-8"),A=d.dirname(O),E={text:{fn:(F)=>F,matching:["\\.txt$","\\.text$"]},json:{fn:JSON.parse,matching:["\\.json$"]},...U?.parsers},K=U?.format?E[U.format]:Object.values(E).find((F)=>h(T,F.matching));if(!K)throw Error(`Unsupported format for file "${T}" and no matching parser found`);return{content:await K.fn(b),fullPath:O,folderPath:A}};import g from"fs/promises";var v=(T,U)=>U?.some((O)=>new RegExp(O).test(T))===!0,m=async(T,U,O)=>{let b={text:{fn:(E)=>E,matching:["\\.txt$","\\.text$"]},json:{fn:JSON.stringify,matching:["\\.json$"]},...O?.encoders},A=O?.format?b[O.format]:Object.values(b).find((E)=>v(T,E.matching));if(!A)throw Error(`Unsupported format for file "${T}" and no matching encoder found`);await g.writeFile(T,await A.fn(U))};import p from"fs/promises";var oT=async(T,U)=>{if(typeof T==="string"&&!T.includes("*"))return await U.map(T,0,[]);let O=await Array.fromAsync(p.glob(T,{cwd:U.cwd})),b=U.filter?O.filter(U.filter):O;return await Promise.all(b.map(U.map))};import W from"fs/promises";import z from"path";var aT=async(T,U)=>{if(U?.targetDirectory&&U?.removeFirst)try{await W.rm(U?.targetDirectory,{recursive:!0,force:!0})}catch(O){throw Error(`Failed to clean the output directory: ${O.message}`,{cause:O})}for(let O of T)await u(O,U)},u=async(T,U)=>{let O=z.join(U?.targetDirectory??".",T.name),b=z.dirname(O);if(U?.classes){if(T.class!==void 0&&!U.classes.includes(T.class))return;if(U.classRequired&&T.class===void 0)throw Error(`Output "${T.name}" is missing class field`)}if(U?.writing?.(T)===!1)return;try{await W.mkdir(b,{recursive:!0})}catch(A){throw Error(`Failed to create target directory "${b}" for output "${O}": ${A.message}`,{cause:A})}try{await m(O,T.value,{format:T.type??"text"})}catch(A){throw Error(`Failed to write output "${O}": ${A.message}`,{cause:A})}};import r from"fs/promises";import q from"path";import y from"path";var H=(T)=>T?y.isAbsolute(T)?T:y.join(process.cwd(),T):process.cwd();var c=async(T,U)=>{let O=[];for(let b of T)try{let A=!q.isAbsolute(b)?q.join(H(U?.cwd),b):b;if(U?.filter?.(A)===!1)continue;let E=await import(A);if(U?.resolveDefault==="only"&&!E.default)throw Error(`Module ${b} does not have a default export`);let K=U?.resolveDefault?E.default??E:E,X=U?.map?await U.map(K,b):K;if(X!==void 0)O.push(X)}catch(A){if(U?.fail?.(b,A)===!1)continue;throw Error(`Failed to import module ${b}: ${A.message??A}`,{cause:A})}return O},EU=async(T,U)=>{let O=[],b=H(U?.cwd);for(let A of T){let E=(await Array.fromAsync(r.glob(A,{cwd:b}))).map((K)=>q.join(b,K));O.push(...await c(E,U))}return O};export{aT as writeOutputs,u as writeOutput,m as writeFormat,M as locate,pT as loadFormat,c as importList,EU as importGlob,oT as globMap,H as getCwd,I as exists,J as StringBuilder,$ as NavigateResult,w as NavigateAction,S as Markdown,R as Logger,k as CommandLineArgs};
7
+ `)}write(...T){return this.#T.push(...T.flatMap((U)=>{if(U!==void 0){if(typeof U==="string")return U;if(Array.isArray(U))return U.flat();if(U instanceof B)return U.toString();if(typeof U==="function")return U(this);return String(U)}}).filter((U)=>U!==void 0)),this}writeLine(...T){return this.write(T.length>0?T.map((U)=>this.formatLine(U)):`
8
+ `)}writeMap(T,U){return T.forEach((O,A)=>U(O,A,this)),this}}class k extends B{#T=0;#U="```";#O(T){return Math.min(6,Math.max(1,Math.floor(T)))}#A(T){if(T===void 0)return"```";let U=0;for(let O of T.matchAll(/`+/g))U=Math.max(U,O[0].length);return"`".repeat(Math.max(3,U+1))}header(T,U=1){let O=this.#O(U);return this.writeLine(`${"#".repeat(O)} ${T}`,"")}codeBlock(T,U){let O=this.#A(T);if(this.#U=O,U??="",this.writeLine(O+U),T!==void 0)this.writeLine(T).endCodeBlock();return this}endCodeBlock(){let T=this.#U;return this.#U="```",this.writeLine(T)}link(T,U,O){if(O)return this.write(`[${T}](${U} "${O}")`);return this.write(`[${T}](${U})`)}table(T,U){if(T.length===0)throw Error("Table requires at least one header");let O=T.map((K,F)=>{let $=K.length;return U.forEach((X)=>{if(X[F])$=Math.max($,X[F].length)}),$}),A=T.map((K,F)=>K.padEnd(O[F]));this.writeLine("| "+A.join(" | ")+" |");let E=O.map((K)=>"-".repeat(K));return this.writeLine("| "+E.join(" | ")+" |"),U.forEach((K)=>{let F=T.map(($,X)=>(K[X]??"").padEnd(O[X]));this.writeLine("| "+F.join(" | ")+" |")}),this}blockquote(T){return T.split(`
9
+ `).forEach((O)=>this.writeLine("> "+O)),this}bold(T){return this.write(`**${T}**`)}italic(T){return this.write(`*${T}*`)}item(T){return this.writeLine(`- ${T}`)}items(T){if(Array.isArray(T))T.forEach((U)=>this.item(U));else Object.entries(T).forEach(([U,O])=>O!==void 0&&this.item(`${U}: ${O!==void 0?String(O):""}`));return this}orderedList(T,U=1){return T.forEach((O,A)=>this.writeLine(`${(A+U).toString()}. ${O}`)),this}code(T){return this.write(`\`${T}\``)}horizontalRule(){return this.writeLine("---")}image(T,U){return this.writeLine(`![${T}](${U})`)}strikethrough(T){return this.write(`~~${T}~~`)}highlight(T){return this.write(`==${T}==`)}subscript(T){return this.write(`~${T}~`)}superscript(T){return this.write(`^${T}^`)}taskList(T){return T.forEach((U)=>this.writeLine(`- [${U.checked?"x":" "}] ${U.text}`)),this}section(T,U){if(U!==void 0)this.#T=this.#O(U);else this.#T=Math.min(6,this.#T+1);return this.header(T,this.#T)}endSection(){if(this.#T>0)this.#T--;return this}setSectionLevel(T){return this.#T=Math.min(6,Math.max(0,Math.floor(T))),this}}class N{#T;#U;#O=new Map;#A=[];constructor(T,U=[]){this.#T=[...T],this.#U=[...U],this.#X()}get args(){return[...this.#T]}get positionals(){return[...this.#A]}has(T){return this.#O.has(this.#E(T))}getArgs(T){return[...this.#O.get(this.#E(T))?.values??[]]}get(T){let U=this.#O.get(this.#E(T))?.values;if(!U)return;if(U.length===0)return!0;return U[0]}toObject(){let T={};for(let[U,O]of this.#O.entries())T[U]=O.values.length>0?[...O.values]:!0;return T}usage(T="command"){let U=[`Usage: ${T} [options]`];if(this.#A.length>0)U[0]+=" [values]";if(this.#U.length===0)return U.join(`
10
+ `);U.push("","Options:");for(let O of this.#U){let A=`--${O.name}`,E=O.alias?`-${O.alias}`:void 0,K=O.valueName??"value",F=O.takesValue?O.multiple?` <${K}...>`:` <${K}>`:"",$=E?`${E}, ${A}`:A,X=O.description?` ${O.description}`:"";U.push(` ${$}${F}${X}`)}return U.join(`
11
+ `)}#X(){for(let T=0;T<this.#T.length;T++){let U=this.#T[T];if(!U.startsWith("-")||U==="-"){this.#A.push(U);continue}if(U.startsWith("--")&&U.includes("=")){let E=U.indexOf("="),K=this.#E(U.slice(0,E)),F=U.slice(E+1);this.#K(K,F.length>0?[F]:[""],!0);continue}let O=this.#E(U),A=[];while(T+1<this.#T.length){let E=this.#T[T+1];if(E.startsWith("-")&&E!=="-")break;A.push(E),T++}this.#K(O,A,!1)}}#K(T,U,O){let A=this.#O.get(T);if(!A){this.#O.set(T,{values:[...U],sawEqualsStyle:O});return}A.values.push(...U),A.sawEqualsStyle=A.sawEqualsStyle||O}#E(T){return T.replace(/^-+/,"").trim()}}import z from"fs/promises";var C=async(T)=>{try{return await z.access(T,z.constants.R_OK),!0}catch{return!1}};import q from"path";var L=async(T,U)=>{let O=!q.isAbsolute(T)&&U?["",...U]:[""];for(let A of O){let E=q.join(A,T);if(await C(E))return q.resolve(E)}throw Error(`File not found: "${T}"`)};import d from"fs/promises";import v from"path";var h=(T,U)=>U?.some((O)=>new RegExp(O).test(T))===!0,uT=async(T,U)=>{let O=await L(T,U?.dirs),A=await d.readFile(O,"utf-8"),E=v.dirname(O),K={text:{fn:(X)=>X,matching:["\\.txt$","\\.text$"]},json:{fn:JSON.parse,matching:["\\.json$"]},...U?.parsers},F=U?.format?K[U.format]:Object.values(K).find((X)=>h(T,X.matching));if(!F)throw Error(`Unsupported format for file "${T}" and no matching parser found`);return{content:await F.fn(A),fullPath:O,folderPath:E}};import p from"fs/promises";var g=(T,U)=>U?.some((O)=>new RegExp(O).test(T))===!0,V=async(T,U,O)=>{let A={text:{fn:(K)=>K,matching:["\\.txt$","\\.text$"]},json:{fn:JSON.stringify,matching:["\\.json$"]},...O?.encoders},E=O?.format?A[O.format]:Object.values(A).find((K)=>g(T,K.matching));if(!E)throw Error(`Unsupported format for file "${T}" and no matching encoder found`);await p.writeFile(T,await E.fn(U))};import u from"fs/promises";var sT=async(T,U)=>{if(typeof T==="string"&&!T.includes("*"))return await U.map(T,0,[]);let O=await Array.fromAsync(u.glob(T,{cwd:U.cwd})),A=U.filter?O.filter(U.filter):O;return await Promise.all(A.map(U.map))};import w from"fs/promises";import f from"path";var eT=async(T,U)=>{if(U?.targetDirectory&&U?.removeFirst)try{await w.rm(U?.targetDirectory,{recursive:!0,force:!0})}catch(O){throw Error(`Failed to clean the output directory: ${O.message}`,{cause:O})}for(let O of T)await c(O,U)},c=async(T,U)=>{let O=f.join(U?.targetDirectory??".",T.name),A=f.dirname(O);if(U?.classes){if(T.class!==void 0&&!U.classes.includes(T.class))return;if(U.classRequired&&T.class===void 0)throw Error(`Output "${T.name}" is missing class field`)}if(U?.writing?.(T)===!1)return;try{await w.mkdir(A,{recursive:!0})}catch(E){throw Error(`Failed to create target directory "${A}" for output "${O}": ${E.message}`,{cause:E})}try{await V(O,T.value,{format:T.type??"text"})}catch(E){throw Error(`Failed to write output "${O}": ${E.message}`,{cause:E})}};import r from"fs/promises";import y from"path";import M from"path";var I=(T)=>T?M.isAbsolute(T)?T:M.join(process.cwd(),T):process.cwd();var n=async(T,U)=>{let O=[];for(let A of T)try{let E=!y.isAbsolute(A)?y.join(I(U?.cwd),A):A;if(U?.filter?.(E)===!1)continue;let K=await import(E);if(U?.resolveDefault==="only"&&!K.default)throw Error(`Module ${A} does not have a default export`);let F=U?.resolveDefault?K.default??K:K,$=U?.map?await U.map(F,A):F;if($!==void 0)O.push($)}catch(E){if(U?.fail?.(A,E)===!1)continue;throw Error(`Failed to import module ${A}: ${E.message??E}`,{cause:E})}return O},XU=async(T,U)=>{let O=[],A=I(U?.cwd);for(let E of T){let K=(await Array.fromAsync(r.glob(E,{cwd:A}))).map((F)=>y.join(A,F));O.push(...await n(K,U))}return O};export{eT as writeOutputs,c as writeOutput,V as writeFormat,L as locate,uT as loadFormat,n as importList,XU as importGlob,sT as globMap,I as getCwd,C as exists,B as StringBuilder,j as NavigateResult,P as NavigateAction,k as Markdown,m as Logger,N as CommandLineArgs};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@homedev/framework",
3
- "version": "1.0.5",
3
+ "version": "1.0.7",
4
4
  "description": "homedev framework",
5
5
  "author": "julzor",
6
6
  "license": "ISC",