UNPKG

zod-config

Version:

Load configuration variables from multiple sources with flexible adapters, ensuring type safety with Zod.

2 lines (1 loc) 872 B
function s(r,...o){if(!o.length)return r;let e=o.shift();return e===void 0?r:(f(r)&&f(e)&&Object.keys(e).forEach(n=>{if(e[n]===void 0)return;if(!f(e[n])){r[n]=e[n];return}let t=r[n];if(!f(t)){r[n]=s({},e[n]);return}s(t,e[n])}),s(r,...o))}function f(r){return!r||typeof r!="object"?!1:Object.getPrototypeOf(r)===Object.prototype||Object.getPrototypeOf(r)===null}var l=async r=>{let{schema:o,adapters:e,onError:n,onSuccess:t}=r,u=r.logger??console,c=await p(Array.isArray(e)?e:e?[e]:[],u),i=await o.safeParseAsync(c);if(!i.success){if(n)return n(i.error),{};throw i.error}return t&&t(i.data),i.data},p=async(r,o)=>{if(!r||r.length===0)return process.env;let e=await Promise.all(r.map(async n=>{try{return await n.read()}catch(t){return n.silent||o.warn(`Cannot read data from ${n.name}: ${t instanceof Error?t.message:t}`),{}}}));return s({},...e)};export{l as loadConfig};