UNPKG

gnablib

Version:

A lean, zero dependency library to provide a useful base for your project.

1 lines 2.09 kB
import{color as t,style as n}from"../cli/csi-tables.js";import{ParseProblem as s}from"../error/probs/ParseProblem.js";const i=Symbol.for("nodejs.util.inspect.custom"),{cyan:r,gray:e,yellow:o}=t,{reset:h,underline:c}=n,l=e+c;export class StackEntry{constructor(t,n,s,i){this.file=t,this.line=n,this.char=s,this.method=i}v8Style(){return` at ${this.method} (${this.file}:${this.line}:${this.char})`}spiderStyle(){return`${this.method}@${this.file}:${this.line}:${this.char}`}toString(){return`${this.method} ${this.file}:${this.line},${this.char}`}inColor(){return`${r}${this.method} ${l}${this.file}${h}:${o}${this.line}${h},${o}${this.char}${h}`}get[Symbol.toStringTag](){return"StackEntry"}[i](){return this.inColor()}static parseV8(t){const n="v8 stack line",i=t.getReset();t.trimStart(),t.trimEnd();let r=t.indexOf("at ");if(r<0){const[r,e]=i();return new s(n,"missing starting 'at'",t.toString(),r,e)}t.shrink(r+3),r=t.indexOf(" (");let e=".";if(r>0){if(e=t.substring(0,r),t.shrink(r+2),")"!=t.charAt(t.length-1)){const[r,e]=i();return new s(n,"missing closing ')'",t.toString(),r,e)}t.shrink(0,1)}if(r=t.lastIndexOf(":"),r<0){const[r,e]=i();return new s(n,"missing trailing ':'",t.toString(),r,e)}const o=t.substring(r+1);if(t.shrink(0,t.length-r),r=t.lastIndexOf(":"),r<0){const[r,e]=i();return new s(n,"missing second last ':'",t.toString(),r,e)}const h=t.substring(r+1);t.shrink(0,t.length-r),t.startsWith("async ")&&(e="async",t.shrink(6));const c=t.toString();return new StackEntry(c,+h,+o,e)}static parseSpider(t){const n="spiderMoney stack line",i=t.getReset();t.trimStart(),t.trimEnd();let r=t.indexOf("@");if(r<0){const[r,e]=i();return new s(n,"missing @",t.toString(),r,e)}const e=0==r?".":t.substring(0,r);if(t.shrink(r+1),r=t.lastIndexOf(":"),r<0){const[r,e]=i();return new s(n,"missing trailing ':'",t.toString(),r,e)}const o=t.substring(r+1);if(t.shrink(0,t.length-r),r=t.lastIndexOf(":"),r<0){const[r,e]=i();return new s(n,"missing second last ':'",t.toString(),r,e)}const h=t.substring(r+1);t.shrink(0,t.length-r);const c=t.toString();return new StackEntry(c,+h,+o,e)}}