zod-schema-faker
Version:
Generates mock data from zod schema. Powered by @faker-js/faker and randexp.js
12 lines (10 loc) • 18.5 kB
JavaScript
;Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const S=require("@faker-js/faker"),F=require("randexp"),j=require("zod/v4/core");function N(e){const t=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(e){for(const n in e)if(n!=="default"){const a=Object.getOwnPropertyDescriptor(e,n);Object.defineProperty(t,n,a.get?a:{enumerable:!0,get:()=>e[n]})}}return t.default=e,Object.freeze(t)}const d=N(j);const v=10;let b;function A(e){b=e}function o(){if(b)return b;throw ReferenceError("Faker instance not set. Use `setFaker` to set it.")}const w=new S.SimpleFaker,s=(e,t)=>{const n=new F(e,t);return n.randInt=(a,r)=>w.number.int({min:a,max:r}),n.gen()},O=e=>{b.seed(e),w.seed(e)};function I(e,t,n){let a,r,i;for(const c of e._zod.def.checks??[])switch(c._zod.def.check){case"length_equals":{if(i!==void 0&&i!==c._zod.def.length)throw new RangeError;i=c._zod.def.length;break}case"max_length":{r=Math.min(r??1/0,c._zod.def.maximum);break}case"min_length":{a=Math.max(a??0,c._zod.def.minimum);break}default:{c._zod.def.check;break}}return a=a??i??0,r=r??i??a+3,t.depth>v&&(r=a),o().helpers.multiple(()=>n(e._zod.def.element,t),{count:{min:a,max:r}})}function x(e){return e.replace(/\\([.*+?^${}()|[\]\\])/g,"$1")}function T(e,t){return e*t/M(e,t)}function M(e,t){return t===0n||t===0?e:M(t,e%t)}function C(e,t,n){let a,r,i=1n;for(const c of e._zod.def.checks??[])switch(c._zod.def.check){case"greater_than":{const u=BigInt(c._zod.def.value)+(c._zod.def.inclusive?0n:1n);a=a!==void 0&&a>u?a:u;break}case"less_than":{const u=BigInt(c._zod.def.value)-(c._zod.def.inclusive?0n:1n);r=r!==void 0&&r<u?r:u;break}case"multiple_of":{const f=BigInt(c._zod.def.value),u=f<0n?-f:f;i=T(i,u);break}default:{c._zod.def.check;break}}return a===void 0&&(r===void 0?a=0n:a=r-10n),o().number.bigInt({min:a,max:r,multipleOf:i})}function D(e,t,n){return o().datatype.boolean()}function P(e,t,n){return n(e._zod.def.innerType,t)}const E=new Map;function L(e,t){E.set(e,t)}function B(e,t,n){return E.get(e)(e,t,n)}function R(e,t,n){const a=e._zod.bag.minimum??new Date(-864e13),r=e._zod.bag.maximum??new Date(864e13);return o().date.between({from:a,to:r})}function q(e,t,n){return o().datatype.boolean()?n(e._zod.def.innerType,t):e._zod.def.defaultValue}function U(e,t,n){return o().helpers.objectValue(e._zod.def.entries)}const y=100*1024*1024,Z={minSize:0,maxSize:1024,exactSize:void 0,allowedMimeTypes:[]},$={"text/plain":{extension:"txt",category:"text"},"text/html":{extension:"html",category:"text"},"text/css":{extension:"css",category:"text"},"text/javascript":{extension:"js",category:"text"},"text/csv":{extension:"csv",category:"text"},"text/markdown":{extension:"md",category:"text"},"text/xml":{extension:"xml",category:"text"},"text/yaml":{extension:"yaml",category:"text"},"application/json":{extension:"json",category:"application"},"application/xml":{extension:"xml",category:"application"},"application/javascript":{extension:"js",category:"application"},"application/pdf":{extension:"pdf",category:"application"},"application/zip":{extension:"zip",category:"application"},"application/octet-stream":{extension:"bin",category:"application"},"application/graphql":{extension:"graphql",category:"application"},"application/x-www-form-urlencoded":{extension:"form",category:"application"},"application/vnd.ms-excel":{extension:"xls",category:"application"},"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{extension:"xlsx",category:"application"},"application/msword":{extension:"doc",category:"application"},"application/vnd.openxmlformats-officedocument.wordprocessingml.document":{extension:"docx",category:"application"},"application/vnd.ms-powerpoint":{extension:"ppt",category:"application"},"application/vnd.openxmlformats-officedocument.presentationml.presentation":{extension:"pptx",category:"application"},"image/jpeg":{extension:"jpg",category:"image"},"image/png":{extension:"png",category:"image"},"image/gif":{extension:"gif",category:"image"},"image/svg+xml":{extension:"svg",category:"image"},"image/webp":{extension:"webp",category:"image"},"audio/mpeg":{extension:"mp3",category:"audio"},"audio/wav":{extension:"wav",category:"audio"},"audio/ogg":{extension:"ogg",category:"audio"},"video/mp4":{extension:"mp4",category:"video"},"video/webm":{extension:"webm",category:"video"},"video/ogg":{extension:"ogv",category:"video"},"font/woff":{extension:"woff",category:"font"},"font/woff2":{extension:"woff2",category:"font"},"font/ttf":{extension:"ttf",category:"font"},"font/otf":{extension:"otf",category:"font"},"multipart/form-data":{extension:"form",category:"multipart"}};function V(e,t,n){const a=o(),r=G(e),i=r.exactSize!==void 0?r.exactSize:a.number.int({min:r.minSize,max:r.maxSize}),c=H(r.allowedMimeTypes,a),f=K(c),u=Q(c,i);return new File([u],f,{type:c,lastModified:a.date.recent().getTime()})}function G(e){const t={...Z};for(const n of e._zod.def.checks??[])switch(n._zod.def.check){case"min_size":{const a=n._zod.def.minimum;_(a,"minimum"),t.minSize=Math.max(t.minSize,k(a));break}case"max_size":{const a=n._zod.def.maximum;_(a,"maximum"),t.maxSize=Math.min(t.maxSize,k(a));break}case"size_equals":{const a=n._zod.def.size;_(a,"exact"),t.exactSize=k(a);break}case"mime_type":{W(n,t);break}}return X(t),t}function _(e,t){if(e<0)throw new Error(`Invalid file size constraint: ${t} size cannot be negative (${e})`)}function k(e){const t=Math.min(e,y);return t!==e&&console.warn(`Large size constraint (${e}) capped at ${y} bytes`),t}function W(e,t){const n=e;if(n._zod?.def?.mime&&Array.isArray(n._zod.def.mime)){if(t.allowedMimeTypes.length>0){const a=t.allowedMimeTypes.join(", "),r=n._zod.def.mime.join(", ");throw new Error(`Conflicting MIME type constraints: cannot have both [${a}] and [${r}] constraints on the same file`)}t.allowedMimeTypes=[...n._zod.def.mime]}}function X(e){if(e.exactSize===void 0&&e.minSize>e.maxSize)throw new Error(`Conflicting file size constraints: minimum size (${e.minSize}) cannot be greater than maximum size (${e.maxSize})`)}function H(e,t){if(e.length>0){const n=[...new Set(e)];return t.helpers.arrayElement(n)}return"text/plain"}function J(e){const t=$[e];if(t)return t.extension;const n=e.split("/");if(n.length===2){const r=n[1].replace(/[^a-z0-9]/gi,"").toLowerCase();if(r.length>0&&r.length<=10)return r}return"dat"}function Y(e){const t=$[e];if(t)return t.category;switch(e.split("/")[0]){case"text":return"text";case"image":return"image";case"audio":return"audio";case"video":return"video";case"font":return"font";case"multipart":return"multipart";default:return"application"}}function K(e){const t=o(),n=J(e);return`${t.system.fileName({extensionCount:0})}.${n}`}function Q(e,t){if(t===0)return new ArrayBuffer(0);if(t>10*1024*1024)return ee(t);const n=o();let a;switch(Y(e)){case"text":a=te(e,n);break;case"application":a=ne(e,n);break;default:a=ae(e,n);break}a=re(a,t);const c=new TextEncoder().encode(a);if(c.length!==t){const f=new ArrayBuffer(t),u=new Uint8Array(f);return c.length<t?u.set(c):u.set(c.slice(0,t)),f}return c.buffer}function ee(e){const t=new ArrayBuffer(e),n=new Uint8Array(t),a=new TextEncoder().encode(`LARGE_FILE_CONTENT_PLACEHOLDER
`);for(let r=0;r<e;r+=a.length){const i=Math.min(a.length,e-r);n.set(a.slice(0,i),r)}return t}function te(e,t){switch(e){case"text/html":return`<html><head><title>${t.lorem.words(2)}</title></head><body><h1>${t.lorem.words(3)}</h1><p>${t.lorem.sentence()}</p></body></html>`;case"text/css":return"body { font-family: Arial; color: #333; } h1 { margin: 10px; }";case"text/javascript":return`function ${t.hacker.noun().replace(/\s+/g,"")}() { return "${t.lorem.word()}"; }`;case"text/csv":return`name,email
${t.person.fullName()},${t.internet.email()}`;case"text/markdown":return`# ${t.lorem.words(2)}
${t.lorem.sentence()}`;case"text/xml":return`<?xml version="1.0"?><root><item>${t.lorem.word()}</item></root>`;case"text/yaml":return`name: ${t.lorem.word()}
version: 1.0.0`;default:return t.lorem.paragraphs(2)}}function ne(e,t){switch(e){case"application/json":return JSON.stringify({id:t.string.uuid(),name:t.person.fullName(),email:t.internet.email()});case"application/xml":return`<?xml version="1.0"?><data><user id="${t.string.uuid()}">${t.person.fullName()}</user></data>`;case"application/javascript":return`const data = { message: "${t.lorem.sentence()}" }; export default data;`;default:return`Binary file content for ${e}
Generated: ${new Date().toISOString()}
Data: ${t.string.alphanumeric(50)}`}}function ae(e,t){return`${e.toUpperCase()} file placeholder
Generated: ${new Date().toISOString()}
ID: ${t.string.uuid()}
Data: ${t.string.alphanumeric(100)}`}function re(e,t){if(e.length===t)return e;if(e.length<t){const n=e;for(;e.length<t;){const a=t-e.length;a>=n.length?e+=n:e+=n.slice(0,a)}}else e=e.slice(0,t);return e}function oe(e,t,n){return(...a)=>(d.parse(e._zod.def.input,a),n(e._zod.def.output,t))}function ie(e,t,n){return n(e._zod.def.getter(),t)}function se(e,t,n){return o().helpers.arrayElement(e._zod.def.values)}function ce(e,t,n){return new Map(o().helpers.multiple(()=>[n(e._zod.def.keyType,t),n(e._zod.def.valueType,t)],{count:{min:0,max:10}}))}function de(e,t,n){return NaN}function ue(e,t,n){throw Error()}function le(e,t,n){return n(e._zod.def.innerType,t)}function fe(e,t,n){return null}function me(e,t,n){return o().datatype.boolean()?n(e._zod.def.innerType,t):null}function pe(e,t,n){let a=Number.MIN_SAFE_INTEGER,r=Number.MAX_SAFE_INTEGER,i,c=!1;switch(e._zod.def.format){case"float32":{c=!1;break}case"float64":{c=!1;break}case"int32":{c=!0,a=Math.max(a,-2147483647),r=Math.min(r,2147483646);break}case"safeint":{c=!0;break}case"uint32":{c=!0,a=Math.max(a,0),r=Math.min(r,4294967295);break}}for(const u of e._zod.def.checks??[])switch(u._zod.def.check){case"greater_than":{const m=Number(u._zod.def.value)+(u._zod.def.inclusive?0:1e-15);a=a!==void 0?Math.max(a,m):m;break}case"less_than":{const m=Number(u._zod.def.value)-(u._zod.def.inclusive?0:1e-15);r=r!==void 0?Math.min(r,m):m;break}case"multiple_of":{const m=Number(u._zod.def.value);i=i!==void 0?T(i,m):m;break}case"number_format":{switch(u._zod.def.format){case"float32":{c=!1;break}case"float64":{c=!1;break}case"int32":{c=!0,a=Math.max(a,-2147483647),r=Math.min(r,2147483646);break}case"safeint":{c=!0;break}case"uint32":{c=!0,a=Math.max(a,0),r=Math.min(r,4294967295);break}}break}default:{u._zod.def.check;break}}return i!==void 0&&i===parseInt(i.toString(),10)&&(c=!0),c?o().number.int({min:a,max:r,multipleOf:i}):o().number.float({min:a,max:r,multipleOf:i})}function ge(e,t,n){return Object.fromEntries(Object.entries(e._zod.def.shape).concat(e._zod.def.catchall&&e._zod.def.catchall._zod.def.type!=="never"?o().helpers.multiple(()=>o().string.uuid()).filter(a=>!e._zod.def.shape[a]).map(a=>[a,e._zod.def.catchall]):[]).map(([a,r])=>[a,n(r,{...t,depth:t.depth+1})]))}function be(e,t,n){return o().datatype.boolean()?n(e._zod.def.innerType,t):void 0}const xe=["true","1","yes","on","y","enabled"],_e=["false","0","no","off","n","disabled"],ke=[...xe,..._e];function ze(e,t,n){if(e._zod.def.out._zod.def.type==="boolean")return o().helpers.arrayElement(ke);const a=n(e._zod.def.in,t),r={value:a,issues:a.issues},i={},c=e._zod.def.out._zod.run(r,i);return r.value=c,a}function ye(e,t,n){return o().datatype.boolean()?n(e._zod.def.innerType,t):e._zod.def.defaultValue}function he(e,t,n){return Promise.resolve(n(e._zod.def.innerType,t))}function ve(e,t,n){return Object.freeze(n(e._zod.def.innerType,t))}function we(e,t,n){return e._zod.def.keyType instanceof d.$ZodEnum?Object.fromEntries(Object.values(e._zod.def.keyType._zod.def.entries).map(a=>[a,n(e._zod.def.valueType,t)])):e._zod.def.keyType instanceof d.$ZodLiteral?Object.fromEntries(e._zod.def.keyType._zod.def.values.map(a=>[a,n(e._zod.def.valueType,t)])):Object.fromEntries(o().helpers.multiple(()=>[n(e._zod.def.keyType,t),n(e._zod.def.valueType,t)]))}function Te(e,t,n){let a=0,r=1/0;for(const i of e._zod.def.checks??[])switch(i._zod.def.check){case"max_size":{r=Math.min(r,i._zod.def.maximum);break}case"min_size":{a=Math.max(a,i._zod.def.minimum);break}case"size_equals":{a=i._zod.def.size,r=i._zod.def.size;break}default:{i._zod.def.check;break}}return r=r===1/0?a+o().number.int({min:0,max:10}):r,t.depth>v&&(r=a),new Set(o().helpers.multiple(()=>n(e._zod.def.valueType,t),{count:{min:a,max:r}}))}const Me=/^(?!\.)(?!.*\.\.)([A-Za-z0-9_'+\-\.]*)[A-Za-z0-9_+-]@([A-Za-z0-9][A-Za-z0-9\-]*\.)+[A-Za-z]{2,}$/;function h(e,t){let n;switch(e._zod.def.format){case"base64":{n=s(d.regexes.base64);break}case"base64url":{n="Zm9vK2Jhci9iYXo";break}case"cidrv4":{n=s(d.regexes.cidrv4);break}case"cidrv6":{n=o().internet.ipv6()+"/"+o().number.int({min:0,max:128});break}case"cuid":{n=s(d.regexes.cuid);break}case"cuid2":{n=s(d.regexes.cuid2);break}case"date":{n=s(d.regexes.date);break}case"datetime":{const r=e._zod.def;n=s(d.regexes.datetime({local:r.local,offset:r.offset,precision:r.precision}));break}case"duration":{n=["P",o().datatype.boolean()?o().number.int({min:0,max:10*2e3})+"Y":"",o().datatype.boolean()?o().number.int({min:0,max:120})+"M":"",o().datatype.boolean()?o().number.int({min:0,max:310})+"D":"","T",o().datatype.boolean()?o().number.int({min:0,max:240})+"H":"",o().datatype.boolean()?o().number.int({min:0,max:600})+"M":"",o().datatype.boolean()?o().number.int({min:0,max:600})+"S":""].join("").replace(/T$/,"").replace(/^P$/,"P"+o().number.int({min:0,max:100})+"W");break}case"e164":{n=s(d.regexes.e164);break}case"email":{const r=e._zod.def.pattern?e._zod.def.pattern:d.regexes.email;n=s(r),Me.source===r.source&&(n=n.replace(/\.\./g,".").replace(/^\./,"a"));break}case"emoji":{n="☘";break}case"hex":{n=s(d.regexes.hex);break}case"hostname":{n=o().internet.domainName();break}case"httpUrl":{n=o().internet.url();break}case"guid":{n=s(d.regexes.guid);break}case"ipv4":{n=s(d.regexes.ipv4);break}case"ipv6":{n=o().internet.ipv6();break}case"jwt":{const r=e._zod.def;n=o().internet.jwt({header:{alg:r.alg||o().internet.jwtAlgorithm(),typ:"JWT"}});break}case"ksuid":{n=s(d.regexes.ksuid);break}case"md5_base64":{n=s(d.regexes.md5_base64);break}case"md5_base64url":{n=s(d.regexes.md5_base64url);break}case"md5_hex":{n=s(d.regexes.md5_hex);break}case"nanoid":{n=s(d.regexes.nanoid);break}case"regex":{n=s(e._zod.def.pattern);break}case"sha1_base64":{n=s(d.regexes.sha1_base64);break}case"sha1_base64url":{n=s(d.regexes.sha1_base64url);break}case"sha1_hex":{n=s(d.regexes.sha1_hex);break}case"sha256_base64":{n=s(d.regexes.sha256_base64);break}case"sha256_base64url":{n=s(d.regexes.sha256_base64url);break}case"sha256_hex":{n=s(d.regexes.sha256_hex);break}case"sha384_base64":{n=s(d.regexes.sha384_base64);break}case"sha384_base64url":{n=s(d.regexes.sha384_base64url);break}case"sha384_hex":{n=s(d.regexes.sha384_hex);break}case"sha512_base64":{n=s(d.regexes.sha512_base64);break}case"sha512_base64url":{n=s(d.regexes.sha512_base64url);break}case"sha512_hex":{n=s(d.regexes.sha512_hex);break}case"time":{const r=e._zod.def;n=s(d.regexes.time({precision:r.precision}));break}case"ulid":{n=s(d.regexes.ulid);break}case"url":{const r=e._zod.def.protocol,i=e._zod.def.hostname;r&&i?n=s(r)+"://"+s(i):r?n=s(r)+"://"+o().internet.domainName():i?n="https://"+s(i):n=o().internet.url();break}case"uuid":{switch(e._zod.def.version){case"v1":n=s(d.regexes.uuid(1));break;case"v2":n=s(d.regexes.uuid(2));break;case"v3":n=s(d.regexes.uuid(3));break;case"v4":n=s(d.regexes.uuid(4));break;case"v5":n=s(d.regexes.uuid(5));break;case"v6":n=s(d.regexes.uuid(6));break;case"v7":n=s(d.regexes.uuid(7));break;case"v8":n=s(d.regexes.uuid(8));break;default:n=s(d.regexes.uuid())}break}case"xid":{n=s(d.regexes.xid);break}}return n}function Ee(e,t,n){let a=o().lorem.sentence(),r,i,c="",f="",u="",m=!1,z=!1;a=h(e)??a;for(const p of e._zod.def.checks??[])switch(p._zod.def.check){case"length_equals":{r=p._zod.def.length,i=p._zod.def.length;break}case"max_length":{i=Math.min(i??p._zod.def.maximum,p._zod.def.maximum);break}case"min_length":{r=Math.max(r??p._zod.def.minimum,p._zod.def.minimum);break}case"string_format":{a=h(p)??a;const g=p;switch(g._zod.def.format){case"ends_with":{u=x(g._zod.def.pattern?.source??"").replace(/^\.\*/,"").replace(/\$$/,"");break}case"includes":{f=x(g._zod.def.pattern?.source??"");break}case"lowercase":{z=!0;break}case"starts_with":{c=x(g._zod.def.pattern?.source??"").replace(/^\^/,"").replace(/\.\*$/,"");break}case"uppercase":{m=!0;break}}break}default:{p._zod.def.check;break}}return i=i===1/0?r:i,r!==void 0&&a.length<r&&(a=a.padEnd(r," ")),i!==void 0&&a.length>i&&(a=a.slice(0,o().number.int({min:r,max:i}))),m&&(a=a.toUpperCase()),z&&(a=a.toLowerCase()),c&&!a.startsWith(c)&&(a=c+a),f&&!a.includes(f)&&(a=a+f),u&&!a.endsWith(u)&&(a=a+u),a}function $e(e,t,n){return Symbol()}function Se(e,t,n){return e._zod.def.parts.map(a=>a instanceof d.$ZodType?n(a,t):a).map(a=>a+"").join("")}function Fe(e,t,n){return e._zod.def.items.map(a=>n(a,t)).concat(e._zod.def.rest?o().helpers.multiple(()=>n(e._zod.def.rest,t),{count:{min:0,max:5}}):[])}function je(e,t,n){const a=e._zod.def.options.filter(r=>r._zod.def.type!=="never");return a.length===0&&a.push(e._zod.def.options[0]),n(o().helpers.arrayElement(a),t)}const l=((e,t)=>{switch(e._zod.def.type){case"any":return void 0;case"array":return I(e,t,l);case"bigint":return C(e);case"boolean":return D();case"catch":return P(e,t,l);case"custom":return B(e,t,l);case"date":return R(e);case"default":return q(e,t,l);case"enum":return U(e);case"function":return oe(e,t,l);case"file":return V(e);case"int":break;case"intersection":break;case"lazy":return ie(e,t,l);case"literal":return se(e);case"map":return ce(e,t,l);case"nan":return de();case"never":return ue();case"nonoptional":return le(e,t,l);case"null":return fe();case"nullable":return me(e,t,l);case"number":return pe(e);case"object":return ge(e,t,l);case"optional":return be(e,t,l);case"pipe":return ze(e,t,l);case"prefault":return ye(e,t,l);case"promise":return he(e,t,l);case"readonly":return ve(e,t,l);case"record":return we(e,t,l);case"set":return Te(e,t,l);case"string":return Ee(e);case"success":break;case"symbol":return $e();case"template_literal":return Se(e,t,l);case"transform":break;case"tuple":return Fe(e,t,l);case"undefined":return void 0;case"union":return je(e,t,l);case"unknown":return void 0;case"void":return void 0;default:{e._zod.def.type;break}}throw TypeError()});function Ne(e){return l(e,{depth:0})}exports.custom=L;exports.fake=Ne;exports.getFaker=o;exports.randexp=s;exports.seed=O;exports.setFaker=A;