UNPKG

@universal-env/core

Version:

Universal environment validator for Node, Bun, and Deno using Zod

2 lines (1 loc) 5.96 kB
var S=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(o,d)=>(typeof require<"u"?require:o)[d]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+r+'" is not supported')});var D=()=>typeof Bun<"u",x=()=>typeof Deno<"u";async function N(r,o){if(D()){await Bun.write(r,o);return}if(x()){await Deno.writeTextFile(r,o);return}if(typeof process<"u"&&typeof S<"u"){let{writeFile:d}=await import("fs/promises");await d(r,o,"utf-8");return}throw new Error("Unsupported runtime for file writing")}import"zod";import Z from"typescript";import m from"typescript";var R=r=>({...{nativeEnums:r?.resolveNativeEnums?"resolve":"identifier"},...r}),{factory:T,SyntaxKind:E,ScriptKind:k,ScriptTarget:O,EmitHint:A}=m,w=r=>m.isIdentifier(r)?T.createTypeReferenceNode(r):r,F=r=>T.createTypeReferenceNode(T.createIdentifier(r)),g=()=>T.createKeywordTypeNode(E.UnknownKeyword);var b=(r,o)=>{let d=m.createSourceFile("print.ts","",O.Latest,!1,k.TS);return m.createPrinter(o).printNode(A.Unspecified,r,d)};var $=/^[$A-Z_a-z][\w$]*$/,_=r=>$.test(r)?T.createIdentifier(r):T.createStringLiteral(r),P=(r,o)=>{m.addSyntheticLeadingComment(r,E.MultiLineCommentTrivia,`* ${o} `,!0)},{factory:e,SyntaxKind:s}=Z,j=(r,o,d)=>{let p;return r._def.getType&&(p=r._def.getType(Z,o,d)),p},h=(r,o,d)=>{let p=o??"Identifier",y=R(d),u={nativeEnums:[]};return{node:i(r,p,u,y),store:u}},i=(r,o,d,p)=>{let y=r._def.typeName,u=j(r,o,p);if(u&&y!=="ZodNativeEnum")return w(u);let a=[o,d,p];switch(y){case"ZodString":return e.createKeywordTypeNode(s.StringKeyword);case"ZodNumber":return e.createKeywordTypeNode(s.NumberKeyword);case"ZodBigInt":return e.createKeywordTypeNode(s.BigIntKeyword);case"ZodBoolean":return e.createKeywordTypeNode(s.BooleanKeyword);case"ZodDate":return e.createTypeReferenceNode(e.createIdentifier("Date"));case"ZodUndefined":return e.createKeywordTypeNode(s.UndefinedKeyword);case"ZodNull":return e.createLiteralTypeNode(e.createNull());case"ZodVoid":return e.createUnionTypeNode([e.createKeywordTypeNode(s.VoidKeyword),e.createKeywordTypeNode(s.UndefinedKeyword)]);case"ZodAny":return e.createKeywordTypeNode(s.AnyKeyword);case"ZodUnknown":return g();case"ZodNever":return e.createKeywordTypeNode(s.NeverKeyword);case"ZodLazy":{if(!u)return F(o);break}case"ZodLiteral":{let t,n=r._def.value;switch(typeof n){case"number":{t=e.createNumericLiteral(n);break}case"boolean":{t=n===!0?e.createTrue():e.createFalse();break}default:{t=e.createStringLiteral(n);break}}return e.createLiteralTypeNode(t)}case"ZodObject":{let n=Object.entries(r._def.shape()).map(([c,l])=>{let f=l,v=i(f,...a),{typeName:I}=f._def,U=I==="ZodOptional"||f.isOptional(),K=e.createPropertySignature(void 0,_(c),U?e.createToken(s.QuestionToken):void 0,v);return f.description&&P(K,f.description),K});return e.createTypeLiteralNode(n)}case"ZodArray":{let t=i(r._def.type,...a);return e.createArrayTypeNode(t)}case"ZodEnum":{let t=r._def.values.map(n=>e.createLiteralTypeNode(e.createStringLiteral(n)));return e.createUnionTypeNode(t)}case"ZodUnion":{let n=r._def.options.map(c=>i(c,...a));return e.createUnionTypeNode(n)}case"ZodDiscriminatedUnion":{let n=[...r._def.options.values()].map(c=>i(c,...a));return e.createUnionTypeNode(n)}case"ZodEffects":return i(r._def.schema,...a);case"ZodNativeEnum":{let t=u;if(p.nativeEnums==="union"){if(t)return w(t);let n=Object.values(r._def.values).map(c=>typeof c=="number"?e.createLiteralTypeNode(e.createNumericLiteral(c)):e.createLiteralTypeNode(e.createStringLiteral(c)));return e.createUnionTypeNode(n)}if(!t)return g();if(p.nativeEnums==="resolve"){let n=Object.entries(r._def.values).map(([c,l])=>{let f=typeof l=="number"?e.createNumericLiteral(l):e.createStringLiteral(l);return e.createEnumMember(_(c),f)});if(Z.isIdentifier(t))d.nativeEnums.push(e.createEnumDeclaration(void 0,t,n));else throw new Error('getType on nativeEnum must return an identifier when nativeEnums is "resolve"')}return w(t)}case"ZodOptional":{let t=i(r._def.innerType,...a);return e.createUnionTypeNode([t,e.createKeywordTypeNode(s.UndefinedKeyword)])}case"ZodNullable":{let t=i(r._def.innerType,...a);return e.createUnionTypeNode([t,e.createLiteralTypeNode(e.createNull())])}case"ZodTuple":{let t=r._def.items.map(n=>i(n,...a));return e.createTupleTypeNode(t)}case"ZodRecord":{let t=i(r._def.valueType,...a);return e.createTypeLiteralNode([e.createIndexSignature(void 0,[e.createParameterDeclaration(void 0,void 0,e.createIdentifier("x"),void 0,e.createKeywordTypeNode(s.StringKeyword))],t)])}case"ZodMap":{let t=i(r._def.valueType,...a),n=i(r._def.keyType,...a);return e.createTypeReferenceNode(e.createIdentifier("Map"),[n,t])}case"ZodSet":{let t=i(r._def.valueType,...a);return e.createTypeReferenceNode(e.createIdentifier("Set"),[t])}case"ZodIntersection":{let t=i(r._def.left,...a),n=i(r._def.right,...a);return e.createIntersectionTypeNode([t,n])}case"ZodPromise":{let t=i(r._def.type,...a);return e.createTypeReferenceNode(e.createIdentifier("Promise"),[t])}case"ZodFunction":{let t=r._def.args._def.items.map((l,f)=>{let v=i(l,...a);return e.createParameterDeclaration(void 0,void 0,e.createIdentifier(`args_${f}`),void 0,v)});t.push(e.createParameterDeclaration(void 0,e.createToken(s.DotDotDotToken),e.createIdentifier(`args_${t.length}`),void 0,e.createArrayTypeNode(g())));let n=i(r._def.returns,...a);return e.createFunctionTypeNode(void 0,t,n)}case"ZodDefault":{let t=i(r._def.innerType,...a),n=[];return t.forEachChild(c=>{[s.UndefinedKeyword].includes(c.kind)||n.push(c)}),t.types=n,t}}return e.createKeywordTypeNode(s.AnyKeyword)};function L(r){let o=h(r);return b(o.node)}var B="{{content}}";async function ee({schema:r,rawEnv:o=process.env,path:d,wrapper:p}){try{await r.parseAsync(o),console.log("Envs Validated Successfully");let y=L(r);if(p){let u=p.replace(B,y);await N(d,u)}else await N(d,y);console.log("Env Types Added Successfully")}catch(y){throw new Error(y)}}export{ee as validateEnv};