ancesdir
Version:
Find a specific ancestor/root directory given a starting location and a search parameter
3 lines (2 loc) • 1.77 kB
JavaScript
;Object.defineProperty(exports,"__esModule",{value:!0});var r=require("node:path"),e=require("node:fs");function n(r){var e=Object.create(null);return r&&Object.keys(r).forEach((function(n){if("default"!==n){var o=Object.getOwnPropertyDescriptor(r,n);Object.defineProperty(e,n,o.get?o:{enumerable:!0,get:function(){return r[n]}})}})),e.default=r,Object.freeze(e)}var o=n(r),t=n(e);const c=new Map,u=(r,e)=>{for(const n of r)c.set(n,e)},i=(r,e)=>{throw new Error(`Could not find marker, "${e}", from given starting location "${r}"`)},l=({from:r,marker:e,includeFrom:n,force:l})=>{o.isAbsolute(r)||(r=>{throw new Error(`The starting path must be absolute, but "${r}" is relative`)})(r);const s=n=>{if(l)return;const o=(r=>c.get(r))(n);if(null!=o)return o;null===o&&i(r,e)},f=(r,n)=>{const t=r.split(o.sep).join("/");return n?`includeFrom:${t}:${e}`:`${t}:${e}`};if(n){const n=f(r,!0),c=s(n);if(null!=c)return c;if(t.existsSync(o.join(r,e)))return u([n],r),r}const a=[];let m=null,d=r;for(;null==m;){const n=f(d,!1);a.push(n);const c=s(n);if(null!=c){m=c;continue}const l=o.dirname(d);l!==d&&null!=l||(u(a,null),i(r,e));const p=o.join(l,e);t.existsSync(p)?(a.push(f(l,!0)),u(a,l),m=l):d=l}return m},s=()=>l({force:!1,from:__dirname,marker:f,includeFrom:!1}),f="package.json",a=(r,e)=>"string"==typeof r?{force:!1,from:r,includeFrom:!1,marker:e??f}:"object"==typeof r&&null!==r?{force:r.force??!1,from:r.from??s(),marker:r.marker??f,includeFrom:r.includeFrom??!1}:{force:!1,from:s(),marker:f,includeFrom:!1};exports.clearCache=()=>{c.clear()},exports.closesdir=(e,n)=>{const o=a(e,n);return o.from===s()&&(o.from=r.dirname(o.from)),l({...o,includeFrom:!0})},exports.default=(r,e)=>{const n=a(r,e);return l({...n,includeFrom:!1})};
//# sourceMappingURL=index.js.map