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