zod-config
Version:
Load configuration variables from multiple sources with flexible adapters, ensuring type safety with Zod.
2 lines (1 loc) • 987 B
JavaScript
import{parse as c}from"dotenv";import{readFile as a}from"fs/promises";var u=(r,n)=>{if(r==null)return{};if(!i(r))throw new TypeError(`Cannot filter ${r} by prefix key as it is not a record-like object`);return Object.keys(r).filter(e=>e.startsWith(n)).reduce((e,t)=>(e[t]=r[t],e),{})},p=(r,n)=>{if(r==null)return{};if(!i(r))throw new TypeError(`Cannot filter ${r} by regex as it is not a record-like object`);return Object.keys(r).filter(e=>n.test(e)).reduce((e,t)=>(e[t]=r[t],e),{})};function i(r){return!r||typeof r!="object"?!1:Object.getPrototypeOf(r)===Object.prototype||Object.getPrototypeOf(r)===null}function f(r,n){let{regex:e,prefixKey:t}=n;return e?p(r,e):t?u(r,t):r}var l="dotenv adapter",b=({path:r,prefixKey:n,regex:e,silent:t})=>({name:l,read:async()=>{try{let o=await a(r,"utf-8"),s=c(o)||{};return f(s,{prefixKey:n,regex:e})}catch(o){throw new Error(`Failed to parse / read .env file at ${r}: ${o instanceof Error?o.message:o}`)}},silent:t});export{b as dotEnvAdapter};