UNPKG

nestjs-zod-config

Version:

Type-safe NestJS configuration module with Zod schema validation for environment variables and .env files

2 lines (1 loc) 2.28 kB
"use strict";var e=require("zod"),r=require("@nestjs/common"),t=require("process"),o=require("dotenv");function s(e){var r=Object.create(null);return e&&Object.keys(e).forEach(function(t){if("default"!==t){var o=Object.getOwnPropertyDescriptor(e,t);Object.defineProperty(r,t,o.get?o:{enumerable:!0,get:function(){return e[t]}})}}),r.default=e,Object.freeze(r)}var n=s(t);const i=e.z.union([e.z.boolean(),e.z.string()]).transform(e=>{if("boolean"==typeof e)return e;if("true"===e)return!0;if("false"===e)return!1;throw new Error("Invalid boolean value")}),c=e.z.preprocess((r,t)=>"string"==typeof r?""===r.trim()?[]:r.split(",").map(e=>e.trim()).filter(e=>""!==e):(t.addIssue({code:"custom",message:"Invalid comma delimited array - must be a string"}),e.z.NEVER),e.z.array(e.z.string())),a=e.z.string().transform((r,t)=>{try{return JSON.parse(r)}catch{return t.addIssue({code:"custom",message:"Invalid JSON string - cannot be parsed"}),e.z.NEVER}}),u=e.z.string().pipe(e.z.coerce.date());function d(e,r,t,o){var s,n=arguments.length,i=n<3?r:null===o?o=Object.getOwnPropertyDescriptor(r,t):o;if("object"==typeof Reflect&&"function"==typeof Reflect.decorate)i=Reflect.decorate(e,r,t,o);else for(var c=e.length-1;c>=0;c--)(s=e[c])&&(i=(n<3?s(i):n>3?s(r,t,i):s(r,t))||i);return n>3&&i&&Object.defineProperty(r,t,i),i}"function"==typeof SuppressedError&&SuppressedError;class f{config;schema;options;constructor(e,r){this.schema=e,this.options=r;let t={...n.env};try{const e=o.config({path:r?.envFilePath});e.parsed&&(t={...t,...e.parsed})}catch{throw new Error("Error parsing .env file")}r?.overrides&&(t={...t,...r.overrides}),this.config=e.parse(t)}get(e){return this.config[e]}}var l;exports.ZodConfigModule=l=class{static forRoot(e){return{global:e.isGlobal,module:l,providers:[e.config],exports:[e.config]}}},exports.ZodConfigModule=l=d([r.Module({})],exports.ZodConfigModule),exports.ZodConfig=(e,t)=>{let o=class extends f{static schema=e;constructor(){super(e,t)}static withOverrides(r){const o={...t,overrides:{...t?.overrides,...r}};return new f(e,o)}};return o=d([r.Injectable()],o),o},exports.ZodConfigStatic=f,exports.commaDelimitedArray=c,exports.jsonStringCoerce=a,exports.loadZodConfig=e=>new e(e.schema),exports.safeBooleanCoerce=i,exports.strictCoerceStringDate=u;