UNPKG

@mnrendra/read-stacked-file

Version:

Read a file based on the stack trace from any subdirectory in your project.

3 lines (2 loc) 1.2 kB
"use strict";var n=require("node:path"),y=require("@mnrendra/stack-trace"),m=require("node:url"),o=require("node:fs");const s=e=>new Error(`Unable to locate the initial path of "${e}".`),b=(e,t)=>{if(typeof t!="string")throw s(e);try{if(t=m.fileURLToPath(t),n.isAbsolute(t))return t;throw s(e)}catch{if(n.isAbsolute(t))return t;throw s(e)}},c=(e,t,i=10)=>{if(n.isAbsolute(e))return n.resolve(e);const[r]=y.traceFiles(t,{limit:i}),a=b(e,r),w=n.dirname(a);return n.resolve(w,e)},l=(e,t)=>{const i=n.basename(e),r=n.dirname(e),a=n.resolve(r,t);return n.resolve(a,i)},u=(e,t,i)=>{if(t===n.resolve("/",e)&&typeof i!="string")throw new Error(`Unable to find the "${n.basename(e)}" file.`)},f=async e=>await new Promise(t=>{o.readFile(e,"utf8",(i,r)=>{i!==null&&t(void 0),t(r)})}),d=async(e,{caller:t,stackTraceLimit:i=10}={})=>{let r=c(e,t??d,i),a=await f(r);for(;typeof a!="string";)r=l(r,".."),a=await f(r),u(e,r,a);return a},h=e=>{try{return o.readFileSync(e,"utf8")}catch{}},v=(e,{caller:t,stackTraceLimit:i=10}={})=>{let r=c(e,t??v,i),a=h(r);for(;typeof a!="string";)r=l(r,".."),a=h(r),u(e,r,a);return a};exports.readStackedFile=d,exports.readStackedFileSync=v; //# sourceMappingURL=index.js.map