zod-config
Version:
Load configuration variables from multiple sources with flexible adapters, ensuring type safety with Zod.
2 lines (1 loc) • 961 B
JavaScript
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 s(r,n){let{regex:e,prefixKey:t}=n;return e?p(r,e):t?u(r,t):r}import{readFile as c}from"fs/promises";var a="json adapter",x=({path:r,prefixKey:n,regex:e,silent:t})=>({name:a,read:async()=>{try{let o=await c(r,"utf-8"),f=JSON.parse(o)||{};return s(f,{prefixKey:n,regex:e})}catch(o){throw new Error(`Failed to parse / read JSON file at ${r}: ${o instanceof Error?o.message:o}`)}},silent:t});export{x as jsonAdapter};