coffi
Version:
⚡️ A fast, lightweight, easy-to-use, configuration files loader 📄
2 lines (1 loc) • 2.76 kB
JavaScript
var F=require("node:module");var v=Object.create;var{getPrototypeOf:J,defineProperty:u,getOwnPropertyNames:y,getOwnPropertyDescriptor:L}=Object,$=Object.prototype.hasOwnProperty;var R=(n,e,t)=>{t=n!=null?v(J(n)):{};let r=e||!n||!n.__esModule?u(t,"default",{value:n,enumerable:!0}):t;for(let o of y(n))if(!$.call(r,o))u(r,o,{get:()=>n[o],enumerable:!0});return r},h=new WeakMap,I=(n)=>{var e=h.get(n),t;if(e)return e;if(e=u({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function")y(n).map((r)=>!$.call(e,r)&&u(e,r,{get:()=>n[r],enumerable:!(t=L(n,r))||t.enumerable}));return h.set(n,e),e};var N=(n,e)=>{for(var t in e)u(n,t,{get:e[t],enumerable:!0,configurable:!0,set:(r)=>e[t]=()=>r})};var U={};N(U,{loadConfig:()=>G});module.exports=I(U);var m=require("node:fs"),j=require("node:fs/promises"),a=require("node:path");class f{static instance;constructor(){}static getInstance(){if(!f.instance)f.instance=new f;return f.instance}warn(n){console.warn(`\x1B[33mWARNING: ${n}\x1B[0m`)}debug(n){console.debug(`\x1B[34mDEBUG: ${n}\x1B[0m`)}error(n){console.error(`\x1B[31mERROR: ${n}\x1B[0m`)}}var C=f.getInstance();var k=R(require("strip-json-comments"));function P(n){return k.default(n).replace(/,\s*([}\]])/g,"$1").trim()}var D=[".ts",".mts",".cts",".js",".mjs",".cjs",".json"];function S(n){try{return m.existsSync(n)}catch{return!1}}async function b(n){try{if(!S(n))return null;if(n.slice(n.lastIndexOf(".")).toLowerCase()===".json"){let o=await j.readFile(n,"utf-8"),c=P(o);return JSON.parse(c)}let t=await import(n),r=t.default||t;if(typeof r==="function")r=r();if(r instanceof Promise)return r;return r}catch(e){return C.error(`Failed to parse config file: ${O(e)}`),null}}function O(n){if(n instanceof Error)return n.message;return String(n)}function A(n,e){let t=n,r=0;while(r<e){let o=a.join(t,"package.json");if(S(o))return o;let c=a.dirname(t);if(c===t)break;t=c,r++}return null}async function E(n,e,t,r,o,c){if(c){let i=A(t,r);if(i){let s=await b(i);if(s&&typeof s==="object"&&c in s)return{config:s[c],filepath:i}}}if(o){let i=a.resolve(t,o),s=await b(i);if(s!==null)return{config:s,filepath:i};C.warn(`Preferred path "${o}" not found or invalid, searching for ${n} files instead.`)}let l=t,g=0;while(g<r){try{let s=m.readdirSync(l),x=new Set(s);for(let w of e){let p=`${n}${w}`;if(x.has(p)){let d=a.join(l,p),T=await b(d);if(T!==null)return{config:T,filepath:d}}}}catch(s){}let i=a.dirname(l);if(i===l)break;l=i,g++}return{config:null,filepath:null}}async function G(n,e=D,t={}){if(typeof n==="string"){let s=n,{cwd:x=process.cwd(),maxDepth:w=10,preferredPath:p,packageJsonProperty:d}=t;return E(s,e,x,w,p,d)}let{name:r,extensions:o=D,cwd:c=process.cwd(),maxDepth:l=10,preferredPath:g,packageJsonProperty:i}=n;return E(r,o,c,l,g,i)}