@chaos-maker/core 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/chaos-maker.cjs +3 -3
- package/dist/chaos-maker.js +1473 -1056
- package/dist/chaos-maker.umd.js +3 -3
- package/dist/types/ChaosMaker.d.ts +8 -0
- package/dist/types/builder.d.ts +33 -6
- package/dist/types/config.d.ts +75 -5
- package/dist/types/events.d.ts +11 -1
- package/dist/types/index.d.ts +4 -3
- package/dist/types/interceptors/domAssailant.d.ts +1 -1
- package/dist/types/interceptors/networkFetch.d.ts +1 -1
- package/dist/types/interceptors/networkXHR.d.ts +1 -1
- package/dist/types/interceptors/websocket.d.ts +30 -0
- package/dist/types/prng.d.ts +15 -0
- package/dist/types/utils.d.ts +14 -2
- package/package.json +5 -4
package/dist/chaos-maker.umd.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
(function(T,v){typeof exports=="object"&&typeof module<"u"?v(exports):typeof define=="function"&&define.amd?define(["exports"],v):(T=typeof globalThis<"u"?globalThis:T||self,v(T.ChaosMaker={}))})(this,function(T){"use strict";var Bt=Object.defineProperty;var Ht=(T,v,q)=>v in T?Bt(T,v,{enumerable:!0,configurable:!0,writable:!0,value:q}):T[v]=q;var R=(T,v,q)=>Ht(T,typeof v!="symbol"?v+"":v,q);var v;(function(s){s.assertEqual=n=>{};function e(n){}s.assertIs=e;function t(n){throw new Error}s.assertNever=t,s.arrayToEnum=n=>{const a={};for(const o of n)a[o]=o;return a},s.getValidEnumValues=n=>{const a=s.objectKeys(n).filter(i=>typeof n[n[i]]!="number"),o={};for(const i of a)o[i]=n[i];return s.objectValues(o)},s.objectValues=n=>s.objectKeys(n).map(function(a){return n[a]}),s.objectKeys=typeof Object.keys=="function"?n=>Object.keys(n):n=>{const a=[];for(const o in n)Object.prototype.hasOwnProperty.call(n,o)&&a.push(o);return a},s.find=(n,a)=>{for(const o of n)if(a(o))return o},s.isInteger=typeof Number.isInteger=="function"?n=>Number.isInteger(n):n=>typeof n=="number"&&Number.isFinite(n)&&Math.floor(n)===n;function r(n,a=" | "){return n.map(o=>typeof o=="string"?`'${o}'`:o).join(a)}s.joinValues=r,s.jsonStringifyReplacer=(n,a)=>typeof a=="bigint"?a.toString():a})(v||(v={}));var q;(function(s){s.mergeShapes=(e,t)=>({...e,...t})})(q||(q={}));const f=v.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),z=s=>{switch(typeof s){case"undefined":return f.undefined;case"string":return f.string;case"number":return Number.isNaN(s)?f.nan:f.number;case"boolean":return f.boolean;case"function":return f.function;case"bigint":return f.bigint;case"symbol":return f.symbol;case"object":return Array.isArray(s)?f.array:s===null?f.null:s.then&&typeof s.then=="function"&&s.catch&&typeof s.catch=="function"?f.promise:typeof Map<"u"&&s instanceof Map?f.map:typeof Set<"u"&&s instanceof Set?f.set:typeof Date<"u"&&s instanceof Date?f.date:f.object;default:return f.unknown}},c=v.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class L extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){const t=e||function(a){return a.message},r={_errors:[]},n=a=>{for(const o of a.issues)if(o.code==="invalid_union")o.unionErrors.map(n);else if(o.code==="invalid_return_type")n(o.returnTypeError);else if(o.code==="invalid_arguments")n(o.argumentsError);else if(o.path.length===0)r._errors.push(t(o));else{let i=r,d=0;for(;d<o.path.length;){const l=o.path[d];d===o.path.length-1?(i[l]=i[l]||{_errors:[]},i[l]._errors.push(t(o))):i[l]=i[l]||{_errors:[]},i=i[l],d++}}};return n(this),r}static assert(e){if(!(e instanceof L))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,v.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){const t={},r=[];for(const n of this.issues)if(n.path.length>0){const a=n.path[0];t[a]=t[a]||[],t[a].push(e(n))}else r.push(e(n));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}}L.create=s=>new L(s);const fe=(s,e)=>{let t;switch(s.code){case c.invalid_type:s.received===f.undefined?t="Required":t=`Expected ${s.expected}, received ${s.received}`;break;case c.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(s.expected,v.jsonStringifyReplacer)}`;break;case c.unrecognized_keys:t=`Unrecognized key(s) in object: ${v.joinValues(s.keys,", ")}`;break;case c.invalid_union:t="Invalid input";break;case c.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${v.joinValues(s.options)}`;break;case c.invalid_enum_value:t=`Invalid enum value. Expected ${v.joinValues(s.options)}, received '${s.received}'`;break;case c.invalid_arguments:t="Invalid function arguments";break;case c.invalid_return_type:t="Invalid function return type";break;case c.invalid_date:t="Invalid date";break;case c.invalid_string:typeof s.validation=="object"?"includes"in s.validation?(t=`Invalid input: must include "${s.validation.includes}"`,typeof s.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${s.validation.position}`)):"startsWith"in s.validation?t=`Invalid input: must start with "${s.validation.startsWith}"`:"endsWith"in s.validation?t=`Invalid input: must end with "${s.validation.endsWith}"`:v.assertNever(s.validation):s.validation!=="regex"?t=`Invalid ${s.validation}`:t="Invalid";break;case c.too_small:s.type==="array"?t=`Array must contain ${s.exact?"exactly":s.inclusive?"at least":"more than"} ${s.minimum} element(s)`:s.type==="string"?t=`String must contain ${s.exact?"exactly":s.inclusive?"at least":"over"} ${s.minimum} character(s)`:s.type==="number"?t=`Number must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${s.minimum}`:s.type==="bigint"?t=`Number must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${s.minimum}`:s.type==="date"?t=`Date must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(s.minimum))}`:t="Invalid input";break;case c.too_big:s.type==="array"?t=`Array must contain ${s.exact?"exactly":s.inclusive?"at most":"less than"} ${s.maximum} element(s)`:s.type==="string"?t=`String must contain ${s.exact?"exactly":s.inclusive?"at most":"under"} ${s.maximum} character(s)`:s.type==="number"?t=`Number must be ${s.exact?"exactly":s.inclusive?"less than or equal to":"less than"} ${s.maximum}`:s.type==="bigint"?t=`BigInt must be ${s.exact?"exactly":s.inclusive?"less than or equal to":"less than"} ${s.maximum}`:s.type==="date"?t=`Date must be ${s.exact?"exactly":s.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(s.maximum))}`:t="Invalid input";break;case c.custom:t="Invalid input";break;case c.invalid_intersection_types:t="Intersection results could not be merged";break;case c.not_multiple_of:t=`Number must be a multiple of ${s.multipleOf}`;break;case c.not_finite:t="Number must be finite";break;default:t=e.defaultError,v.assertNever(s)}return{message:t}};let Je=fe;function Ye(){return Je}const Qe=s=>{const{data:e,path:t,errorMaps:r,issueData:n}=s,a=[...t,...n.path||[]],o={...n,path:a};if(n.message!==void 0)return{...n,path:a,message:n.message};let i="";const d=r.filter(l=>!!l).slice().reverse();for(const l of d)i=l(o,{data:e,defaultError:i}).message;return{...n,path:a,message:i}};function u(s,e){const t=Ye(),r=Qe({issueData:e,data:s.data,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,t,t===fe?void 0:fe].filter(n=>!!n)});s.common.issues.push(r)}class S{constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){const r=[];for(const n of t){if(n.status==="aborted")return g;n.status==="dirty"&&e.dirty(),r.push(n.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){const r=[];for(const n of t){const a=await n.key,o=await n.value;r.push({key:a,value:o})}return S.mergeObjectSync(e,r)}static mergeObjectSync(e,t){const r={};for(const n of t){const{key:a,value:o}=n;if(a.status==="aborted"||o.status==="aborted")return g;a.status==="dirty"&&e.dirty(),o.status==="dirty"&&e.dirty(),a.value!=="__proto__"&&(typeof o.value<"u"||n.alwaysSet)&&(r[a.value]=o.value)}return{status:e.value,value:r}}}const g=Object.freeze({status:"aborted"}),K=s=>({status:"dirty",value:s}),E=s=>({status:"valid",value:s}),xe=s=>s.status==="aborted",we=s=>s.status==="dirty",H=s=>s.status==="valid",se=s=>typeof Promise<"u"&&s instanceof Promise;var h;(function(s){s.errToObj=e=>typeof e=="string"?{message:e}:e||{},s.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(h||(h={}));class ${constructor(e,t,r,n){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=n}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const Ce=(s,e)=>{if(H(e))return{success:!0,data:e.value};if(!s.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new L(s.common.issues);return this._error=t,this._error}}};function _(s){if(!s)return{};const{errorMap:e,invalid_type_error:t,required_error:r,description:n}=s;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:n}:{errorMap:(o,i)=>{const{message:d}=s;return o.code==="invalid_enum_value"?{message:d??i.defaultError}:typeof i.data>"u"?{message:d??r??i.defaultError}:o.code!=="invalid_type"?{message:i.defaultError}:{message:d??t??i.defaultError}},description:n}}class b{get description(){return this._def.description}_getType(e){return z(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:z(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new S,ctx:{common:e.parent.common,data:e.data,parsedType:z(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(se(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){const r={common:{issues:[],async:(t==null?void 0:t.async)??!1,contextualErrorMap:t==null?void 0:t.errorMap},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:z(e)},n=this._parseSync({data:e,path:r.path,parent:r});return Ce(r,n)}"~validate"(e){var r,n;const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:z(e)};if(!this["~standard"].async)try{const a=this._parseSync({data:e,path:[],parent:t});return H(a)?{value:a.value}:{issues:t.common.issues}}catch(a){(n=(r=a==null?void 0:a.message)==null?void 0:r.toLowerCase())!=null&&n.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(a=>H(a)?{value:a.value}:{issues:t.common.issues})}async parseAsync(e,t){const r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){const r={common:{issues:[],contextualErrorMap:t==null?void 0:t.errorMap,async:!0},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:z(e)},n=this._parse({data:e,path:r.path,parent:r}),a=await(se(n)?n:Promise.resolve(n));return Ce(r,a)}refine(e,t){const r=n=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(n):t;return this._refinement((n,a)=>{const o=e(n),i=()=>a.addIssue({code:c.custom,...r(n)});return typeof Promise<"u"&&o instanceof Promise?o.then(d=>d?!0:(i(),!1)):o?!0:(i(),!1)})}refinement(e,t){return this._refinement((r,n)=>e(r)?!0:(n.addIssue(typeof t=="function"?t(r,n):t),!1))}_refinement(e){return new J({schema:this,typeName:y.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return F.create(this,this._def)}nullable(){return Y.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return I.create(this)}promise(){return oe.create(this,this._def)}or(e){return ne.create([this,e],this._def)}and(e){return ae.create(this,e,this._def)}transform(e){return new J({..._(this._def),schema:this,typeName:y.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new me({..._(this._def),innerType:this,defaultValue:t,typeName:y.ZodDefault})}brand(){return new kt({typeName:y.ZodBranded,type:this,..._(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new ye({..._(this._def),innerType:this,catchValue:t,typeName:y.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return ge.create(this,e)}readonly(){return ve.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const Ke=/^c[^\s-]{8,}$/i,et=/^[0-9a-z]+$/,tt=/^[0-9A-HJKMNP-TV-Z]{26}$/i,st=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,rt=/^[a-z0-9_-]{21}$/i,nt=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,at=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,it=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ot="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let he;const ct=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,dt=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,ut=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,lt=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,ft=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,ht=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Te="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",pt=new RegExp(`^${Te}$`);function Oe(s){let e="[0-5]\\d";s.precision?e=`${e}\\.\\d{${s.precision}}`:s.precision==null&&(e=`${e}(\\.\\d+)?`);const t=s.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function mt(s){return new RegExp(`^${Oe(s)}$`)}function yt(s){let e=`${Te}T${Oe(s)}`;const t=[];return t.push(s.local?"Z?":"Z"),s.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function gt(s,e){return!!((e==="v4"||!e)&&ct.test(s)||(e==="v6"||!e)&&ut.test(s))}function vt(s,e){if(!nt.test(s))return!1;try{const[t]=s.split(".");if(!t)return!1;const r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),n=JSON.parse(atob(r));return!(typeof n!="object"||n===null||"typ"in n&&(n==null?void 0:n.typ)!=="JWT"||!n.alg||e&&n.alg!==e)}catch{return!1}}function _t(s,e){return!!((e==="v4"||!e)&&dt.test(s)||(e==="v6"||!e)&<.test(s))}class P extends b{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==f.string){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_type,expected:f.string,received:a.parsedType}),g}const r=new S;let n;for(const a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(n=this._getOrReturnCtx(e,n),u(n,{code:c.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="max")e.data.length>a.value&&(n=this._getOrReturnCtx(e,n),u(n,{code:c.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="length"){const o=e.data.length>a.value,i=e.data.length<a.value;(o||i)&&(n=this._getOrReturnCtx(e,n),o?u(n,{code:c.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):i&&u(n,{code:c.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),r.dirty())}else if(a.kind==="email")it.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"email",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="emoji")he||(he=new RegExp(ot,"u")),he.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"emoji",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="uuid")st.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"uuid",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="nanoid")rt.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"nanoid",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid")Ke.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"cuid",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid2")et.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"cuid2",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="ulid")tt.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"ulid",code:c.invalid_string,message:a.message}),r.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),u(n,{validation:"url",code:c.invalid_string,message:a.message}),r.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"regex",code:c.invalid_string,message:a.message}),r.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),r.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:{startsWith:a.value},message:a.message}),r.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:{endsWith:a.value},message:a.message}),r.dirty()):a.kind==="datetime"?yt(a).test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:"datetime",message:a.message}),r.dirty()):a.kind==="date"?pt.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?mt(a).test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:"time",message:a.message}),r.dirty()):a.kind==="duration"?at.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"duration",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?gt(e.data,a.version)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"ip",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="jwt"?vt(e.data,a.alg)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"jwt",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="cidr"?_t(e.data,a.version)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"cidr",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="base64"?ft.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"base64",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="base64url"?ht.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"base64url",code:c.invalid_string,message:a.message}),r.dirty()):v.assertNever(a);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(n=>e.test(n),{validation:t,code:c.invalid_string,...h.errToObj(r)})}_addCheck(e){return new P({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...h.errToObj(e)})}url(e){return this._addCheck({kind:"url",...h.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...h.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...h.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...h.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...h.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...h.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...h.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...h.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...h.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...h.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...h.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...h.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(e==null?void 0:e.offset)??!1,local:(e==null?void 0:e.local)??!1,...h.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...h.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...h.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...h.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t==null?void 0:t.position,...h.errToObj(t==null?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...h.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...h.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...h.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...h.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...h.errToObj(t)})}nonempty(e){return this.min(1,h.errToObj(e))}trim(){return new P({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new P({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new P({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}P.create=s=>new P({checks:[],typeName:y.ZodString,coerce:(s==null?void 0:s.coerce)??!1,..._(s)});function bt(s,e){const t=(s.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,n=t>r?t:r,a=Number.parseInt(s.toFixed(n).replace(".","")),o=Number.parseInt(e.toFixed(n).replace(".",""));return a%o/10**n}class W extends b{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==f.number){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_type,expected:f.number,received:a.parsedType}),g}let r;const n=new S;for(const a of this._def.checks)a.kind==="int"?v.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),u(r,{code:c.invalid_type,expected:"integer",received:"float",message:a.message}),n.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),n.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),n.dirty()):a.kind==="multipleOf"?bt(e.data,a.value)!==0&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),u(r,{code:c.not_finite,message:a.message}),n.dirty()):v.assertNever(a);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,h.toString(t))}gt(e,t){return this.setLimit("min",e,!1,h.toString(t))}lte(e,t){return this.setLimit("max",e,!0,h.toString(t))}lt(e,t){return this.setLimit("max",e,!1,h.toString(t))}setLimit(e,t,r,n){return new W({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:h.toString(n)}]})}_addCheck(e){return new W({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:h.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:h.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:h.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:h.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:h.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:h.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:h.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:h.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:h.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&v.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}}W.create=s=>new W({checks:[],typeName:y.ZodNumber,coerce:(s==null?void 0:s.coerce)||!1,..._(s)});class ee extends b{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==f.bigint)return this._getInvalidInput(e);let r;const n=new S;for(const a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),n.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),n.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),u(r,{code:c.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):v.assertNever(a);return{status:n.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return u(t,{code:c.invalid_type,expected:f.bigint,received:t.parsedType}),g}gte(e,t){return this.setLimit("min",e,!0,h.toString(t))}gt(e,t){return this.setLimit("min",e,!1,h.toString(t))}lte(e,t){return this.setLimit("max",e,!0,h.toString(t))}lt(e,t){return this.setLimit("max",e,!1,h.toString(t))}setLimit(e,t,r,n){return new ee({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:h.toString(n)}]})}_addCheck(e){return new ee({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:h.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:h.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:h.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:h.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:h.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}ee.create=s=>new ee({checks:[],typeName:y.ZodBigInt,coerce:(s==null?void 0:s.coerce)??!1,..._(s)});class Se extends b{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==f.boolean){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.boolean,received:r.parsedType}),g}return E(e.data)}}Se.create=s=>new Se({typeName:y.ZodBoolean,coerce:(s==null?void 0:s.coerce)||!1,..._(s)});class re extends b{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==f.date){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_type,expected:f.date,received:a.parsedType}),g}if(Number.isNaN(e.data.getTime())){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_date}),g}const r=new S;let n;for(const a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(n=this._getOrReturnCtx(e,n),u(n,{code:c.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),r.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(n=this._getOrReturnCtx(e,n),u(n,{code:c.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),r.dirty()):v.assertNever(a);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new re({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:h.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:h.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}}re.create=s=>new re({checks:[],coerce:(s==null?void 0:s.coerce)||!1,typeName:y.ZodDate,..._(s)});class Ae extends b{_parse(e){if(this._getType(e)!==f.symbol){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.symbol,received:r.parsedType}),g}return E(e.data)}}Ae.create=s=>new Ae({typeName:y.ZodSymbol,..._(s)});class Ee extends b{_parse(e){if(this._getType(e)!==f.undefined){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.undefined,received:r.parsedType}),g}return E(e.data)}}Ee.create=s=>new Ee({typeName:y.ZodUndefined,..._(s)});class Ne extends b{_parse(e){if(this._getType(e)!==f.null){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.null,received:r.parsedType}),g}return E(e.data)}}Ne.create=s=>new Ne({typeName:y.ZodNull,..._(s)});class Re extends b{constructor(){super(...arguments),this._any=!0}_parse(e){return E(e.data)}}Re.create=s=>new Re({typeName:y.ZodAny,..._(s)});class Ze extends b{constructor(){super(...arguments),this._unknown=!0}_parse(e){return E(e.data)}}Ze.create=s=>new Ze({typeName:y.ZodUnknown,..._(s)});class U extends b{_parse(e){const t=this._getOrReturnCtx(e);return u(t,{code:c.invalid_type,expected:f.never,received:t.parsedType}),g}}U.create=s=>new U({typeName:y.ZodNever,..._(s)});class je extends b{_parse(e){if(this._getType(e)!==f.undefined){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.void,received:r.parsedType}),g}return E(e.data)}}je.create=s=>new je({typeName:y.ZodVoid,..._(s)});class I extends b{_parse(e){const{ctx:t,status:r}=this._processInputParams(e),n=this._def;if(t.parsedType!==f.array)return u(t,{code:c.invalid_type,expected:f.array,received:t.parsedType}),g;if(n.exactLength!==null){const o=t.data.length>n.exactLength.value,i=t.data.length<n.exactLength.value;(o||i)&&(u(t,{code:o?c.too_big:c.too_small,minimum:i?n.exactLength.value:void 0,maximum:o?n.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:n.exactLength.message}),r.dirty())}if(n.minLength!==null&&t.data.length<n.minLength.value&&(u(t,{code:c.too_small,minimum:n.minLength.value,type:"array",inclusive:!0,exact:!1,message:n.minLength.message}),r.dirty()),n.maxLength!==null&&t.data.length>n.maxLength.value&&(u(t,{code:c.too_big,maximum:n.maxLength.value,type:"array",inclusive:!0,exact:!1,message:n.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((o,i)=>n.type._parseAsync(new $(t,o,t.path,i)))).then(o=>S.mergeArray(r,o));const a=[...t.data].map((o,i)=>n.type._parseSync(new $(t,o,t.path,i)));return S.mergeArray(r,a)}get element(){return this._def.type}min(e,t){return new I({...this._def,minLength:{value:e,message:h.toString(t)}})}max(e,t){return new I({...this._def,maxLength:{value:e,message:h.toString(t)}})}length(e,t){return new I({...this._def,exactLength:{value:e,message:h.toString(t)}})}nonempty(e){return this.min(1,e)}}I.create=(s,e)=>new I({type:s,minLength:null,maxLength:null,exactLength:null,typeName:y.ZodArray,..._(e)});function X(s){if(s instanceof k){const e={};for(const t in s.shape){const r=s.shape[t];e[t]=F.create(X(r))}return new k({...s._def,shape:()=>e})}else return s instanceof I?new I({...s._def,type:X(s.element)}):s instanceof F?F.create(X(s.unwrap())):s instanceof Y?Y.create(X(s.unwrap())):s instanceof B?B.create(s.items.map(e=>X(e))):s}class k extends b{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),t=v.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==f.object){const l=this._getOrReturnCtx(e);return u(l,{code:c.invalid_type,expected:f.object,received:l.parsedType}),g}const{status:r,ctx:n}=this._processInputParams(e),{shape:a,keys:o}=this._getCached(),i=[];if(!(this._def.catchall instanceof U&&this._def.unknownKeys==="strip"))for(const l in n.data)o.includes(l)||i.push(l);const d=[];for(const l of o){const m=a[l],w=n.data[l];d.push({key:{status:"valid",value:l},value:m._parse(new $(n,w,n.path,l)),alwaysSet:l in n.data})}if(this._def.catchall instanceof U){const l=this._def.unknownKeys;if(l==="passthrough")for(const m of i)d.push({key:{status:"valid",value:m},value:{status:"valid",value:n.data[m]}});else if(l==="strict")i.length>0&&(u(n,{code:c.unrecognized_keys,keys:i}),r.dirty());else if(l!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const l=this._def.catchall;for(const m of i){const w=n.data[m];d.push({key:{status:"valid",value:m},value:l._parse(new $(n,w,n.path,m)),alwaysSet:m in n.data})}}return n.common.async?Promise.resolve().then(async()=>{const l=[];for(const m of d){const w=await m.key,x=await m.value;l.push({key:w,value:x,alwaysSet:m.alwaysSet})}return l}).then(l=>S.mergeObjectSync(r,l)):S.mergeObjectSync(r,d)}get shape(){return this._def.shape()}strict(e){return h.errToObj,new k({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{var a,o;const n=((o=(a=this._def).errorMap)==null?void 0:o.call(a,t,r).message)??r.defaultError;return t.code==="unrecognized_keys"?{message:h.errToObj(e).message??n}:{message:n}}}:{}})}strip(){return new k({...this._def,unknownKeys:"strip"})}passthrough(){return new k({...this._def,unknownKeys:"passthrough"})}extend(e){return new k({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new k({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:y.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new k({...this._def,catchall:e})}pick(e){const t={};for(const r of v.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new k({...this._def,shape:()=>t})}omit(e){const t={};for(const r of v.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new k({...this._def,shape:()=>t})}deepPartial(){return X(this)}partial(e){const t={};for(const r of v.objectKeys(this.shape)){const n=this.shape[r];e&&!e[r]?t[r]=n:t[r]=n.optional()}return new k({...this._def,shape:()=>t})}required(e){const t={};for(const r of v.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let a=this.shape[r];for(;a instanceof F;)a=a._def.innerType;t[r]=a}return new k({...this._def,shape:()=>t})}keyof(){return Le(v.objectKeys(this.shape))}}k.create=(s,e)=>new k({shape:()=>s,unknownKeys:"strip",catchall:U.create(),typeName:y.ZodObject,..._(e)}),k.strictCreate=(s,e)=>new k({shape:()=>s,unknownKeys:"strict",catchall:U.create(),typeName:y.ZodObject,..._(e)}),k.lazycreate=(s,e)=>new k({shape:s,unknownKeys:"strip",catchall:U.create(),typeName:y.ZodObject,..._(e)});class ne extends b{_parse(e){const{ctx:t}=this._processInputParams(e),r=this._def.options;function n(a){for(const i of a)if(i.result.status==="valid")return i.result;for(const i of a)if(i.result.status==="dirty")return t.common.issues.push(...i.ctx.common.issues),i.result;const o=a.map(i=>new L(i.ctx.common.issues));return u(t,{code:c.invalid_union,unionErrors:o}),g}if(t.common.async)return Promise.all(r.map(async a=>{const o={...t,common:{...t.common,issues:[]},parent:null};return{result:await a._parseAsync({data:t.data,path:t.path,parent:o}),ctx:o}})).then(n);{let a;const o=[];for(const d of r){const l={...t,common:{...t.common,issues:[]},parent:null},m=d._parseSync({data:t.data,path:t.path,parent:l});if(m.status==="valid")return m;m.status==="dirty"&&!a&&(a={result:m,ctx:l}),l.common.issues.length&&o.push(l.common.issues)}if(a)return t.common.issues.push(...a.ctx.common.issues),a.result;const i=o.map(d=>new L(d));return u(t,{code:c.invalid_union,unionErrors:i}),g}}get options(){return this._def.options}}ne.create=(s,e)=>new ne({options:s,typeName:y.ZodUnion,..._(e)});function pe(s,e){const t=z(s),r=z(e);if(s===e)return{valid:!0,data:s};if(t===f.object&&r===f.object){const n=v.objectKeys(e),a=v.objectKeys(s).filter(i=>n.indexOf(i)!==-1),o={...s,...e};for(const i of a){const d=pe(s[i],e[i]);if(!d.valid)return{valid:!1};o[i]=d.data}return{valid:!0,data:o}}else if(t===f.array&&r===f.array){if(s.length!==e.length)return{valid:!1};const n=[];for(let a=0;a<s.length;a++){const o=s[a],i=e[a],d=pe(o,i);if(!d.valid)return{valid:!1};n.push(d.data)}return{valid:!0,data:n}}else return t===f.date&&r===f.date&&+s==+e?{valid:!0,data:s}:{valid:!1}}class ae extends b{_parse(e){const{status:t,ctx:r}=this._processInputParams(e),n=(a,o)=>{if(xe(a)||xe(o))return g;const i=pe(a.value,o.value);return i.valid?((we(a)||we(o))&&t.dirty(),{status:t.value,value:i.data}):(u(r,{code:c.invalid_intersection_types}),g)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([a,o])=>n(a,o)):n(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}ae.create=(s,e,t)=>new ae({left:s,right:e,typeName:y.ZodIntersection,..._(t)});class B extends b{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.array)return u(r,{code:c.invalid_type,expected:f.array,received:r.parsedType}),g;if(r.data.length<this._def.items.length)return u(r,{code:c.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),g;!this._def.rest&&r.data.length>this._def.items.length&&(u(r,{code:c.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const a=[...r.data].map((o,i)=>{const d=this._def.items[i]||this._def.rest;return d?d._parse(new $(r,o,r.path,i)):null}).filter(o=>!!o);return r.common.async?Promise.all(a).then(o=>S.mergeArray(t,o)):S.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new B({...this._def,rest:e})}}B.create=(s,e)=>{if(!Array.isArray(s))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new B({items:s,typeName:y.ZodTuple,rest:null,..._(e)})};class ie extends b{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.object)return u(r,{code:c.invalid_type,expected:f.object,received:r.parsedType}),g;const n=[],a=this._def.keyType,o=this._def.valueType;for(const i in r.data)n.push({key:a._parse(new $(r,i,r.path,i)),value:o._parse(new $(r,r.data[i],r.path,i)),alwaysSet:i in r.data});return r.common.async?S.mergeObjectAsync(t,n):S.mergeObjectSync(t,n)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof b?new ie({keyType:e,valueType:t,typeName:y.ZodRecord,..._(r)}):new ie({keyType:P.create(),valueType:e,typeName:y.ZodRecord,..._(t)})}}class $e extends b{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.map)return u(r,{code:c.invalid_type,expected:f.map,received:r.parsedType}),g;const n=this._def.keyType,a=this._def.valueType,o=[...r.data.entries()].map(([i,d],l)=>({key:n._parse(new $(r,i,r.path,[l,"key"])),value:a._parse(new $(r,d,r.path,[l,"value"]))}));if(r.common.async){const i=new Map;return Promise.resolve().then(async()=>{for(const d of o){const l=await d.key,m=await d.value;if(l.status==="aborted"||m.status==="aborted")return g;(l.status==="dirty"||m.status==="dirty")&&t.dirty(),i.set(l.value,m.value)}return{status:t.value,value:i}})}else{const i=new Map;for(const d of o){const l=d.key,m=d.value;if(l.status==="aborted"||m.status==="aborted")return g;(l.status==="dirty"||m.status==="dirty")&&t.dirty(),i.set(l.value,m.value)}return{status:t.value,value:i}}}}$e.create=(s,e,t)=>new $e({valueType:e,keyType:s,typeName:y.ZodMap,..._(t)});class te extends b{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==f.set)return u(r,{code:c.invalid_type,expected:f.set,received:r.parsedType}),g;const n=this._def;n.minSize!==null&&r.data.size<n.minSize.value&&(u(r,{code:c.too_small,minimum:n.minSize.value,type:"set",inclusive:!0,exact:!1,message:n.minSize.message}),t.dirty()),n.maxSize!==null&&r.data.size>n.maxSize.value&&(u(r,{code:c.too_big,maximum:n.maxSize.value,type:"set",inclusive:!0,exact:!1,message:n.maxSize.message}),t.dirty());const a=this._def.valueType;function o(d){const l=new Set;for(const m of d){if(m.status==="aborted")return g;m.status==="dirty"&&t.dirty(),l.add(m.value)}return{status:t.value,value:l}}const i=[...r.data.values()].map((d,l)=>a._parse(new $(r,d,r.path,l)));return r.common.async?Promise.all(i).then(d=>o(d)):o(i)}min(e,t){return new te({...this._def,minSize:{value:e,message:h.toString(t)}})}max(e,t){return new te({...this._def,maxSize:{value:e,message:h.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}te.create=(s,e)=>new te({valueType:s,minSize:null,maxSize:null,typeName:y.ZodSet,..._(e)});class Ie extends b{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}Ie.create=(s,e)=>new Ie({getter:s,typeName:y.ZodLazy,..._(e)});class Me extends b{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return u(t,{received:t.data,code:c.invalid_literal,expected:this._def.value}),g}return{status:"valid",value:e.data}}get value(){return this._def.value}}Me.create=(s,e)=>new Me({value:s,typeName:y.ZodLiteral,..._(e)});function Le(s,e){return new G({values:s,typeName:y.ZodEnum,..._(e)})}class G extends b{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),r=this._def.values;return u(t,{expected:v.joinValues(r),received:t.parsedType,code:c.invalid_type}),g}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),r=this._def.values;return u(t,{received:t.data,code:c.invalid_enum_value,options:r}),g}return E(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return G.create(e,{...this._def,...t})}exclude(e,t=this._def){return G.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}}G.create=Le;class Pe extends b{_parse(e){const t=v.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==f.string&&r.parsedType!==f.number){const n=v.objectValues(t);return u(r,{expected:v.joinValues(n),received:r.parsedType,code:c.invalid_type}),g}if(this._cache||(this._cache=new Set(v.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const n=v.objectValues(t);return u(r,{received:r.data,code:c.invalid_enum_value,options:n}),g}return E(e.data)}get enum(){return this._def.values}}Pe.create=(s,e)=>new Pe({values:s,typeName:y.ZodNativeEnum,..._(e)});class oe extends b{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==f.promise&&t.common.async===!1)return u(t,{code:c.invalid_type,expected:f.promise,received:t.parsedType}),g;const r=t.parsedType===f.promise?t.data:Promise.resolve(t.data);return E(r.then(n=>this._def.type.parseAsync(n,{path:t.path,errorMap:t.common.contextualErrorMap})))}}oe.create=(s,e)=>new oe({type:s,typeName:y.ZodPromise,..._(e)});class J extends b{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===y.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:r}=this._processInputParams(e),n=this._def.effect||null,a={addIssue:o=>{u(r,o),o.fatal?t.abort():t.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),n.type==="preprocess"){const o=n.transform(r.data,a);if(r.common.async)return Promise.resolve(o).then(async i=>{if(t.value==="aborted")return g;const d=await this._def.schema._parseAsync({data:i,path:r.path,parent:r});return d.status==="aborted"?g:d.status==="dirty"||t.value==="dirty"?K(d.value):d});{if(t.value==="aborted")return g;const i=this._def.schema._parseSync({data:o,path:r.path,parent:r});return i.status==="aborted"?g:i.status==="dirty"||t.value==="dirty"?K(i.value):i}}if(n.type==="refinement"){const o=i=>{const d=n.refinement(i,a);if(r.common.async)return Promise.resolve(d);if(d instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return i};if(r.common.async===!1){const i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return i.status==="aborted"?g:(i.status==="dirty"&&t.dirty(),o(i.value),{status:t.value,value:i.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>i.status==="aborted"?g:(i.status==="dirty"&&t.dirty(),o(i.value).then(()=>({status:t.value,value:i.value}))))}if(n.type==="transform")if(r.common.async===!1){const o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!H(o))return g;const i=n.transform(o.value,a);if(i instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:i}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>H(o)?Promise.resolve(n.transform(o.value,a)).then(i=>({status:t.value,value:i})):g);v.assertNever(n)}}J.create=(s,e,t)=>new J({schema:s,typeName:y.ZodEffects,effect:e,..._(t)}),J.createWithPreprocess=(s,e,t)=>new J({schema:e,effect:{type:"preprocess",transform:s},typeName:y.ZodEffects,..._(t)});class F extends b{_parse(e){return this._getType(e)===f.undefined?E(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}F.create=(s,e)=>new F({innerType:s,typeName:y.ZodOptional,..._(e)});class Y extends b{_parse(e){return this._getType(e)===f.null?E(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}Y.create=(s,e)=>new Y({innerType:s,typeName:y.ZodNullable,..._(e)});class me extends b{_parse(e){const{ctx:t}=this._processInputParams(e);let r=t.data;return t.parsedType===f.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}me.create=(s,e)=>new me({innerType:s,typeName:y.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,..._(e)});class ye extends b{_parse(e){const{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},n=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return se(n)?n.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new L(r.common.issues)},input:r.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new L(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}ye.create=(s,e)=>new ye({innerType:s,typeName:y.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,..._(e)});class De extends b{_parse(e){if(this._getType(e)!==f.nan){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:f.nan,received:r.parsedType}),g}return{status:"valid",value:e.data}}}De.create=s=>new De({typeName:y.ZodNaN,..._(s)});class kt extends b{_parse(e){const{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}}class ge extends b{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const a=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?g:a.status==="dirty"?(t.dirty(),K(a.value)):this._def.out._parseAsync({data:a.value,path:r.path,parent:r})})();{const n=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return n.status==="aborted"?g:n.status==="dirty"?(t.dirty(),{status:"dirty",value:n.value}):this._def.out._parseSync({data:n.value,path:r.path,parent:r})}}static create(e,t){return new ge({in:e,out:t,typeName:y.ZodPipeline})}}class ve extends b{_parse(e){const t=this._def.innerType._parse(e),r=n=>(H(n)&&(n.value=Object.freeze(n.value)),n);return se(t)?t.then(n=>r(n)):r(t)}unwrap(){return this._def.innerType}}ve.create=(s,e)=>new ve({innerType:s,typeName:y.ZodReadonly,..._(e)});var y;(function(s){s.ZodString="ZodString",s.ZodNumber="ZodNumber",s.ZodNaN="ZodNaN",s.ZodBigInt="ZodBigInt",s.ZodBoolean="ZodBoolean",s.ZodDate="ZodDate",s.ZodSymbol="ZodSymbol",s.ZodUndefined="ZodUndefined",s.ZodNull="ZodNull",s.ZodAny="ZodAny",s.ZodUnknown="ZodUnknown",s.ZodNever="ZodNever",s.ZodVoid="ZodVoid",s.ZodArray="ZodArray",s.ZodObject="ZodObject",s.ZodUnion="ZodUnion",s.ZodDiscriminatedUnion="ZodDiscriminatedUnion",s.ZodIntersection="ZodIntersection",s.ZodTuple="ZodTuple",s.ZodRecord="ZodRecord",s.ZodMap="ZodMap",s.ZodSet="ZodSet",s.ZodFunction="ZodFunction",s.ZodLazy="ZodLazy",s.ZodLiteral="ZodLiteral",s.ZodEnum="ZodEnum",s.ZodEffects="ZodEffects",s.ZodNativeEnum="ZodNativeEnum",s.ZodOptional="ZodOptional",s.ZodNullable="ZodNullable",s.ZodDefault="ZodDefault",s.ZodCatch="ZodCatch",s.ZodPromise="ZodPromise",s.ZodBranded="ZodBranded",s.ZodPipeline="ZodPipeline",s.ZodReadonly="ZodReadonly"})(y||(y={}));const A=P.create,ce=W.create;U.create;const Z=I.create,D=k.create;ne.create,ae.create,B.create;const xt=ie.create,Ve=G.create;oe.create,F.create,Y.create;class ze extends Error{constructor(t){const r=`Invalid ChaosConfig:
|
|
1
|
+
(function(E,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(E=typeof globalThis<"u"?globalThis:E||self,b(E.ChaosMaker={}))})(this,(function(E){"use strict";var Ss=Object.defineProperty;var Ts=(E,b,re)=>b in E?Ss(E,b,{enumerable:!0,configurable:!0,writable:!0,value:re}):E[b]=re;var Z=(E,b,re)=>Ts(E,typeof b!="symbol"?b+"":b,re);var b;(function(s){s.assertEqual=n=>{};function e(n){}s.assertIs=e;function t(n){throw new Error}s.assertNever=t,s.arrayToEnum=n=>{const a={};for(const i of n)a[i]=i;return a},s.getValidEnumValues=n=>{const a=s.objectKeys(n).filter(o=>typeof n[n[o]]!="number"),i={};for(const o of a)i[o]=n[o];return s.objectValues(i)},s.objectValues=n=>s.objectKeys(n).map(function(a){return n[a]}),s.objectKeys=typeof Object.keys=="function"?n=>Object.keys(n):n=>{const a=[];for(const i in n)Object.prototype.hasOwnProperty.call(n,i)&&a.push(i);return a},s.find=(n,a)=>{for(const i of n)if(a(i))return i},s.isInteger=typeof Number.isInteger=="function"?n=>Number.isInteger(n):n=>typeof n=="number"&&Number.isFinite(n)&&Math.floor(n)===n;function r(n,a=" | "){return n.map(i=>typeof i=="string"?`'${i}'`:i).join(a)}s.joinValues=r,s.jsonStringifyReplacer=(n,a)=>typeof a=="bigint"?a.toString():a})(b||(b={}));var re;(function(s){s.mergeShapes=(e,t)=>({...e,...t})})(re||(re={}));const h=b.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),ee=s=>{switch(typeof s){case"undefined":return h.undefined;case"string":return h.string;case"number":return Number.isNaN(s)?h.nan:h.number;case"boolean":return h.boolean;case"function":return h.function;case"bigint":return h.bigint;case"symbol":return h.symbol;case"object":return Array.isArray(s)?h.array:s===null?h.null:s.then&&typeof s.then=="function"&&s.catch&&typeof s.catch=="function"?h.promise:typeof Map<"u"&&s instanceof Map?h.map:typeof Set<"u"&&s instanceof Set?h.set:typeof Date<"u"&&s instanceof Date?h.date:h.object;default:return h.unknown}},u=b.arrayToEnum(["invalid_type","invalid_literal","custom","invalid_union","invalid_union_discriminator","invalid_enum_value","unrecognized_keys","invalid_arguments","invalid_return_type","invalid_date","invalid_string","too_small","too_big","invalid_intersection_types","not_multiple_of","not_finite"]);class J extends Error{get errors(){return this.issues}constructor(e){super(),this.issues=[],this.addIssue=r=>{this.issues=[...this.issues,r]},this.addIssues=(r=[])=>{this.issues=[...this.issues,...r]};const t=new.target.prototype;Object.setPrototypeOf?Object.setPrototypeOf(this,t):this.__proto__=t,this.name="ZodError",this.issues=e}format(e){const t=e||function(a){return a.message},r={_errors:[]},n=a=>{for(const i of a.issues)if(i.code==="invalid_union")i.unionErrors.map(n);else if(i.code==="invalid_return_type")n(i.returnTypeError);else if(i.code==="invalid_arguments")n(i.argumentsError);else if(i.path.length===0)r._errors.push(t(i));else{let o=r,l=0;for(;l<i.path.length;){const c=i.path[l];l===i.path.length-1?(o[c]=o[c]||{_errors:[]},o[c]._errors.push(t(i))):o[c]=o[c]||{_errors:[]},o=o[c],l++}}};return n(this),r}static assert(e){if(!(e instanceof J))throw new Error(`Not a ZodError: ${e}`)}toString(){return this.message}get message(){return JSON.stringify(this.issues,b.jsonStringifyReplacer,2)}get isEmpty(){return this.issues.length===0}flatten(e=t=>t.message){const t={},r=[];for(const n of this.issues)if(n.path.length>0){const a=n.path[0];t[a]=t[a]||[],t[a].push(e(n))}else r.push(e(n));return{formErrors:r,fieldErrors:t}}get formErrors(){return this.flatten()}}J.create=s=>new J(s);const Oe=(s,e)=>{let t;switch(s.code){case u.invalid_type:s.received===h.undefined?t="Required":t=`Expected ${s.expected}, received ${s.received}`;break;case u.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(s.expected,b.jsonStringifyReplacer)}`;break;case u.unrecognized_keys:t=`Unrecognized key(s) in object: ${b.joinValues(s.keys,", ")}`;break;case u.invalid_union:t="Invalid input";break;case u.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${b.joinValues(s.options)}`;break;case u.invalid_enum_value:t=`Invalid enum value. Expected ${b.joinValues(s.options)}, received '${s.received}'`;break;case u.invalid_arguments:t="Invalid function arguments";break;case u.invalid_return_type:t="Invalid function return type";break;case u.invalid_date:t="Invalid date";break;case u.invalid_string:typeof s.validation=="object"?"includes"in s.validation?(t=`Invalid input: must include "${s.validation.includes}"`,typeof s.validation.position=="number"&&(t=`${t} at one or more positions greater than or equal to ${s.validation.position}`)):"startsWith"in s.validation?t=`Invalid input: must start with "${s.validation.startsWith}"`:"endsWith"in s.validation?t=`Invalid input: must end with "${s.validation.endsWith}"`:b.assertNever(s.validation):s.validation!=="regex"?t=`Invalid ${s.validation}`:t="Invalid";break;case u.too_small:s.type==="array"?t=`Array must contain ${s.exact?"exactly":s.inclusive?"at least":"more than"} ${s.minimum} element(s)`:s.type==="string"?t=`String must contain ${s.exact?"exactly":s.inclusive?"at least":"over"} ${s.minimum} character(s)`:s.type==="number"?t=`Number must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${s.minimum}`:s.type==="bigint"?t=`Number must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${s.minimum}`:s.type==="date"?t=`Date must be ${s.exact?"exactly equal to ":s.inclusive?"greater than or equal to ":"greater than "}${new Date(Number(s.minimum))}`:t="Invalid input";break;case u.too_big:s.type==="array"?t=`Array must contain ${s.exact?"exactly":s.inclusive?"at most":"less than"} ${s.maximum} element(s)`:s.type==="string"?t=`String must contain ${s.exact?"exactly":s.inclusive?"at most":"under"} ${s.maximum} character(s)`:s.type==="number"?t=`Number must be ${s.exact?"exactly":s.inclusive?"less than or equal to":"less than"} ${s.maximum}`:s.type==="bigint"?t=`BigInt must be ${s.exact?"exactly":s.inclusive?"less than or equal to":"less than"} ${s.maximum}`:s.type==="date"?t=`Date must be ${s.exact?"exactly":s.inclusive?"smaller than or equal to":"smaller than"} ${new Date(Number(s.maximum))}`:t="Invalid input";break;case u.custom:t="Invalid input";break;case u.invalid_intersection_types:t="Intersection results could not be merged";break;case u.not_multiple_of:t=`Number must be a multiple of ${s.multipleOf}`;break;case u.not_finite:t="Number must be finite";break;default:t=e.defaultError,b.assertNever(s)}return{message:t}};let _t=Oe;function bt(){return _t}const kt=s=>{const{data:e,path:t,errorMaps:r,issueData:n}=s,a=[...t,...n.path||[]],i={...n,path:a};if(n.message!==void 0)return{...n,path:a,message:n.message};let o="";const l=r.filter(c=>!!c).slice().reverse();for(const c of l)o=c(i,{data:e,defaultError:o}).message;return{...n,path:a,message:o}};function f(s,e){const t=bt(),r=kt({issueData:e,data:s.data,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,t,t===Oe?void 0:Oe].filter(n=>!!n)});s.common.issues.push(r)}class ${constructor(){this.value="valid"}dirty(){this.value==="valid"&&(this.value="dirty")}abort(){this.value!=="aborted"&&(this.value="aborted")}static mergeArray(e,t){const r=[];for(const n of t){if(n.status==="aborted")return _;n.status==="dirty"&&e.dirty(),r.push(n.value)}return{status:e.value,value:r}}static async mergeObjectAsync(e,t){const r=[];for(const n of t){const a=await n.key,i=await n.value;r.push({key:a,value:i})}return $.mergeObjectSync(e,r)}static mergeObjectSync(e,t){const r={};for(const n of t){const{key:a,value:i}=n;if(a.status==="aborted"||i.status==="aborted")return _;a.status==="dirty"&&e.dirty(),i.status==="dirty"&&e.dirty(),a.value!=="__proto__"&&(typeof i.value<"u"||n.alwaysSet)&&(r[a.value]=i.value)}return{status:e.value,value:r}}}const _=Object.freeze({status:"aborted"}),pe=s=>({status:"dirty",value:s}),z=s=>({status:"valid",value:s}),Le=s=>s.status==="aborted",De=s=>s.status==="dirty",ie=s=>s.status==="valid",ve=s=>typeof Promise<"u"&&s instanceof Promise;var m;(function(s){s.errToObj=e=>typeof e=="string"?{message:e}:e||{},s.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(m||(m={}));class H{constructor(e,t,r,n){this._cachedPath=[],this.parent=e,this.data=t,this._path=r,this._key=n}get path(){return this._cachedPath.length||(Array.isArray(this._key)?this._cachedPath.push(...this._path,...this._key):this._cachedPath.push(...this._path,this._key)),this._cachedPath}}const Ve=(s,e)=>{if(ie(e))return{success:!0,data:e.value};if(!s.common.issues.length)throw new Error("Validation failed but no issues detected.");return{success:!1,get error(){if(this._error)return this._error;const t=new J(s.common.issues);return this._error=t,this._error}}};function w(s){if(!s)return{};const{errorMap:e,invalid_type_error:t,required_error:r,description:n}=s;if(e&&(t||r))throw new Error(`Can't use "invalid_type_error" or "required_error" in conjunction with custom error map.`);return e?{errorMap:e,description:n}:{errorMap:(i,o)=>{const{message:l}=s;return i.code==="invalid_enum_value"?{message:l??o.defaultError}:typeof o.data>"u"?{message:l??r??o.defaultError}:i.code!=="invalid_type"?{message:o.defaultError}:{message:l??t??o.defaultError}},description:n}}class C{get description(){return this._def.description}_getType(e){return ee(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:ee(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new $,ctx:{common:e.parent.common,data:e.data,parsedType:ee(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(ve(t))throw new Error("Synchronous parse encountered promise.");return t}_parseAsync(e){const t=this._parse(e);return Promise.resolve(t)}parse(e,t){const r=this.safeParse(e,t);if(r.success)return r.data;throw r.error}safeParse(e,t){const r={common:{issues:[],async:(t==null?void 0:t.async)??!1,contextualErrorMap:t==null?void 0:t.errorMap},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ee(e)},n=this._parseSync({data:e,path:r.path,parent:r});return Ve(r,n)}"~validate"(e){var r,n;const t={common:{issues:[],async:!!this["~standard"].async},path:[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ee(e)};if(!this["~standard"].async)try{const a=this._parseSync({data:e,path:[],parent:t});return ie(a)?{value:a.value}:{issues:t.common.issues}}catch(a){(n=(r=a==null?void 0:a.message)==null?void 0:r.toLowerCase())!=null&&n.includes("encountered")&&(this["~standard"].async=!0),t.common={issues:[],async:!0}}return this._parseAsync({data:e,path:[],parent:t}).then(a=>ie(a)?{value:a.value}:{issues:t.common.issues})}async parseAsync(e,t){const r=await this.safeParseAsync(e,t);if(r.success)return r.data;throw r.error}async safeParseAsync(e,t){const r={common:{issues:[],contextualErrorMap:t==null?void 0:t.errorMap,async:!0},path:(t==null?void 0:t.path)||[],schemaErrorMap:this._def.errorMap,parent:null,data:e,parsedType:ee(e)},n=this._parse({data:e,path:r.path,parent:r}),a=await(ve(n)?n:Promise.resolve(n));return Ve(r,a)}refine(e,t){const r=n=>typeof t=="string"||typeof t>"u"?{message:t}:typeof t=="function"?t(n):t;return this._refinement((n,a)=>{const i=e(n),o=()=>a.addIssue({code:u.custom,...r(n)});return typeof Promise<"u"&&i instanceof Promise?i.then(l=>l?!0:(o(),!1)):i?!0:(o(),!1)})}refinement(e,t){return this._refinement((r,n)=>e(r)?!0:(n.addIssue(typeof t=="function"?t(r,n):t),!1))}_refinement(e){return new ue({schema:this,typeName:v.ZodEffects,effect:{type:"refinement",refinement:e}})}superRefine(e){return this._refinement(e)}constructor(e){this.spa=this.safeParseAsync,this._def=e,this.parse=this.parse.bind(this),this.safeParse=this.safeParse.bind(this),this.parseAsync=this.parseAsync.bind(this),this.safeParseAsync=this.safeParseAsync.bind(this),this.spa=this.spa.bind(this),this.refine=this.refine.bind(this),this.refinement=this.refinement.bind(this),this.superRefine=this.superRefine.bind(this),this.optional=this.optional.bind(this),this.nullable=this.nullable.bind(this),this.nullish=this.nullish.bind(this),this.array=this.array.bind(this),this.promise=this.promise.bind(this),this.or=this.or.bind(this),this.and=this.and.bind(this),this.transform=this.transform.bind(this),this.brand=this.brand.bind(this),this.default=this.default.bind(this),this.catch=this.catch.bind(this),this.describe=this.describe.bind(this),this.pipe=this.pipe.bind(this),this.readonly=this.readonly.bind(this),this.isNullable=this.isNullable.bind(this),this.isOptional=this.isOptional.bind(this),this["~standard"]={version:1,vendor:"zod",validate:t=>this["~validate"](t)}}optional(){return se.create(this,this._def)}nullable(){return le.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return W.create(this)}promise(){return xe.create(this,this._def)}or(e){return be.create([this,e],this._def)}and(e){return ke.create(this,e,this._def)}transform(e){return new ue({...w(this._def),schema:this,typeName:v.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new Ee({...w(this._def),innerType:this,defaultValue:t,typeName:v.ZodDefault})}brand(){return new Ft({typeName:v.ZodBranded,type:this,...w(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new Re({...w(this._def),innerType:this,catchValue:t,typeName:v.ZodCatch})}describe(e){const t=this.constructor;return new t({...this._def,description:e})}pipe(e){return Me.create(this,e)}readonly(){return je.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const wt=/^c[^\s-]{8,}$/i,xt=/^[0-9a-z]+$/,Ct=/^[0-9A-HJKMNP-TV-Z]{26}$/i,St=/^[0-9a-fA-F]{8}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{4}\b-[0-9a-fA-F]{12}$/i,Tt=/^[a-z0-9_-]{21}$/i,Ot=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,Nt=/^[-+]?P(?!$)(?:(?:[-+]?\d+Y)|(?:[-+]?\d+[.,]\d+Y$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:(?:[-+]?\d+W)|(?:[-+]?\d+[.,]\d+W$))?(?:(?:[-+]?\d+D)|(?:[-+]?\d+[.,]\d+D$))?(?:T(?=[\d+-])(?:(?:[-+]?\d+H)|(?:[-+]?\d+[.,]\d+H$))?(?:(?:[-+]?\d+M)|(?:[-+]?\d+[.,]\d+M$))?(?:[-+]?\d+(?:[.,]\d+)?S)?)??$/,At=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,Et="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let Ne;const Rt=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])$/,Mt=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])\/(3[0-2]|[12]?[0-9])$/,jt=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))$/,Pt=/^(([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,7}:|([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|:((:[0-9a-fA-F]{1,4}){1,7}|:)|fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]))\/(12[0-8]|1[01][0-9]|[1-9]?[0-9])$/,Zt=/^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/,$t=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,ze="((\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-((0[13578]|1[02])-(0[1-9]|[12]\\d|3[01])|(0[469]|11)-(0[1-9]|[12]\\d|30)|(02)-(0[1-9]|1\\d|2[0-8])))",It=new RegExp(`^${ze}$`);function Ue(s){let e="[0-5]\\d";s.precision?e=`${e}\\.\\d{${s.precision}}`:s.precision==null&&(e=`${e}(\\.\\d+)?`);const t=s.precision?"+":"?";return`([01]\\d|2[0-3]):[0-5]\\d(:${e})${t}`}function Lt(s){return new RegExp(`^${Ue(s)}$`)}function Dt(s){let e=`${ze}T${Ue(s)}`;const t=[];return t.push(s.local?"Z?":"Z"),s.offset&&t.push("([+-]\\d{2}:?\\d{2})"),e=`${e}(${t.join("|")})`,new RegExp(`^${e}$`)}function Vt(s,e){return!!((e==="v4"||!e)&&Rt.test(s)||(e==="v6"||!e)&&jt.test(s))}function zt(s,e){if(!Ot.test(s))return!1;try{const[t]=s.split(".");if(!t)return!1;const r=t.replace(/-/g,"+").replace(/_/g,"/").padEnd(t.length+(4-t.length%4)%4,"="),n=JSON.parse(atob(r));return!(typeof n!="object"||n===null||"typ"in n&&(n==null?void 0:n.typ)!=="JWT"||!n.alg||e&&n.alg!==e)}catch{return!1}}function Ut(s,e){return!!((e==="v4"||!e)&&Mt.test(s)||(e==="v6"||!e)&&Pt.test(s))}class Y extends C{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==h.string){const a=this._getOrReturnCtx(e);return f(a,{code:u.invalid_type,expected:h.string,received:a.parsedType}),_}const r=new $;let n;for(const a of this._def.checks)if(a.kind==="min")e.data.length<a.value&&(n=this._getOrReturnCtx(e,n),f(n,{code:u.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="max")e.data.length>a.value&&(n=this._getOrReturnCtx(e,n),f(n,{code:u.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!1,message:a.message}),r.dirty());else if(a.kind==="length"){const i=e.data.length>a.value,o=e.data.length<a.value;(i||o)&&(n=this._getOrReturnCtx(e,n),i?f(n,{code:u.too_big,maximum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}):o&&f(n,{code:u.too_small,minimum:a.value,type:"string",inclusive:!0,exact:!0,message:a.message}),r.dirty())}else if(a.kind==="email")At.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"email",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="emoji")Ne||(Ne=new RegExp(Et,"u")),Ne.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"emoji",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="uuid")St.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"uuid",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="nanoid")Tt.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"nanoid",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid")wt.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"cuid",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="cuid2")xt.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"cuid2",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="ulid")Ct.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"ulid",code:u.invalid_string,message:a.message}),r.dirty());else if(a.kind==="url")try{new URL(e.data)}catch{n=this._getOrReturnCtx(e,n),f(n,{validation:"url",code:u.invalid_string,message:a.message}),r.dirty()}else a.kind==="regex"?(a.regex.lastIndex=0,a.regex.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"regex",code:u.invalid_string,message:a.message}),r.dirty())):a.kind==="trim"?e.data=e.data.trim():a.kind==="includes"?e.data.includes(a.value,a.position)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:{includes:a.value,position:a.position},message:a.message}),r.dirty()):a.kind==="toLowerCase"?e.data=e.data.toLowerCase():a.kind==="toUpperCase"?e.data=e.data.toUpperCase():a.kind==="startsWith"?e.data.startsWith(a.value)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:{startsWith:a.value},message:a.message}),r.dirty()):a.kind==="endsWith"?e.data.endsWith(a.value)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:{endsWith:a.value},message:a.message}),r.dirty()):a.kind==="datetime"?Dt(a).test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:"datetime",message:a.message}),r.dirty()):a.kind==="date"?It.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?Lt(a).test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{code:u.invalid_string,validation:"time",message:a.message}),r.dirty()):a.kind==="duration"?Nt.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"duration",code:u.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?Vt(e.data,a.version)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"ip",code:u.invalid_string,message:a.message}),r.dirty()):a.kind==="jwt"?zt(e.data,a.alg)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"jwt",code:u.invalid_string,message:a.message}),r.dirty()):a.kind==="cidr"?Ut(e.data,a.version)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"cidr",code:u.invalid_string,message:a.message}),r.dirty()):a.kind==="base64"?Zt.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"base64",code:u.invalid_string,message:a.message}),r.dirty()):a.kind==="base64url"?$t.test(e.data)||(n=this._getOrReturnCtx(e,n),f(n,{validation:"base64url",code:u.invalid_string,message:a.message}),r.dirty()):b.assertNever(a);return{status:r.value,value:e.data}}_regex(e,t,r){return this.refinement(n=>e.test(n),{validation:t,code:u.invalid_string,...m.errToObj(r)})}_addCheck(e){return new Y({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...m.errToObj(e)})}url(e){return this._addCheck({kind:"url",...m.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...m.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...m.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...m.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...m.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...m.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...m.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...m.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...m.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...m.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...m.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...m.errToObj(e)})}datetime(e){return typeof e=="string"?this._addCheck({kind:"datetime",precision:null,offset:!1,local:!1,message:e}):this._addCheck({kind:"datetime",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,offset:(e==null?void 0:e.offset)??!1,local:(e==null?void 0:e.local)??!1,...m.errToObj(e==null?void 0:e.message)})}date(e){return this._addCheck({kind:"date",message:e})}time(e){return typeof e=="string"?this._addCheck({kind:"time",precision:null,message:e}):this._addCheck({kind:"time",precision:typeof(e==null?void 0:e.precision)>"u"?null:e==null?void 0:e.precision,...m.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...m.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...m.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t==null?void 0:t.position,...m.errToObj(t==null?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...m.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...m.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...m.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...m.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...m.errToObj(t)})}nonempty(e){return this.min(1,m.errToObj(e))}trim(){return new Y({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new Y({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new Y({...this._def,checks:[...this._def.checks,{kind:"toUpperCase"}]})}get isDatetime(){return!!this._def.checks.find(e=>e.kind==="datetime")}get isDate(){return!!this._def.checks.find(e=>e.kind==="date")}get isTime(){return!!this._def.checks.find(e=>e.kind==="time")}get isDuration(){return!!this._def.checks.find(e=>e.kind==="duration")}get isEmail(){return!!this._def.checks.find(e=>e.kind==="email")}get isURL(){return!!this._def.checks.find(e=>e.kind==="url")}get isEmoji(){return!!this._def.checks.find(e=>e.kind==="emoji")}get isUUID(){return!!this._def.checks.find(e=>e.kind==="uuid")}get isNANOID(){return!!this._def.checks.find(e=>e.kind==="nanoid")}get isCUID(){return!!this._def.checks.find(e=>e.kind==="cuid")}get isCUID2(){return!!this._def.checks.find(e=>e.kind==="cuid2")}get isULID(){return!!this._def.checks.find(e=>e.kind==="ulid")}get isIP(){return!!this._def.checks.find(e=>e.kind==="ip")}get isCIDR(){return!!this._def.checks.find(e=>e.kind==="cidr")}get isBase64(){return!!this._def.checks.find(e=>e.kind==="base64")}get isBase64url(){return!!this._def.checks.find(e=>e.kind==="base64url")}get minLength(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxLength(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}Y.create=s=>new Y({checks:[],typeName:v.ZodString,coerce:(s==null?void 0:s.coerce)??!1,...w(s)});function qt(s,e){const t=(s.toString().split(".")[1]||"").length,r=(e.toString().split(".")[1]||"").length,n=t>r?t:r,a=Number.parseInt(s.toFixed(n).replace(".","")),i=Number.parseInt(e.toFixed(n).replace(".",""));return a%i/10**n}class oe extends C{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte,this.step=this.multipleOf}_parse(e){if(this._def.coerce&&(e.data=Number(e.data)),this._getType(e)!==h.number){const a=this._getOrReturnCtx(e);return f(a,{code:u.invalid_type,expected:h.number,received:a.parsedType}),_}let r;const n=new $;for(const a of this._def.checks)a.kind==="int"?b.isInteger(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.invalid_type,expected:"integer",received:"float",message:a.message}),n.dirty()):a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,minimum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),n.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,maximum:a.value,type:"number",inclusive:a.inclusive,exact:!1,message:a.message}),n.dirty()):a.kind==="multipleOf"?qt(e.data,a.value)!==0&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):a.kind==="finite"?Number.isFinite(e.data)||(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_finite,message:a.message}),n.dirty()):b.assertNever(a);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,m.toString(t))}gt(e,t){return this.setLimit("min",e,!1,m.toString(t))}lte(e,t){return this.setLimit("max",e,!0,m.toString(t))}lt(e,t){return this.setLimit("max",e,!1,m.toString(t))}setLimit(e,t,r,n){return new oe({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:m.toString(n)}]})}_addCheck(e){return new oe({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:m.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:m.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:m.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:m.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:m.toString(e)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}get isInt(){return!!this._def.checks.find(e=>e.kind==="int"||e.kind==="multipleOf"&&b.isInteger(e.value))}get isFinite(){let e=null,t=null;for(const r of this._def.checks){if(r.kind==="finite"||r.kind==="int"||r.kind==="multipleOf")return!0;r.kind==="min"?(t===null||r.value>t)&&(t=r.value):r.kind==="max"&&(e===null||r.value<e)&&(e=r.value)}return Number.isFinite(t)&&Number.isFinite(e)}}oe.create=s=>new oe({checks:[],typeName:v.ZodNumber,coerce:(s==null?void 0:s.coerce)||!1,...w(s)});class me extends C{constructor(){super(...arguments),this.min=this.gte,this.max=this.lte}_parse(e){if(this._def.coerce)try{e.data=BigInt(e.data)}catch{return this._getInvalidInput(e)}if(this._getType(e)!==h.bigint)return this._getInvalidInput(e);let r;const n=new $;for(const a of this._def.checks)a.kind==="min"?(a.inclusive?e.data<a.value:e.data<=a.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_small,type:"bigint",minimum:a.value,inclusive:a.inclusive,message:a.message}),n.dirty()):a.kind==="max"?(a.inclusive?e.data>a.value:e.data>=a.value)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.too_big,type:"bigint",maximum:a.value,inclusive:a.inclusive,message:a.message}),n.dirty()):a.kind==="multipleOf"?e.data%a.value!==BigInt(0)&&(r=this._getOrReturnCtx(e,r),f(r,{code:u.not_multiple_of,multipleOf:a.value,message:a.message}),n.dirty()):b.assertNever(a);return{status:n.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return f(t,{code:u.invalid_type,expected:h.bigint,received:t.parsedType}),_}gte(e,t){return this.setLimit("min",e,!0,m.toString(t))}gt(e,t){return this.setLimit("min",e,!1,m.toString(t))}lte(e,t){return this.setLimit("max",e,!0,m.toString(t))}lt(e,t){return this.setLimit("max",e,!1,m.toString(t))}setLimit(e,t,r,n){return new me({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:m.toString(n)}]})}_addCheck(e){return new me({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:m.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:m.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:m.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:m.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:m.toString(t)})}get minValue(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e}get maxValue(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e}}me.create=s=>new me({checks:[],typeName:v.ZodBigInt,coerce:(s==null?void 0:s.coerce)??!1,...w(s)});class qe extends C{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==h.boolean){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.boolean,received:r.parsedType}),_}return z(e.data)}}qe.create=s=>new qe({typeName:v.ZodBoolean,coerce:(s==null?void 0:s.coerce)||!1,...w(s)});class _e extends C{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==h.date){const a=this._getOrReturnCtx(e);return f(a,{code:u.invalid_type,expected:h.date,received:a.parsedType}),_}if(Number.isNaN(e.data.getTime())){const a=this._getOrReturnCtx(e);return f(a,{code:u.invalid_date}),_}const r=new $;let n;for(const a of this._def.checks)a.kind==="min"?e.data.getTime()<a.value&&(n=this._getOrReturnCtx(e,n),f(n,{code:u.too_small,message:a.message,inclusive:!0,exact:!1,minimum:a.value,type:"date"}),r.dirty()):a.kind==="max"?e.data.getTime()>a.value&&(n=this._getOrReturnCtx(e,n),f(n,{code:u.too_big,message:a.message,inclusive:!0,exact:!1,maximum:a.value,type:"date"}),r.dirty()):b.assertNever(a);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new _e({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:m.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:m.toString(t)})}get minDate(){let e=null;for(const t of this._def.checks)t.kind==="min"&&(e===null||t.value>e)&&(e=t.value);return e!=null?new Date(e):null}get maxDate(){let e=null;for(const t of this._def.checks)t.kind==="max"&&(e===null||t.value<e)&&(e=t.value);return e!=null?new Date(e):null}}_e.create=s=>new _e({checks:[],coerce:(s==null?void 0:s.coerce)||!1,typeName:v.ZodDate,...w(s)});class Fe extends C{_parse(e){if(this._getType(e)!==h.symbol){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.symbol,received:r.parsedType}),_}return z(e.data)}}Fe.create=s=>new Fe({typeName:v.ZodSymbol,...w(s)});class Be extends C{_parse(e){if(this._getType(e)!==h.undefined){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.undefined,received:r.parsedType}),_}return z(e.data)}}Be.create=s=>new Be({typeName:v.ZodUndefined,...w(s)});class He extends C{_parse(e){if(this._getType(e)!==h.null){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.null,received:r.parsedType}),_}return z(e.data)}}He.create=s=>new He({typeName:v.ZodNull,...w(s)});class We extends C{constructor(){super(...arguments),this._any=!0}_parse(e){return z(e.data)}}We.create=s=>new We({typeName:v.ZodAny,...w(s)});class Xe extends C{constructor(){super(...arguments),this._unknown=!0}_parse(e){return z(e.data)}}Xe.create=s=>new Xe({typeName:v.ZodUnknown,...w(s)});class te extends C{_parse(e){const t=this._getOrReturnCtx(e);return f(t,{code:u.invalid_type,expected:h.never,received:t.parsedType}),_}}te.create=s=>new te({typeName:v.ZodNever,...w(s)});class Ge extends C{_parse(e){if(this._getType(e)!==h.undefined){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.void,received:r.parsedType}),_}return z(e.data)}}Ge.create=s=>new Ge({typeName:v.ZodVoid,...w(s)});class W extends C{_parse(e){const{ctx:t,status:r}=this._processInputParams(e),n=this._def;if(t.parsedType!==h.array)return f(t,{code:u.invalid_type,expected:h.array,received:t.parsedType}),_;if(n.exactLength!==null){const i=t.data.length>n.exactLength.value,o=t.data.length<n.exactLength.value;(i||o)&&(f(t,{code:i?u.too_big:u.too_small,minimum:o?n.exactLength.value:void 0,maximum:i?n.exactLength.value:void 0,type:"array",inclusive:!0,exact:!0,message:n.exactLength.message}),r.dirty())}if(n.minLength!==null&&t.data.length<n.minLength.value&&(f(t,{code:u.too_small,minimum:n.minLength.value,type:"array",inclusive:!0,exact:!1,message:n.minLength.message}),r.dirty()),n.maxLength!==null&&t.data.length>n.maxLength.value&&(f(t,{code:u.too_big,maximum:n.maxLength.value,type:"array",inclusive:!0,exact:!1,message:n.maxLength.message}),r.dirty()),t.common.async)return Promise.all([...t.data].map((i,o)=>n.type._parseAsync(new H(t,i,t.path,o)))).then(i=>$.mergeArray(r,i));const a=[...t.data].map((i,o)=>n.type._parseSync(new H(t,i,t.path,o)));return $.mergeArray(r,a)}get element(){return this._def.type}min(e,t){return new W({...this._def,minLength:{value:e,message:m.toString(t)}})}max(e,t){return new W({...this._def,maxLength:{value:e,message:m.toString(t)}})}length(e,t){return new W({...this._def,exactLength:{value:e,message:m.toString(t)}})}nonempty(e){return this.min(1,e)}}W.create=(s,e)=>new W({type:s,minLength:null,maxLength:null,exactLength:null,typeName:v.ZodArray,...w(e)});function ce(s){if(s instanceof N){const e={};for(const t in s.shape){const r=s.shape[t];e[t]=se.create(ce(r))}return new N({...s._def,shape:()=>e})}else return s instanceof W?new W({...s._def,type:ce(s.element)}):s instanceof se?se.create(ce(s.unwrap())):s instanceof le?le.create(ce(s.unwrap())):s instanceof ne?ne.create(s.items.map(e=>ce(e))):s}class N extends C{constructor(){super(...arguments),this._cached=null,this.nonstrict=this.passthrough,this.augment=this.extend}_getCached(){if(this._cached!==null)return this._cached;const e=this._def.shape(),t=b.objectKeys(e);return this._cached={shape:e,keys:t},this._cached}_parse(e){if(this._getType(e)!==h.object){const c=this._getOrReturnCtx(e);return f(c,{code:u.invalid_type,expected:h.object,received:c.parsedType}),_}const{status:r,ctx:n}=this._processInputParams(e),{shape:a,keys:i}=this._getCached(),o=[];if(!(this._def.catchall instanceof te&&this._def.unknownKeys==="strip"))for(const c in n.data)i.includes(c)||o.push(c);const l=[];for(const c of i){const g=a[c],O=n.data[c];l.push({key:{status:"valid",value:c},value:g._parse(new H(n,O,n.path,c)),alwaysSet:c in n.data})}if(this._def.catchall instanceof te){const c=this._def.unknownKeys;if(c==="passthrough")for(const g of o)l.push({key:{status:"valid",value:g},value:{status:"valid",value:n.data[g]}});else if(c==="strict")o.length>0&&(f(n,{code:u.unrecognized_keys,keys:o}),r.dirty());else if(c!=="strip")throw new Error("Internal ZodObject error: invalid unknownKeys value.")}else{const c=this._def.catchall;for(const g of o){const O=n.data[g];l.push({key:{status:"valid",value:g},value:c._parse(new H(n,O,n.path,g)),alwaysSet:g in n.data})}}return n.common.async?Promise.resolve().then(async()=>{const c=[];for(const g of l){const O=await g.key,A=await g.value;c.push({key:O,value:A,alwaysSet:g.alwaysSet})}return c}).then(c=>$.mergeObjectSync(r,c)):$.mergeObjectSync(r,l)}get shape(){return this._def.shape()}strict(e){return m.errToObj,new N({...this._def,unknownKeys:"strict",...e!==void 0?{errorMap:(t,r)=>{var a,i;const n=((i=(a=this._def).errorMap)==null?void 0:i.call(a,t,r).message)??r.defaultError;return t.code==="unrecognized_keys"?{message:m.errToObj(e).message??n}:{message:n}}}:{}})}strip(){return new N({...this._def,unknownKeys:"strip"})}passthrough(){return new N({...this._def,unknownKeys:"passthrough"})}extend(e){return new N({...this._def,shape:()=>({...this._def.shape(),...e})})}merge(e){return new N({unknownKeys:e._def.unknownKeys,catchall:e._def.catchall,shape:()=>({...this._def.shape(),...e._def.shape()}),typeName:v.ZodObject})}setKey(e,t){return this.augment({[e]:t})}catchall(e){return new N({...this._def,catchall:e})}pick(e){const t={};for(const r of b.objectKeys(e))e[r]&&this.shape[r]&&(t[r]=this.shape[r]);return new N({...this._def,shape:()=>t})}omit(e){const t={};for(const r of b.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new N({...this._def,shape:()=>t})}deepPartial(){return ce(this)}partial(e){const t={};for(const r of b.objectKeys(this.shape)){const n=this.shape[r];e&&!e[r]?t[r]=n:t[r]=n.optional()}return new N({...this._def,shape:()=>t})}required(e){const t={};for(const r of b.objectKeys(this.shape))if(e&&!e[r])t[r]=this.shape[r];else{let a=this.shape[r];for(;a instanceof se;)a=a._def.innerType;t[r]=a}return new N({...this._def,shape:()=>t})}keyof(){return Ke(b.objectKeys(this.shape))}}N.create=(s,e)=>new N({shape:()=>s,unknownKeys:"strip",catchall:te.create(),typeName:v.ZodObject,...w(e)}),N.strictCreate=(s,e)=>new N({shape:()=>s,unknownKeys:"strict",catchall:te.create(),typeName:v.ZodObject,...w(e)}),N.lazycreate=(s,e)=>new N({shape:s,unknownKeys:"strip",catchall:te.create(),typeName:v.ZodObject,...w(e)});class be extends C{_parse(e){const{ctx:t}=this._processInputParams(e),r=this._def.options;function n(a){for(const o of a)if(o.result.status==="valid")return o.result;for(const o of a)if(o.result.status==="dirty")return t.common.issues.push(...o.ctx.common.issues),o.result;const i=a.map(o=>new J(o.ctx.common.issues));return f(t,{code:u.invalid_union,unionErrors:i}),_}if(t.common.async)return Promise.all(r.map(async a=>{const i={...t,common:{...t.common,issues:[]},parent:null};return{result:await a._parseAsync({data:t.data,path:t.path,parent:i}),ctx:i}})).then(n);{let a;const i=[];for(const l of r){const c={...t,common:{...t.common,issues:[]},parent:null},g=l._parseSync({data:t.data,path:t.path,parent:c});if(g.status==="valid")return g;g.status==="dirty"&&!a&&(a={result:g,ctx:c}),c.common.issues.length&&i.push(c.common.issues)}if(a)return t.common.issues.push(...a.ctx.common.issues),a.result;const o=i.map(l=>new J(l));return f(t,{code:u.invalid_union,unionErrors:o}),_}}get options(){return this._def.options}}be.create=(s,e)=>new be({options:s,typeName:v.ZodUnion,...w(e)});function Ae(s,e){const t=ee(s),r=ee(e);if(s===e)return{valid:!0,data:s};if(t===h.object&&r===h.object){const n=b.objectKeys(e),a=b.objectKeys(s).filter(o=>n.indexOf(o)!==-1),i={...s,...e};for(const o of a){const l=Ae(s[o],e[o]);if(!l.valid)return{valid:!1};i[o]=l.data}return{valid:!0,data:i}}else if(t===h.array&&r===h.array){if(s.length!==e.length)return{valid:!1};const n=[];for(let a=0;a<s.length;a++){const i=s[a],o=e[a],l=Ae(i,o);if(!l.valid)return{valid:!1};n.push(l.data)}return{valid:!0,data:n}}else return t===h.date&&r===h.date&&+s==+e?{valid:!0,data:s}:{valid:!1}}class ke extends C{_parse(e){const{status:t,ctx:r}=this._processInputParams(e),n=(a,i)=>{if(Le(a)||Le(i))return _;const o=Ae(a.value,i.value);return o.valid?((De(a)||De(i))&&t.dirty(),{status:t.value,value:o.data}):(f(r,{code:u.invalid_intersection_types}),_)};return r.common.async?Promise.all([this._def.left._parseAsync({data:r.data,path:r.path,parent:r}),this._def.right._parseAsync({data:r.data,path:r.path,parent:r})]).then(([a,i])=>n(a,i)):n(this._def.left._parseSync({data:r.data,path:r.path,parent:r}),this._def.right._parseSync({data:r.data,path:r.path,parent:r}))}}ke.create=(s,e,t)=>new ke({left:s,right:e,typeName:v.ZodIntersection,...w(t)});class ne extends C{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.array)return f(r,{code:u.invalid_type,expected:h.array,received:r.parsedType}),_;if(r.data.length<this._def.items.length)return f(r,{code:u.too_small,minimum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),_;!this._def.rest&&r.data.length>this._def.items.length&&(f(r,{code:u.too_big,maximum:this._def.items.length,inclusive:!0,exact:!1,type:"array"}),t.dirty());const a=[...r.data].map((i,o)=>{const l=this._def.items[o]||this._def.rest;return l?l._parse(new H(r,i,r.path,o)):null}).filter(i=>!!i);return r.common.async?Promise.all(a).then(i=>$.mergeArray(t,i)):$.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new ne({...this._def,rest:e})}}ne.create=(s,e)=>{if(!Array.isArray(s))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new ne({items:s,typeName:v.ZodTuple,rest:null,...w(e)})};class we extends C{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.object)return f(r,{code:u.invalid_type,expected:h.object,received:r.parsedType}),_;const n=[],a=this._def.keyType,i=this._def.valueType;for(const o in r.data)n.push({key:a._parse(new H(r,o,r.path,o)),value:i._parse(new H(r,r.data[o],r.path,o)),alwaysSet:o in r.data});return r.common.async?$.mergeObjectAsync(t,n):$.mergeObjectSync(t,n)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof C?new we({keyType:e,valueType:t,typeName:v.ZodRecord,...w(r)}):new we({keyType:Y.create(),valueType:e,typeName:v.ZodRecord,...w(t)})}}class Je extends C{get keySchema(){return this._def.keyType}get valueSchema(){return this._def.valueType}_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.map)return f(r,{code:u.invalid_type,expected:h.map,received:r.parsedType}),_;const n=this._def.keyType,a=this._def.valueType,i=[...r.data.entries()].map(([o,l],c)=>({key:n._parse(new H(r,o,r.path,[c,"key"])),value:a._parse(new H(r,l,r.path,[c,"value"]))}));if(r.common.async){const o=new Map;return Promise.resolve().then(async()=>{for(const l of i){const c=await l.key,g=await l.value;if(c.status==="aborted"||g.status==="aborted")return _;(c.status==="dirty"||g.status==="dirty")&&t.dirty(),o.set(c.value,g.value)}return{status:t.value,value:o}})}else{const o=new Map;for(const l of i){const c=l.key,g=l.value;if(c.status==="aborted"||g.status==="aborted")return _;(c.status==="dirty"||g.status==="dirty")&&t.dirty(),o.set(c.value,g.value)}return{status:t.value,value:o}}}}Je.create=(s,e,t)=>new Je({valueType:e,keyType:s,typeName:v.ZodMap,...w(t)});class ye extends C{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.set)return f(r,{code:u.invalid_type,expected:h.set,received:r.parsedType}),_;const n=this._def;n.minSize!==null&&r.data.size<n.minSize.value&&(f(r,{code:u.too_small,minimum:n.minSize.value,type:"set",inclusive:!0,exact:!1,message:n.minSize.message}),t.dirty()),n.maxSize!==null&&r.data.size>n.maxSize.value&&(f(r,{code:u.too_big,maximum:n.maxSize.value,type:"set",inclusive:!0,exact:!1,message:n.maxSize.message}),t.dirty());const a=this._def.valueType;function i(l){const c=new Set;for(const g of l){if(g.status==="aborted")return _;g.status==="dirty"&&t.dirty(),c.add(g.value)}return{status:t.value,value:c}}const o=[...r.data.values()].map((l,c)=>a._parse(new H(r,l,r.path,c)));return r.common.async?Promise.all(o).then(l=>i(l)):i(o)}min(e,t){return new ye({...this._def,minSize:{value:e,message:m.toString(t)}})}max(e,t){return new ye({...this._def,maxSize:{value:e,message:m.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}ye.create=(s,e)=>new ye({valueType:s,minSize:null,maxSize:null,typeName:v.ZodSet,...w(e)});class Ye extends C{get schema(){return this._def.getter()}_parse(e){const{ctx:t}=this._processInputParams(e);return this._def.getter()._parse({data:t.data,path:t.path,parent:t})}}Ye.create=(s,e)=>new Ye({getter:s,typeName:v.ZodLazy,...w(e)});class Qe extends C{_parse(e){if(e.data!==this._def.value){const t=this._getOrReturnCtx(e);return f(t,{received:t.data,code:u.invalid_literal,expected:this._def.value}),_}return{status:"valid",value:e.data}}get value(){return this._def.value}}Qe.create=(s,e)=>new Qe({value:s,typeName:v.ZodLiteral,...w(e)});function Ke(s,e){return new de({values:s,typeName:v.ZodEnum,...w(e)})}class de extends C{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),r=this._def.values;return f(t,{expected:b.joinValues(r),received:t.parsedType,code:u.invalid_type}),_}if(this._cache||(this._cache=new Set(this._def.values)),!this._cache.has(e.data)){const t=this._getOrReturnCtx(e),r=this._def.values;return f(t,{received:t.data,code:u.invalid_enum_value,options:r}),_}return z(e.data)}get options(){return this._def.values}get enum(){const e={};for(const t of this._def.values)e[t]=t;return e}get Values(){const e={};for(const t of this._def.values)e[t]=t;return e}get Enum(){const e={};for(const t of this._def.values)e[t]=t;return e}extract(e,t=this._def){return de.create(e,{...this._def,...t})}exclude(e,t=this._def){return de.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}}de.create=Ke;class et extends C{_parse(e){const t=b.getValidEnumValues(this._def.values),r=this._getOrReturnCtx(e);if(r.parsedType!==h.string&&r.parsedType!==h.number){const n=b.objectValues(t);return f(r,{expected:b.joinValues(n),received:r.parsedType,code:u.invalid_type}),_}if(this._cache||(this._cache=new Set(b.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const n=b.objectValues(t);return f(r,{received:r.data,code:u.invalid_enum_value,options:n}),_}return z(e.data)}get enum(){return this._def.values}}et.create=(s,e)=>new et({values:s,typeName:v.ZodNativeEnum,...w(e)});class xe extends C{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.promise&&t.common.async===!1)return f(t,{code:u.invalid_type,expected:h.promise,received:t.parsedType}),_;const r=t.parsedType===h.promise?t.data:Promise.resolve(t.data);return z(r.then(n=>this._def.type.parseAsync(n,{path:t.path,errorMap:t.common.contextualErrorMap})))}}xe.create=(s,e)=>new xe({type:s,typeName:v.ZodPromise,...w(e)});class ue extends C{innerType(){return this._def.schema}sourceType(){return this._def.schema._def.typeName===v.ZodEffects?this._def.schema.sourceType():this._def.schema}_parse(e){const{status:t,ctx:r}=this._processInputParams(e),n=this._def.effect||null,a={addIssue:i=>{f(r,i),i.fatal?t.abort():t.dirty()},get path(){return r.path}};if(a.addIssue=a.addIssue.bind(a),n.type==="preprocess"){const i=n.transform(r.data,a);if(r.common.async)return Promise.resolve(i).then(async o=>{if(t.value==="aborted")return _;const l=await this._def.schema._parseAsync({data:o,path:r.path,parent:r});return l.status==="aborted"?_:l.status==="dirty"||t.value==="dirty"?pe(l.value):l});{if(t.value==="aborted")return _;const o=this._def.schema._parseSync({data:i,path:r.path,parent:r});return o.status==="aborted"?_:o.status==="dirty"||t.value==="dirty"?pe(o.value):o}}if(n.type==="refinement"){const i=o=>{const l=n.refinement(o,a);if(r.common.async)return Promise.resolve(l);if(l instanceof Promise)throw new Error("Async refinement encountered during synchronous parse operation. Use .parseAsync instead.");return o};if(r.common.async===!1){const o=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});return o.status==="aborted"?_:(o.status==="dirty"&&t.dirty(),i(o.value),{status:t.value,value:o.value})}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(o=>o.status==="aborted"?_:(o.status==="dirty"&&t.dirty(),i(o.value).then(()=>({status:t.value,value:o.value}))))}if(n.type==="transform")if(r.common.async===!1){const i=this._def.schema._parseSync({data:r.data,path:r.path,parent:r});if(!ie(i))return _;const o=n.transform(i.value,a);if(o instanceof Promise)throw new Error("Asynchronous transform encountered during synchronous parse operation. Use .parseAsync instead.");return{status:t.value,value:o}}else return this._def.schema._parseAsync({data:r.data,path:r.path,parent:r}).then(i=>ie(i)?Promise.resolve(n.transform(i.value,a)).then(o=>({status:t.value,value:o})):_);b.assertNever(n)}}ue.create=(s,e,t)=>new ue({schema:s,typeName:v.ZodEffects,effect:e,...w(t)}),ue.createWithPreprocess=(s,e,t)=>new ue({schema:e,effect:{type:"preprocess",transform:s},typeName:v.ZodEffects,...w(t)});class se extends C{_parse(e){return this._getType(e)===h.undefined?z(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}se.create=(s,e)=>new se({innerType:s,typeName:v.ZodOptional,...w(e)});class le extends C{_parse(e){return this._getType(e)===h.null?z(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}le.create=(s,e)=>new le({innerType:s,typeName:v.ZodNullable,...w(e)});class Ee extends C{_parse(e){const{ctx:t}=this._processInputParams(e);let r=t.data;return t.parsedType===h.undefined&&(r=this._def.defaultValue()),this._def.innerType._parse({data:r,path:t.path,parent:t})}removeDefault(){return this._def.innerType}}Ee.create=(s,e)=>new Ee({innerType:s,typeName:v.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...w(e)});class Re extends C{_parse(e){const{ctx:t}=this._processInputParams(e),r={...t,common:{...t.common,issues:[]}},n=this._def.innerType._parse({data:r.data,path:r.path,parent:{...r}});return ve(n)?n.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new J(r.common.issues)},input:r.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new J(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}Re.create=(s,e)=>new Re({innerType:s,typeName:v.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...w(e)});class tt extends C{_parse(e){if(this._getType(e)!==h.nan){const r=this._getOrReturnCtx(e);return f(r,{code:u.invalid_type,expected:h.nan,received:r.parsedType}),_}return{status:"valid",value:e.data}}}tt.create=s=>new tt({typeName:v.ZodNaN,...w(s)});class Ft extends C{_parse(e){const{ctx:t}=this._processInputParams(e),r=t.data;return this._def.type._parse({data:r,path:t.path,parent:t})}unwrap(){return this._def.type}}class Me extends C{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.common.async)return(async()=>{const a=await this._def.in._parseAsync({data:r.data,path:r.path,parent:r});return a.status==="aborted"?_:a.status==="dirty"?(t.dirty(),pe(a.value)):this._def.out._parseAsync({data:a.value,path:r.path,parent:r})})();{const n=this._def.in._parseSync({data:r.data,path:r.path,parent:r});return n.status==="aborted"?_:n.status==="dirty"?(t.dirty(),{status:"dirty",value:n.value}):this._def.out._parseSync({data:n.value,path:r.path,parent:r})}}static create(e,t){return new Me({in:e,out:t,typeName:v.ZodPipeline})}}class je extends C{_parse(e){const t=this._def.innerType._parse(e),r=n=>(ie(n)&&(n.value=Object.freeze(n.value)),n);return ve(t)?t.then(n=>r(n)):r(t)}unwrap(){return this._def.innerType}}je.create=(s,e)=>new je({innerType:s,typeName:v.ZodReadonly,...w(e)});var v;(function(s){s.ZodString="ZodString",s.ZodNumber="ZodNumber",s.ZodNaN="ZodNaN",s.ZodBigInt="ZodBigInt",s.ZodBoolean="ZodBoolean",s.ZodDate="ZodDate",s.ZodSymbol="ZodSymbol",s.ZodUndefined="ZodUndefined",s.ZodNull="ZodNull",s.ZodAny="ZodAny",s.ZodUnknown="ZodUnknown",s.ZodNever="ZodNever",s.ZodVoid="ZodVoid",s.ZodArray="ZodArray",s.ZodObject="ZodObject",s.ZodUnion="ZodUnion",s.ZodDiscriminatedUnion="ZodDiscriminatedUnion",s.ZodIntersection="ZodIntersection",s.ZodTuple="ZodTuple",s.ZodRecord="ZodRecord",s.ZodMap="ZodMap",s.ZodSet="ZodSet",s.ZodFunction="ZodFunction",s.ZodLazy="ZodLazy",s.ZodLiteral="ZodLiteral",s.ZodEnum="ZodEnum",s.ZodEffects="ZodEffects",s.ZodNativeEnum="ZodNativeEnum",s.ZodOptional="ZodOptional",s.ZodNullable="ZodNullable",s.ZodDefault="ZodDefault",s.ZodCatch="ZodCatch",s.ZodPromise="ZodPromise",s.ZodBranded="ZodBranded",s.ZodPipeline="ZodPipeline",s.ZodReadonly="ZodReadonly"})(v||(v={}));const R=Y.create,X=oe.create;te.create;const I=W.create,L=N.create;be.create,ke.create,ne.create;const Bt=we.create,Ce=de.create;xe.create,se.create,le.create;class st extends Error{constructor(t){const r=`Invalid ChaosConfig:
|
|
2
2
|
${t.map(n=>` - ${n}`).join(`
|
|
3
|
-
`)}`;super(r);R(this,"issues");this.name="ChaosConfigError",this.issues=t}}const Q=ce().min(0,"Probability must be >= 0").max(1,"Probability must be <= 1"),wt=D({urlPattern:A().min(1,"urlPattern must not be empty"),methods:Z(A()).optional(),statusCode:ce().int().min(100).max(599),probability:Q,body:A().optional(),statusText:A().optional(),headers:xt(A()).optional()}).strict(),Ct=D({urlPattern:A().min(1,"urlPattern must not be empty"),methods:Z(A()).optional(),delayMs:ce().min(0,"delayMs must be >= 0"),probability:Q}).strict(),Tt=D({urlPattern:A().min(1,"urlPattern must not be empty"),methods:Z(A()).optional(),probability:Q,timeout:ce().min(0,"timeout must be >= 0").optional()}).strict(),Ot=D({urlPattern:A().min(1,"urlPattern must not be empty"),methods:Z(A()).optional(),probability:Q,strategy:Ve(["truncate","malformed-json","empty","wrong-type"])}).strict(),St=D({urlPattern:A().min(1,"urlPattern must not be empty"),methods:Z(A()).optional(),probability:Q}).strict(),At=D({failures:Z(wt).optional(),latencies:Z(Ct).optional(),aborts:Z(Tt).optional(),corruptions:Z(Ot).optional(),cors:Z(St).optional()}).strict(),Et=D({selector:A().min(1,"selector must not be empty"),action:Ve(["disable","hide","remove"]),probability:Q}).strict(),Nt=D({assaults:Z(Et).optional()}).strict(),Rt=D({network:At.optional(),ui:Nt.optional()}).strict();function Ue(s){const e=Rt.safeParse(s);if(!e.success){const t=e.error.issues.map(r=>`${r.path.join(".")}: ${r.message}`);throw new ze(t)}return e.data}class Fe{constructor(e=2e3){R(this,"listeners",new Map);R(this,"log",[]);this.maxLogEntries=e}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}off(e,t){var r;(r=this.listeners.get(e))==null||r.delete(t)}emit(e){this.log.push(e),this.log.length>this.maxLogEntries&&this.log.shift(),this.notify(this.listeners.get(e.type),e),this.notify(this.listeners.get("*"),e)}getLog(){return[...this.log]}clearLog(){this.log=[]}notify(e,t){if(e)for(const r of e)try{r(t)}catch{}}}function j(s){return Math.random()<s}function M(s,e){return e==="*"?!0:s.includes(e)}function qe(s,e){switch(e){case"truncate":return s.slice(0,Math.max(0,Math.floor(s.length/2)));case"malformed-json":return`${s}"}`;case"empty":return"";case"wrong-type":return"<html><body>Unexpected HTML</body></html>"}}function _e(s){return typeof Request<"u"&&s instanceof Request}function Zt(s){return _e(s)?s.url:s.toString()}function jt(s,e){return e!=null&&e.method?e.method.toUpperCase():_e(s)?s.method.toUpperCase():"GET"}function $t(s,e){if(e!=null&&e.signal)return e.signal;if(_e(s))return s.signal}function It(){if(typeof DOMException<"u")return new DOMException("The user aborted a request.","AbortError");const s=new Error("The user aborted a request.");return s.name="AbortError",s}function Mt(s,e){if(!e)return s;const t=new AbortController,r=i=>{o(),t.signal.aborted||t.abort(i.reason)},n=()=>r(s),a=()=>r(e),o=()=>{s.removeEventListener("abort",n),e.removeEventListener("abort",a)};return s.aborted?(r(s),t.signal):e.aborted?(r(e),t.signal):(s.addEventListener("abort",n,{once:!0}),e.addEventListener("abort",a,{once:!0}),t.signal)}function Lt(s,e){return e?{...s??{},signal:e}:s}function Be(s,e,t,r,n){s==null||s.emit({type:"network:abort",timestamp:Date.now(),applied:n,detail:{url:t,method:r,timeoutMs:e.timeout}})}function de(s,e,t,r,n){s==null||s.emit({type:"network:corruption",timestamp:Date.now(),applied:n,detail:{url:t,method:r,strategy:e.strategy}})}function Pt(s,e,t){return async(r,n)=>{const a=Zt(r),o=jt(r,n),i=$t(r,n);if(e.cors){for(const p of e.cors)if(M(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const N=j(p.probability);if(t==null||t.emit({type:"network:cors",timestamp:Date.now(),applied:N,detail:{url:a,method:o}}),N){console.debug(`[chaos-maker] CORS block: ${o} ${a}`);const V=new TypeError("Failed to fetch");throw V.stack="",V}}}let d=null,l,m,w=!1;const x=p=>{!d||w||(w=!0,m&&(clearTimeout(m),m=void 0),Be(t,d,a,o,p))};if(e.aborts){for(const p of e.aborts)if(M(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){if(!j(p.probability)){Be(t,p,a,o,!1);continue}console.warn(`CHAOS: Aborting ${o} ${a} after ${p.timeout||0}ms`),d=p;const V=new AbortController;l=Mt(V.signal,i);const le=()=>{w||(x(!0),V.abort(It()))};p.timeout?m=setTimeout(le,p.timeout):le();break}}if(d)try{const p=await s(r,Lt(n,l));return x(!1),p}catch(p){throw x(!1),p}if(e.failures){for(const p of e.failures)if(M(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const N=j(p.probability);if(t==null||t.emit({type:"network:failure",timestamp:Date.now(),applied:N,detail:{url:a,method:o,statusCode:p.statusCode}}),N){console.warn(`CHAOS: Forcing ${p.statusCode} for ${o} ${a}`);const V=p.body??JSON.stringify({error:"Chaos Maker Attack!"}),le=p.headers??{};return new Response(V,{status:p.statusCode,statusText:p.statusText??"Service Unavailable (Chaos)",headers:le})}}}if(e.latencies){for(const p of e.latencies)if(M(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const N=j(p.probability);t==null||t.emit({type:"network:latency",timestamp:Date.now(),applied:N,detail:{url:a,method:o,delayMs:p.delayMs}}),N&&(console.warn(`CHAOS: Adding ${p.delayMs}ms latency to ${o} ${a}`),await new Promise(V=>setTimeout(V,p.delayMs)))}}let O=null;if(e.corruptions){for(const p of e.corruptions)if(M(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){if(!j(p.probability)){de(t,p,a,o,!1);continue}O=p;break}}let C;try{C=await s(r,n)}catch(p){throw O&&de(t,O,a,o,!1),p}if(!O)return C;try{console.warn(`CHAOS: Corrupting response for ${o} ${a} with strategy: ${O.strategy}`);const p=await C.text(),N=qe(p,O.strategy);return de(t,O,a,o,!0),new Response(N,{status:C.status,statusText:C.statusText,headers:C.headers})}catch(p){throw de(t,O,a,o,!1),p}}}function He(s,e,t,r,n){s==null||s.emit({type:"network:abort",timestamp:Date.now(),applied:n,detail:{url:t,method:r,timeoutMs:e.timeout}})}function We(s,e,t,r,n){s==null||s.emit({type:"network:corruption",timestamp:Date.now(),applied:n,detail:{url:t,method:r,strategy:e.strategy}})}function Dt(s,e,t){return function(r){const n=this._chaos_url,a=this._chaos_method;if(e.cors){for(const i of e.cors)if(M(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=j(i.probability);if(t==null||t.emit({type:"network:cors",timestamp:Date.now(),applied:d,detail:{url:n,method:a}}),d){console.debug(`[chaos-maker] CORS block: ${a} ${n}`),Object.defineProperty(this,"status",{value:0}),Object.defineProperty(this,"statusText",{value:""}),this.dispatchEvent(new Event("error")),this.dispatchEvent(new Event("loadend"));return}}}if(e.aborts){for(const i of e.aborts)if(M(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){if(!j(i.probability)){He(t,i,n,a,!1);continue}console.warn(`CHAOS: Aborting ${a} ${n} after ${i.timeout||0}ms`);let l=!1,m;const w=()=>{m&&(clearTimeout(m),m=void 0),typeof this.removeEventListener=="function"&&this.removeEventListener("loadend",O)},x=p=>{l||(l=!0,w(),He(t,i,n,a,p))},O=()=>{x(!1)},C=()=>{l||(x(!0),this.abort())};typeof this.addEventListener=="function"&&this.addEventListener("loadend",O);try{s.call(this,r)}catch(p){throw x(!1),p}if(l)return;i.timeout?m=setTimeout(C,i.timeout):C();return}}if(e.failures){for(const i of e.failures)if(M(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=j(i.probability);if(t==null||t.emit({type:"network:failure",timestamp:Date.now(),applied:d,detail:{url:n,method:a,statusCode:i.statusCode}}),d){console.warn(`CHAOS: Forcing ${i.statusCode} for ${a} ${n}`),Object.defineProperty(this,"status",{value:i.statusCode}),Object.defineProperty(this,"statusText",{value:i.statusText??"Service Unavailable (Chaos)"});const l=i.body??JSON.stringify({error:"Chaos Maker Attack!"});Object.defineProperty(this,"responseText",{value:l,configurable:!0});const m=i.headers??{};Object.defineProperty(this,"getResponseHeader",{value:w=>{const x=Object.keys(m).find(O=>O.toLowerCase()===w.toLowerCase());return x?m[x]:null},configurable:!0}),Object.defineProperty(this,"getAllResponseHeaders",{value:()=>Object.entries(m).map(([w,x])=>`${w}: ${x}`).join(`\r
|
|
4
|
-
`),configurable:!0}),this.dispatchEvent(new Event("error")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"));return}}}let o=null;if(e.corruptions){for(const i of e.corruptions)if(M(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){if(!j(i.probability)){We(t,i,n,a,!1);continue}o=i;break}}if(o){let i=!1,d=null;const l=()=>{typeof this.removeEventListener=="function"&&(this.removeEventListener("error",x),this.removeEventListener("abort",x),this.removeEventListener("loadend",O))},m=C=>{i||(i=!0,We(t,o,n,a,C),l())},w=()=>{if(d!==null)return d;delete this.responseText;try{const C=this.responseText;return typeof C!="string"?(Object.defineProperty(this,"responseText",{value:C,configurable:!0}),m(!1),C):(d=qe(C,o.strategy),Object.defineProperty(this,"responseText",{value:d,configurable:!0}),m(!0),d)}catch(C){throw m(!1),C}},x=()=>{m(!1)},O=()=>{if(!i)try{w()}catch{}};typeof this.addEventListener=="function"&&(this.addEventListener("error",x),this.addEventListener("abort",x),this.addEventListener("loadend",O)),Object.defineProperty(this,"responseText",{get(){return w()},configurable:!0})}if(e.latencies){for(const i of e.latencies)if(M(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=j(i.probability);if(t==null||t.emit({type:"network:latency",timestamp:Date.now(),applied:d,detail:{url:n,method:a,delayMs:i.delayMs}}),d){console.warn(`CHAOS: Adding ${i.delayMs}ms latency to ${a} ${n}`),setTimeout(()=>{s.call(this,r)},i.delayMs);return}}}s.call(this,r)}}function Vt(s){return function(e,t){this._chaos_url=t.toString(),this._chaos_method=e.toUpperCase(),s.call(this,e,t)}}function be(s,e,t){const r=j(e.probability);if(t==null||t.emit({type:"ui:assault",timestamp:Date.now(),applied:r,detail:{selector:e.selector,action:e.action}}),!!r){console.warn(`CHAOS: Applying action '${e.action}' to element:`,s);try{switch(e.action){case"disable":"disabled"in s&&(s.disabled=!0);break;case"hide":s.style.display="none";break;case"remove":s.remove();break}}catch(n){console.error("Chaos Maker failed to assault element:",n,s)}}}function zt(s,e,t){if(s.nodeType!==Node.ELEMENT_NODE||!e.assaults)return;const r=s;for(const n of e.assaults){try{r.matches(n.selector)&&be(r,n,t)}catch(a){console.error(`Chaos Maker: Invalid selector '${n.selector}'`,a)}r.querySelectorAll(n.selector).forEach(a=>{be(a,n,t)})}}function Ut(s,e){if(s.assaults){console.log("CHAOS: Running initial DOM scan for existing elements...");for(const r of s.assaults)try{document.querySelectorAll(r.selector).forEach(n=>{be(n,r,e)})}catch(n){console.error(`Chaos Maker: Invalid selector in initial scan '${r.selector}'`,n)}}return new MutationObserver(r=>{for(const n of r)n.type==="childList"&&n.addedNodes.forEach(a=>zt(a,s,e))})}class ke{constructor(e){R(this,"config");R(this,"emitter");R(this,"running",!1);R(this,"originalFetch");R(this,"originalXhrSend");R(this,"originalXhrOpen");R(this,"domObserver");this.config=Ue(e),this.emitter=new Fe,console.log("Chaos Maker initialized with config:",e)}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getLog(){return this.emitter.getLog()}clearLog(){this.emitter.clearLog()}start(){if(this.running){console.warn("Chaos Maker is already running. Call stop() first.");return}this.running=!0,console.log("🛠️ Chaos Maker ENGAGED 🛠️"),this.config.network&&(this.originalFetch=window.fetch,window.fetch=Pt(this.originalFetch.bind(window),this.config.network,this.emitter),this.originalXhrOpen=window.XMLHttpRequest.prototype.open,window.XMLHttpRequest.prototype.open=Vt(this.originalXhrOpen),this.originalXhrSend=window.XMLHttpRequest.prototype.send,window.XMLHttpRequest.prototype.send=Dt(this.originalXhrSend,this.config.network,this.emitter)),this.config.ui&&(this.domObserver=Ut(this.config.ui,this.emitter),this.domObserver.observe(document.body,{childList:!0,subtree:!0}),console.log("UI Assailant is now observing the DOM."))}stop(){this.running=!1,console.log("🛑 Chaos Maker DISENGAGED 🛑"),this.originalFetch&&(window.fetch=this.originalFetch),this.originalXhrSend&&(window.XMLHttpRequest.prototype.send=this.originalXhrSend),this.originalXhrOpen&&(window.XMLHttpRequest.prototype.open=this.originalXhrOpen),this.domObserver&&(this.domObserver.disconnect(),console.log("UI Assailant has stopped observing."))}}function Xe(s){return JSON.parse(JSON.stringify(s))}class Ft{constructor(e){R(this,"config");this.config=e?Xe(e):{network:{},ui:{}},this.config.network||(this.config.network={}),this.config.ui||(this.config.ui={})}failRequests(e,t,r,n,a,o){return this.config.network.failures||(this.config.network.failures=[]),this.config.network.failures.push({urlPattern:e,statusCode:t,probability:r,methods:n,body:a,headers:o}),this}addLatency(e,t,r,n){return this.config.network.latencies||(this.config.network.latencies=[]),this.config.network.latencies.push({urlPattern:e,delayMs:t,probability:r,methods:n}),this}abortRequests(e,t,r,n){return this.config.network.aborts||(this.config.network.aborts=[]),this.config.network.aborts.push({urlPattern:e,probability:t,timeout:r,methods:n}),this}corruptResponses(e,t,r,n){return this.config.network.corruptions||(this.config.network.corruptions=[]),this.config.network.corruptions.push({urlPattern:e,strategy:t,probability:r,methods:n}),this}simulateCors(e,t,r){return this.config.network.cors||(this.config.network.cors=[]),this.config.network.cors.push({urlPattern:e,probability:t,methods:r}),this}assaultUi(e,t,r){return this.config.ui.assaults||(this.config.ui.assaults=[]),this.config.ui.assaults.push({selector:e,action:t,probability:r}),this}build(){return Xe(this.config)}}const ue="*";function Ge(s){if(s&&typeof s=="object"&&!Object.isFrozen(s)){Object.freeze(s);for(const e of Object.values(s))Ge(e)}return s}const qt=Ge({unstableApi:{network:{failures:[{urlPattern:"/api/",statusCode:500,probability:.1}],latencies:[{urlPattern:"/api/",delayMs:1e3,probability:.2}]}},slowNetwork:{network:{latencies:[{urlPattern:ue,delayMs:2e3,probability:1}]}},offlineMode:{network:{cors:[{urlPattern:ue,probability:1}]}},flakyConnection:{network:{aborts:[{urlPattern:ue,probability:.05}],latencies:[{urlPattern:ue,delayMs:3e3,probability:.1}]}},degradedUi:{ui:{assaults:[{selector:"button",action:"disable",probability:.2},{selector:"a",action:"hide",probability:.1}]}}});if(typeof window<"u"){window.ChaosMaker=ke;const s={instance:null,start:e=>{try{return s.instance&&s.instance.stop(),s.instance=new ke(e),s.instance.start(),{success:!0,message:"Chaos started"}}catch(t){return console.error("Chaos Utils Error:",t),{success:!1,message:t.message}}},stop:()=>s.instance?(s.instance.stop(),s.instance=null,{success:!0,message:"Chaos stopped"}):{success:!1,message:"No chaos instance to stop"},getLog:()=>s.instance?s.instance.getLog():[]};if(window.chaosUtils=s,window.__CHAOS_CONFIG__)try{const e=window.__CHAOS_CONFIG__;s.start(e),delete window.__CHAOS_CONFIG__}catch(e){console.error("ChaosMaker auto-start failed:",e)}}T.ChaosConfigBuilder=Ft,T.ChaosConfigError=ze,T.ChaosEventEmitter=Fe,T.ChaosMaker=ke,T.presets=qt,T.validateConfig=Ue,Object.defineProperty(T,Symbol.toStringTag,{value:"Module"})});
|
|
3
|
+
`)}`;super(r);Z(this,"issues");this.name="ChaosConfigError",this.issues=t}}const G=X().min(0,"Probability must be >= 0").max(1,"Probability must be <= 1"),rt=X().int().min(1),Q={onNth:rt.optional(),everyNth:rt.optional(),afterN:X().int().min(0).optional()},K=[s=>[s.onNth,s.everyNth,s.afterN].filter(e=>e!==void 0).length<=1,{message:"Only one of onNth, everyNth, or afterN may be set on a single rule"}],Ht=L({urlPattern:R().min(1,"urlPattern must not be empty"),methods:I(R()).optional(),statusCode:X().int().min(100).max(599),probability:G,body:R().optional(),statusText:R().optional(),headers:Bt(R()).optional(),...Q}).strict().refine(...K),Wt=L({urlPattern:R().min(1,"urlPattern must not be empty"),methods:I(R()).optional(),delayMs:X().min(0,"delayMs must be >= 0"),probability:G,...Q}).strict().refine(...K),Xt=L({urlPattern:R().min(1,"urlPattern must not be empty"),methods:I(R()).optional(),probability:G,timeout:X().min(0,"timeout must be >= 0").optional(),...Q}).strict().refine(...K),Gt=L({urlPattern:R().min(1,"urlPattern must not be empty"),methods:I(R()).optional(),probability:G,strategy:Ce(["truncate","malformed-json","empty","wrong-type"]),...Q}).strict().refine(...K),Jt=L({urlPattern:R().min(1,"urlPattern must not be empty"),methods:I(R()).optional(),probability:G,...Q}).strict().refine(...K),Yt=L({failures:I(Ht).optional(),latencies:I(Wt).optional(),aborts:I(Xt).optional(),corruptions:I(Gt).optional(),cors:I(Jt).optional()}).strict(),Qt=L({selector:R().min(1,"selector must not be empty"),action:Ce(["disable","hide","remove"]),probability:G}).strict(),Kt=L({assaults:I(Qt).optional()}).strict(),Pe=Ce(["inbound","outbound","both"]),es=L({urlPattern:R().min(1,"urlPattern must not be empty"),direction:Pe,probability:G,...Q}).strict().refine(...K),ts=L({urlPattern:R().min(1,"urlPattern must not be empty"),direction:Pe,delayMs:X().min(0,"delayMs must be >= 0"),probability:G,...Q}).strict().refine(...K),ss=L({urlPattern:R().min(1,"urlPattern must not be empty"),direction:Pe,strategy:Ce(["truncate","malformed-json","empty","wrong-type"]),probability:G,...Q}).strict().refine(...K),rs=X().int().refine(s=>s===1e3||s>=3e3&&s<=4999,{message:"code must be 1000 or in the range 3000-4999"}),ns=R().refine(s=>new TextEncoder().encode(s).length<=123,{message:"reason must be <= 123 UTF-8 bytes"}),as=L({urlPattern:R().min(1,"urlPattern must not be empty"),code:rs.optional(),reason:ns.optional(),afterMs:X().min(0,"afterMs must be >= 0").optional(),probability:G,...Q}).strict().refine(...K),is=L({drops:I(es).optional(),delays:I(ts).optional(),corruptions:I(ss).optional(),closes:I(as).optional()}).strict(),os=L({network:Yt.optional(),ui:Kt.optional(),websocket:is.optional(),seed:X().int("Seed must be an integer").optional()}).strict();function nt(s){const e=os.safeParse(s);if(!e.success){const t=e.error.issues.map(r=>`${r.path.join(".")}: ${r.message}`);throw new st(t)}return e.data}function cs(s){let e=s|0;return()=>{e=e+1831565813|0;let t=Math.imul(e^e>>>15,1|e);return t=t+Math.imul(t^t>>>7,61|t)^t,((t^t>>>14)>>>0)/4294967296}}function at(){return Math.random()*4294967296>>>0}function it(s){const e=s??at();return{random:cs(e),seed:e}}class ot{constructor(e=2e3){Z(this,"listeners",new Map);Z(this,"log",[]);this.maxLogEntries=e}on(e,t){this.listeners.has(e)||this.listeners.set(e,new Set),this.listeners.get(e).add(t)}off(e,t){var r;(r=this.listeners.get(e))==null||r.delete(t)}emit(e){this.log.push(e),this.log.length>this.maxLogEntries&&this.log.shift(),this.notify(this.listeners.get(e.type),e),this.notify(this.listeners.get("*"),e)}getLog(){return[...this.log]}clearLog(){this.log=[]}notify(e,t){if(e)for(const r of e)try{r(t)}catch{}}}function D(s,e=Math.random){return e()<s}function U(s,e){const t=(e.get(s)??0)+1;return e.set(s,t),t}function q(s,e){return s.onNth!==void 0?e===s.onNth:s.everyNth!==void 0?e%s.everyNth===0:s.afterN!==void 0?e>s.afterN:!0}function F(s,e){return e==="*"?!0:s.includes(e)}function ct(s,e){switch(e){case"truncate":return s.slice(0,Math.max(0,Math.floor(s.length/2)));case"malformed-json":return`${s}"}`;case"empty":return"";case"wrong-type":return"<html><body>Unexpected HTML</body></html>"}}function Ze(s){return typeof Request<"u"&&s instanceof Request}function ds(s){return Ze(s)?s.url:s.toString()}function us(s,e){return e!=null&&e.method?e.method.toUpperCase():Ze(s)?s.method.toUpperCase():"GET"}function ls(s,e){if(e!=null&&e.signal)return e.signal;if(Ze(s))return s.signal}function fs(){if(typeof DOMException<"u")return new DOMException("The user aborted a request.","AbortError");const s=new Error("The user aborted a request.");return s.name="AbortError",s}function hs(s,e){if(!e)return s;const t=new AbortController,r=o=>{i(),t.signal.aborted||t.abort(o.reason)},n=()=>r(s),a=()=>r(e),i=()=>{s.removeEventListener("abort",n),e.removeEventListener("abort",a)};return s.aborted?(r(s),t.signal):e.aborted?(r(e),t.signal):(s.addEventListener("abort",n,{once:!0}),e.addEventListener("abort",a,{once:!0}),t.signal)}function ps(s,e){return e?{...s??{},signal:e}:s}function dt(s,e,t,r,n){s==null||s.emit({type:"network:abort",timestamp:Date.now(),applied:n,detail:{url:t,method:r,timeoutMs:e.timeout}})}function Se(s,e,t,r,n){s==null||s.emit({type:"network:corruption",timestamp:Date.now(),applied:n,detail:{url:t,method:r,strategy:e.strategy}})}function ms(s,e,t,r=Math.random,n=new Map){return async(a,i)=>{const o=ds(a),l=us(a,i),c=ls(a,i);if(e.cors){for(const d of e.cors)if(F(o,d.urlPattern)&&(!d.methods||d.methods.includes(l))){const k=U(d,n);if(!q(d,k))continue;const x=D(d.probability,r);if(t==null||t.emit({type:"network:cors",timestamp:Date.now(),applied:x,detail:{url:o,method:l}}),x){console.debug(`[chaos-maker] CORS block: ${l} ${o}`);const S=new TypeError("Failed to fetch");throw S.stack="",S}}}let g=null,O,A,j=!1;const M=d=>{!g||j||(j=!0,A&&(clearTimeout(A),A=void 0),dt(t,g,o,l,d))};if(e.aborts){for(const d of e.aborts)if(F(o,d.urlPattern)&&(!d.methods||d.methods.includes(l))){const k=U(d,n);if(!q(d,k))continue;if(!D(d.probability,r)){dt(t,d,o,l,!1);continue}console.warn(`CHAOS: Aborting ${l} ${o} after ${d.timeout||0}ms`),g=d;const S=new AbortController;O=hs(S.signal,c);const T=()=>{j||(M(!0),S.abort(fs()))};d.timeout?A=setTimeout(T,d.timeout):T();break}}if(g)try{const d=await s(a,ps(i,O));return M(!1),d}catch(d){throw M(!1),d}if(e.failures){for(const d of e.failures)if(F(o,d.urlPattern)&&(!d.methods||d.methods.includes(l))){const k=U(d,n);if(!q(d,k))continue;const x=D(d.probability,r);if(t==null||t.emit({type:"network:failure",timestamp:Date.now(),applied:x,detail:{url:o,method:l,statusCode:d.statusCode}}),x){console.warn(`CHAOS: Forcing ${d.statusCode} for ${l} ${o}`);const S=d.body??JSON.stringify({error:"Chaos Maker Attack!"}),T=d.headers??{};return new Response(S,{status:d.statusCode,statusText:d.statusText??"Service Unavailable (Chaos)",headers:T})}}}if(e.latencies){for(const d of e.latencies)if(F(o,d.urlPattern)&&(!d.methods||d.methods.includes(l))){const k=U(d,n);if(!q(d,k))continue;const x=D(d.probability,r);t==null||t.emit({type:"network:latency",timestamp:Date.now(),applied:x,detail:{url:o,method:l,delayMs:d.delayMs}}),x&&(console.warn(`CHAOS: Adding ${d.delayMs}ms latency to ${l} ${o}`),await new Promise(S=>setTimeout(S,d.delayMs)))}}let y=null;if(e.corruptions){for(const d of e.corruptions)if(F(o,d.urlPattern)&&(!d.methods||d.methods.includes(l))){const k=U(d,n);if(!q(d,k))continue;if(!D(d.probability,r)){Se(t,d,o,l,!1);continue}y=d;break}}let p;try{p=await s(a,i)}catch(d){throw y&&Se(t,y,o,l,!1),d}if(!y)return p;try{console.warn(`CHAOS: Corrupting response for ${l} ${o} with strategy: ${y.strategy}`);const d=await p.text(),k=ct(d,y.strategy);return Se(t,y,o,l,!0),new Response(k,{status:p.status,statusText:p.statusText,headers:p.headers})}catch(d){throw Se(t,y,o,l,!1),d}}}function ut(s,e,t,r,n){s==null||s.emit({type:"network:abort",timestamp:Date.now(),applied:n,detail:{url:t,method:r,timeoutMs:e.timeout}})}function lt(s,e,t,r,n){s==null||s.emit({type:"network:corruption",timestamp:Date.now(),applied:n,detail:{url:t,method:r,strategy:e.strategy}})}function ys(s,e,t,r=Math.random,n=new Map){return function(a){const i=this._chaos_url,o=this._chaos_method;if(e.cors){for(const c of e.cors)if(F(i,c.urlPattern)&&(!c.methods||c.methods.includes(o))){const g=U(c,n);if(!q(c,g))continue;const O=D(c.probability,r);if(t==null||t.emit({type:"network:cors",timestamp:Date.now(),applied:O,detail:{url:i,method:o}}),O){console.debug(`[chaos-maker] CORS block: ${o} ${i}`),Object.defineProperty(this,"status",{value:0}),Object.defineProperty(this,"statusText",{value:""}),this.dispatchEvent(new Event("error")),this.dispatchEvent(new Event("loadend"));return}}}if(e.aborts){for(const c of e.aborts)if(F(i,c.urlPattern)&&(!c.methods||c.methods.includes(o))){const g=U(c,n);if(!q(c,g))continue;if(!D(c.probability,r)){ut(t,c,i,o,!1);continue}console.warn(`CHAOS: Aborting ${o} ${i} after ${c.timeout||0}ms`);let A=!1,j;const M=()=>{j&&(clearTimeout(j),j=void 0),typeof this.removeEventListener=="function"&&this.removeEventListener("loadend",p)},y=k=>{A||(A=!0,M(),ut(t,c,i,o,k))},p=()=>{y(!1)},d=()=>{A||(y(!0),this.abort())};typeof this.addEventListener=="function"&&this.addEventListener("loadend",p);try{s.call(this,a)}catch(k){throw y(!1),k}if(A)return;c.timeout?j=setTimeout(d,c.timeout):d();return}}if(e.failures){for(const c of e.failures)if(F(i,c.urlPattern)&&(!c.methods||c.methods.includes(o))){const g=U(c,n);if(!q(c,g))continue;const O=D(c.probability,r);if(t==null||t.emit({type:"network:failure",timestamp:Date.now(),applied:O,detail:{url:i,method:o,statusCode:c.statusCode}}),O){console.warn(`CHAOS: Forcing ${c.statusCode} for ${o} ${i}`),Object.defineProperty(this,"status",{value:c.statusCode}),Object.defineProperty(this,"statusText",{value:c.statusText??"Service Unavailable (Chaos)"});const A=c.body??JSON.stringify({error:"Chaos Maker Attack!"});Object.defineProperty(this,"responseText",{value:A,configurable:!0});const j=c.headers??{};Object.defineProperty(this,"getResponseHeader",{value:M=>{const y=Object.keys(j).find(p=>p.toLowerCase()===M.toLowerCase());return y?j[y]:null},configurable:!0}),Object.defineProperty(this,"getAllResponseHeaders",{value:()=>Object.entries(j).map(([M,y])=>`${M}: ${y}`).join(`\r
|
|
4
|
+
`),configurable:!0}),this.dispatchEvent(new Event("error")),this.dispatchEvent(new Event("load")),this.dispatchEvent(new Event("loadend"));return}}}let l=null;if(e.corruptions){for(const c of e.corruptions)if(F(i,c.urlPattern)&&(!c.methods||c.methods.includes(o))){const g=U(c,n);if(!q(c,g))continue;if(!D(c.probability,r)){lt(t,c,i,o,!1);continue}l=c;break}}if(l){let c=!1,g=null;const O=()=>{typeof this.removeEventListener=="function"&&(this.removeEventListener("error",M),this.removeEventListener("abort",M),this.removeEventListener("loadend",y))},A=p=>{c||(c=!0,lt(t,l,i,o,p),O())},j=()=>{if(g!==null)return g;delete this.responseText;try{const p=this.responseText;return typeof p!="string"?(Object.defineProperty(this,"responseText",{value:p,configurable:!0}),A(!1),p):(g=ct(p,l.strategy),Object.defineProperty(this,"responseText",{value:g,configurable:!0}),A(!0),g)}catch(p){throw A(!1),p}},M=()=>{A(!1)},y=()=>{if(!c)try{j()}catch{}};typeof this.addEventListener=="function"&&(this.addEventListener("error",M),this.addEventListener("abort",M),this.addEventListener("loadend",y)),Object.defineProperty(this,"responseText",{get(){return j()},configurable:!0})}if(e.latencies){for(const c of e.latencies)if(F(i,c.urlPattern)&&(!c.methods||c.methods.includes(o))){const g=U(c,n);if(!q(c,g))continue;const O=D(c.probability,r);if(t==null||t.emit({type:"network:latency",timestamp:Date.now(),applied:O,detail:{url:i,method:o,delayMs:c.delayMs}}),O){console.warn(`CHAOS: Adding ${c.delayMs}ms latency to ${o} ${i}`),setTimeout(()=>{s.call(this,a)},c.delayMs);return}}}s.call(this,a)}}function gs(s){return function(e,t){this._chaos_url=t.toString(),this._chaos_method=e.toUpperCase(),s.call(this,e,t)}}function $e(s,e,t,r=Math.random){const n=D(e.probability,r);if(t==null||t.emit({type:"ui:assault",timestamp:Date.now(),applied:n,detail:{selector:e.selector,action:e.action}}),!!n){console.warn(`CHAOS: Applying action '${e.action}' to element:`,s);try{switch(e.action){case"disable":"disabled"in s&&(s.disabled=!0);break;case"hide":s.style.display="none";break;case"remove":s.remove();break}}catch(a){console.error("Chaos Maker failed to assault element:",a,s)}}}function vs(s,e,t,r=Math.random){if(s.nodeType!==Node.ELEMENT_NODE||!e.assaults)return;const n=s;for(const a of e.assaults){try{n.matches(a.selector)&&$e(n,a,t,r)}catch(i){console.error(`Chaos Maker: Invalid selector '${a.selector}'`,i)}n.querySelectorAll(a.selector).forEach(i=>{$e(i,a,t,r)})}}function _s(s,e,t=Math.random){if(s.assaults){console.log("CHAOS: Running initial DOM scan for existing elements...");for(const n of s.assaults)try{document.querySelectorAll(n.selector).forEach(a=>{$e(a,n,e,t)})}catch(a){console.error(`Chaos Maker: Invalid selector in initial scan '${n.selector}'`,a)}}return new MutationObserver(n=>{for(const a of n)a.type==="childList"&&a.addedNodes.forEach(i=>vs(i,s,e,t))})}const ft=Symbol.for("chaos-maker.websocket.intercepted");function bs(s,e){return s==="both"?!0:s===e}function ht(s){return typeof s=="string"?"text":"binary"}function pt(s,e){switch(e){case"truncate":return s.slice(0,Math.max(0,Math.floor(s.length/2)));case"malformed-json":return`${s}"}`;case"empty":return"";case"wrong-type":return"<html><body>Unexpected HTML</body></html>"}}function mt(s,e){if(e==="malformed-json"||e==="wrong-type")return null;if(e==="empty")return typeof Blob<"u"&&s instanceof Blob?new Blob([]):s instanceof ArrayBuffer?new ArrayBuffer(0):new Uint8Array(0);if(typeof Blob<"u"&&s instanceof Blob)return s.slice(0,Math.max(0,Math.floor(s.size/2)));if(s instanceof ArrayBuffer)return s.slice(0,Math.max(0,Math.floor(s.byteLength/2)));const t=s,r=Math.max(0,Math.floor(t.byteLength/2));return new Uint8Array(t.buffer.slice(t.byteOffset,t.byteOffset+r))}function fe(s,e,t,r,n){if(!s)return null;for(const a of s){if(!F(e,a.urlPattern)||!bs(a.direction,t))continue;const i=U(a,n);if(q(a,i)&&D(a.probability,r))return a}return null}function Te(s,e,t,r,n){s.emit({type:"websocket:drop",timestamp:Date.now(),applied:!0,detail:{url:e,direction:t,payloadType:r,...n?{reason:n}:{}}})}function yt(s,e,t,r,n){s.emit({type:"websocket:delay",timestamp:Date.now(),applied:!0,detail:{url:e,direction:t,payloadType:r,delayMs:n}})}function he(s,e,t,r,n,a,i){s.emit({type:"websocket:corrupt",timestamp:Date.now(),applied:a,detail:{url:e,direction:t,payloadType:r,strategy:n,...i?{reason:i}:{}}})}function ks(s,e,t,r){s.emit({type:"websocket:close",timestamp:Date.now(),applied:!0,detail:{url:e,closeCode:t,closeReason:r}})}function ws(s,e,t,r,n){const a=new Map;let i=!0;const o=(y,p)=>{let d=a.get(y);d||(d=new Set,a.set(y,d)),d.add(p)},l=(y,p)=>{var d;(d=a.get(y))==null||d.delete(p)},c=(y,p)=>{const d=a.get(y);if(d){for(const k of d)clearTimeout(k.handle),k.kind==="delay"&&Te(t,k.url,k.direction,k.payloadType,p);a.delete(y)}},g=(y,p,d)=>{const k=new MessageEvent("message",{data:d,origin:p.origin,lastEventId:p.lastEventId,source:p.source,ports:Array.from(p.ports??[])});k[ft]=!0,y.dispatchEvent(k)},O=(y,p,d,k)=>{if(!i)return{handled:!1,data:d};const x="outbound",S=ht(d);if(fe(e.drops,p,x,r,n))return Te(t,p,x,S),{handled:!0,data:d};let T=d;const P=fe(e.corruptions,p,x,r,n);if(P)if(S==="text")T=pt(T,P.strategy),he(t,p,x,S,P.strategy,!0);else{const B=mt(T,P.strategy);B===null?he(t,p,x,S,P.strategy,!1,"incompatible-payload-type"):(T=B,he(t,p,x,S,P.strategy,!0))}const V=fe(e.delays,p,x,r,n);if(V){yt(t,p,x,S,V.delayMs);const B={kind:"delay",handle:setTimeout(()=>{l(y,B);try{k(T)}catch{}},V.delayMs),url:p,direction:x,payloadType:S};return o(y,B),{handled:!0,data:T}}return{handled:!1,data:T}},A=(y,p)=>{y.addEventListener("message",d=>{const k=d;if(k[ft]||!i)return;const x="inbound",S=ht(k.data);if(fe(e.drops,p,x,r,n)){k.stopImmediatePropagation(),Te(t,p,x,S);return}let T=k.data,P=!1;const V=fe(e.corruptions,p,x,r,n);if(V)if(S==="text")T=pt(T,V.strategy),P=!0,he(t,p,x,S,V.strategy,!0);else{const ge=mt(T,V.strategy);ge===null?he(t,p,x,S,V.strategy,!1,"incompatible-payload-type"):(T=ge,P=!0,he(t,p,x,S,V.strategy,!0))}const B=fe(e.delays,p,x,r,n);if(B){k.stopImmediatePropagation(),yt(t,p,x,S,B.delayMs);const ge={kind:"delay",handle:setTimeout(()=>{l(y,ge),g(y,k,T)},B.delayMs),url:p,direction:x,payloadType:S};o(y,ge);return}P&&(k.stopImmediatePropagation(),g(y,k,T))})},j=(y,p)=>{if(e.closes)for(const d of e.closes){if(!F(p,d.urlPattern))continue;const k=U(d,n);if(!q(d,k)||!D(d.probability,r))continue;const x=d.code??1e3,S=d.reason??"Chaos Maker close",T=d.afterMs??0,P=()=>{if(i){c(y,"close-interrupt"),ks(t,p,x,S);try{y.close(x,S)}catch{try{y.close()}catch{}}}};if(T<=0)y.readyState===y.OPEN?P():y.addEventListener("open",P,{once:!0});else{const V=()=>{const B={kind:"close",handle:setTimeout(P,T)};o(y,B)};y.readyState===y.OPEN?V():y.addEventListener("open",V,{once:!0})}return}};function M(y,p){const d=new s(y,p),k=typeof y=="string"?y:y.toString(),x=d.send.bind(d);return d.send=function(T){const P=O(d,k,T,x);P.handled||x(P.data)},A(d,k),j(d,k),d}Object.defineProperty(M,"prototype",{value:s.prototype,writable:!1});for(const y of["CONNECTING","OPEN","CLOSING","CLOSED"])M[y]=s[y];return{Wrapped:M,uninstall(){i=!1;for(const[,y]of a)for(const p of y)clearTimeout(p.handle),p.kind==="delay"&&Te(t,p.url,p.direction,p.payloadType,"stop-during-delay");a.clear()}}}class Ie{constructor(e){Z(this,"config");Z(this,"emitter");Z(this,"random");Z(this,"seed");Z(this,"running",!1);Z(this,"originalFetch");Z(this,"originalXhrSend");Z(this,"originalXhrOpen");Z(this,"domObserver");Z(this,"originalWebSocket");Z(this,"webSocketHandle");Z(this,"requestCounters",new Map);this.config=nt(e),this.emitter=new ot;const t=it(e.seed);this.random=t.random,this.seed=t.seed,console.log(`Chaos Maker initialized (seed: ${this.seed})`)}getSeed(){return this.seed}on(e,t){this.emitter.on(e,t)}off(e,t){this.emitter.off(e,t)}getLog(){return this.emitter.getLog()}clearLog(){this.emitter.clearLog()}start(){if(this.running){console.warn("Chaos Maker is already running. Call stop() first.");return}this.requestCounters.clear(),this.running=!0,console.log("🛠️ Chaos Maker ENGAGED 🛠️"),this.config.network&&(this.originalFetch=window.fetch,window.fetch=ms(this.originalFetch.bind(window),this.config.network,this.emitter,this.random,this.requestCounters),this.originalXhrOpen=window.XMLHttpRequest.prototype.open,window.XMLHttpRequest.prototype.open=gs(this.originalXhrOpen),this.originalXhrSend=window.XMLHttpRequest.prototype.send,window.XMLHttpRequest.prototype.send=ys(this.originalXhrSend,this.config.network,this.emitter,this.random,this.requestCounters)),this.config.ui&&(this.domObserver=_s(this.config.ui,this.emitter,this.random),this.domObserver.observe(document.body,{childList:!0,subtree:!0}),console.log("UI Assailant is now observing the DOM.")),this.config.websocket&&typeof window<"u"&&typeof window.WebSocket<"u"&&(this.originalWebSocket=window.WebSocket,this.webSocketHandle=ws(this.originalWebSocket,this.config.websocket,this.emitter,this.random,this.requestCounters),window.WebSocket=this.webSocketHandle.Wrapped)}stop(){this.running=!1,console.log("🛑 Chaos Maker DISENGAGED 🛑"),this.originalFetch&&(window.fetch=this.originalFetch),this.originalXhrSend&&(window.XMLHttpRequest.prototype.send=this.originalXhrSend),this.originalXhrOpen&&(window.XMLHttpRequest.prototype.open=this.originalXhrOpen),this.domObserver&&(this.domObserver.disconnect(),console.log("UI Assailant has stopped observing.")),this.originalWebSocket&&(window.WebSocket=this.originalWebSocket,this.originalWebSocket=void 0),this.webSocketHandle&&(this.webSocketHandle.uninstall(),this.webSocketHandle=void 0)}}function gt(s){return JSON.parse(JSON.stringify(s))}class xs{constructor(e){Z(this,"config");this.config=e?gt(e):{network:{},ui:{},websocket:{}},this.config.network||(this.config.network={}),this.config.ui||(this.config.ui={}),this.config.websocket||(this.config.websocket={})}failRequests(e,t,r,n,a,i,o){return this.config.network.failures||(this.config.network.failures=[]),this.config.network.failures.push({urlPattern:e,statusCode:t,probability:r,methods:n,body:a,headers:i,...o}),this}addLatency(e,t,r,n,a){return this.config.network.latencies||(this.config.network.latencies=[]),this.config.network.latencies.push({urlPattern:e,delayMs:t,probability:r,methods:n,...a}),this}abortRequests(e,t,r,n,a){return this.config.network.aborts||(this.config.network.aborts=[]),this.config.network.aborts.push({urlPattern:e,probability:t,timeout:r,methods:n,...a}),this}corruptResponses(e,t,r,n,a){return this.config.network.corruptions||(this.config.network.corruptions=[]),this.config.network.corruptions.push({urlPattern:e,strategy:t,probability:r,methods:n,...a}),this}simulateCors(e,t,r,n){return this.config.network.cors||(this.config.network.cors=[]),this.config.network.cors.push({urlPattern:e,probability:t,methods:r,...n}),this}failRequestsOnNth(e,t,r,n){return this.failRequests(e,t,1,n,void 0,void 0,{onNth:r})}addLatencyOnNth(e,t,r,n){return this.addLatency(e,t,1,n,{onNth:r})}abortRequestsOnNth(e,t,r,n){return this.abortRequests(e,1,r,n,{onNth:t})}corruptResponsesOnNth(e,t,r,n){return this.corruptResponses(e,t,1,n,{onNth:r})}simulateCorsOnNth(e,t,r){return this.simulateCors(e,1,r,{onNth:t})}failRequestsEveryNth(e,t,r,n){return this.failRequests(e,t,1,n,void 0,void 0,{everyNth:r})}addLatencyEveryNth(e,t,r,n){return this.addLatency(e,t,1,n,{everyNth:r})}abortRequestsEveryNth(e,t,r,n){return this.abortRequests(e,1,r,n,{everyNth:t})}corruptResponsesEveryNth(e,t,r,n){return this.corruptResponses(e,t,1,n,{everyNth:r})}simulateCorsEveryNth(e,t,r){return this.simulateCors(e,1,r,{everyNth:t})}failRequestsAfterN(e,t,r,n){return this.failRequests(e,t,1,n,void 0,void 0,{afterN:r})}addLatencyAfterN(e,t,r,n){return this.addLatency(e,t,1,n,{afterN:r})}abortRequestsAfterN(e,t,r,n){return this.abortRequests(e,1,r,n,{afterN:t})}corruptResponsesAfterN(e,t,r,n){return this.corruptResponses(e,t,1,n,{afterN:r})}simulateCorsAfterN(e,t,r){return this.simulateCors(e,1,r,{afterN:t})}assaultUi(e,t,r){return this.config.ui.assaults||(this.config.ui.assaults=[]),this.config.ui.assaults.push({selector:e,action:t,probability:r}),this}dropMessages(e,t,r,n){return this.config.websocket.drops||(this.config.websocket.drops=[]),this.config.websocket.drops.push({urlPattern:e,direction:t,probability:r,...n}),this}delayMessages(e,t,r,n,a){return this.config.websocket.delays||(this.config.websocket.delays=[]),this.config.websocket.delays.push({urlPattern:e,direction:t,delayMs:r,probability:n,...a}),this}corruptMessages(e,t,r,n,a){return this.config.websocket.corruptions||(this.config.websocket.corruptions=[]),this.config.websocket.corruptions.push({urlPattern:e,direction:t,strategy:r,probability:n,...a}),this}closeConnection(e,t,r,n){return this.config.websocket.closes||(this.config.websocket.closes=[]),this.config.websocket.closes.push({urlPattern:e,probability:t,...r,...n}),this}dropMessagesOnNth(e,t,r){return this.dropMessages(e,t,1,{onNth:r})}delayMessagesOnNth(e,t,r,n){return this.delayMessages(e,t,r,1,{onNth:n})}withSeed(e){return this.config.seed=e,this}build(){return gt(this.config)}}const ae="*";function vt(s){if(s&&typeof s=="object"&&!Object.isFrozen(s)){Object.freeze(s);for(const e of Object.values(s))vt(e)}return s}const Cs=vt({unstableApi:{network:{failures:[{urlPattern:"/api/",statusCode:500,probability:.1}],latencies:[{urlPattern:"/api/",delayMs:1e3,probability:.2}]}},slowNetwork:{network:{latencies:[{urlPattern:ae,delayMs:2e3,probability:1}]}},offlineMode:{network:{cors:[{urlPattern:ae,probability:1}]}},flakyConnection:{network:{aborts:[{urlPattern:ae,probability:.05}],latencies:[{urlPattern:ae,delayMs:3e3,probability:.1}]}},degradedUi:{ui:{assaults:[{selector:"button",action:"disable",probability:.2},{selector:"a",action:"hide",probability:.1}]}},unreliableWebSocket:{websocket:{drops:[{urlPattern:ae,direction:"both",probability:.1}],delays:[{urlPattern:ae,direction:"inbound",delayMs:500,probability:1}],corruptions:[{urlPattern:ae,direction:"inbound",strategy:"truncate",probability:.05}]}}});if(typeof window<"u"){window.ChaosMaker=Ie;const s={instance:null,start:e=>{try{return s.instance&&s.instance.stop(),s.instance=new Ie(e),s.instance.start(),{success:!0,message:"Chaos started"}}catch(t){return console.error("Chaos Utils Error:",t),{success:!1,message:t.message}}},stop:()=>s.instance?(s.instance.stop(),s.instance=null,{success:!0,message:"Chaos stopped"}):{success:!1,message:"No chaos instance to stop"},getLog:()=>s.instance?s.instance.getLog():[],getSeed:()=>s.instance?s.instance.getSeed():null};if(window.chaosUtils=s,window.__CHAOS_CONFIG__)try{const e=window.__CHAOS_CONFIG__;s.start(e),delete window.__CHAOS_CONFIG__}catch(e){console.error("ChaosMaker auto-start failed:",e)}}E.ChaosConfigBuilder=xs,E.ChaosConfigError=st,E.ChaosEventEmitter=ot,E.ChaosMaker=Ie,E.createPrng=it,E.generateSeed=at,E.presets=Cs,E.validateConfig=nt,Object.defineProperty(E,Symbol.toStringTag,{value:"Module"})}));
|
|
@@ -3,12 +3,20 @@ import { ChaosEvent, ChaosEventType, ChaosEventListener } from './events';
|
|
|
3
3
|
export declare class ChaosMaker {
|
|
4
4
|
private config;
|
|
5
5
|
private emitter;
|
|
6
|
+
private random;
|
|
7
|
+
private seed;
|
|
6
8
|
private running;
|
|
7
9
|
private originalFetch?;
|
|
8
10
|
private originalXhrSend?;
|
|
9
11
|
private originalXhrOpen?;
|
|
10
12
|
private domObserver?;
|
|
13
|
+
private originalWebSocket?;
|
|
14
|
+
private webSocketHandle?;
|
|
15
|
+
/** Shared counters keyed by config rule object reference. Shared across fetch + XHR + WS. */
|
|
16
|
+
private requestCounters;
|
|
11
17
|
constructor(config: ChaosConfig);
|
|
18
|
+
/** Get the seed used by this instance. Log this on failure to reproduce exact chaos decisions. */
|
|
19
|
+
getSeed(): number;
|
|
12
20
|
on(type: ChaosEventType | '*', listener: ChaosEventListener): void;
|
|
13
21
|
off(type: ChaosEventType | '*', listener: ChaosEventListener): void;
|
|
14
22
|
getLog(): ChaosEvent[];
|
package/dist/types/builder.d.ts
CHANGED
|
@@ -1,12 +1,39 @@
|
|
|
1
|
-
import { ChaosConfig, CorruptionStrategy } from './config';
|
|
1
|
+
import { ChaosConfig, CorruptionStrategy, RequestCountingOptions, WebSocketDirection, WebSocketCorruptionStrategy } from './config';
|
|
2
2
|
export declare class ChaosConfigBuilder {
|
|
3
3
|
private config;
|
|
4
4
|
constructor(initialConfig?: ChaosConfig);
|
|
5
|
-
failRequests(urlPattern: string, statusCode: number, probability: number, methods?: string[], body?: string, headers?: Record<string, string
|
|
6
|
-
addLatency(urlPattern: string, delayMs: number, probability: number, methods?: string[]): this;
|
|
7
|
-
abortRequests(urlPattern: string, probability: number, timeout?: number, methods?: string[]): this;
|
|
8
|
-
corruptResponses(urlPattern: string, strategy: CorruptionStrategy, probability: number, methods?: string[]): this;
|
|
9
|
-
simulateCors(urlPattern: string, probability: number, methods?: string[]): this;
|
|
5
|
+
failRequests(urlPattern: string, statusCode: number, probability: number, methods?: string[], body?: string, headers?: Record<string, string>, counting?: RequestCountingOptions): this;
|
|
6
|
+
addLatency(urlPattern: string, delayMs: number, probability: number, methods?: string[], counting?: RequestCountingOptions): this;
|
|
7
|
+
abortRequests(urlPattern: string, probability: number, timeout?: number, methods?: string[], counting?: RequestCountingOptions): this;
|
|
8
|
+
corruptResponses(urlPattern: string, strategy: CorruptionStrategy, probability: number, methods?: string[], counting?: RequestCountingOptions): this;
|
|
9
|
+
simulateCors(urlPattern: string, probability: number, methods?: string[], counting?: RequestCountingOptions): this;
|
|
10
|
+
failRequestsOnNth(urlPattern: string, statusCode: number, n: number, methods?: string[]): this;
|
|
11
|
+
addLatencyOnNth(urlPattern: string, delayMs: number, n: number, methods?: string[]): this;
|
|
12
|
+
abortRequestsOnNth(urlPattern: string, n: number, timeout?: number, methods?: string[]): this;
|
|
13
|
+
corruptResponsesOnNth(urlPattern: string, strategy: CorruptionStrategy, n: number, methods?: string[]): this;
|
|
14
|
+
simulateCorsOnNth(urlPattern: string, n: number, methods?: string[]): this;
|
|
15
|
+
failRequestsEveryNth(urlPattern: string, statusCode: number, n: number, methods?: string[]): this;
|
|
16
|
+
addLatencyEveryNth(urlPattern: string, delayMs: number, n: number, methods?: string[]): this;
|
|
17
|
+
abortRequestsEveryNth(urlPattern: string, n: number, timeout?: number, methods?: string[]): this;
|
|
18
|
+
corruptResponsesEveryNth(urlPattern: string, strategy: CorruptionStrategy, n: number, methods?: string[]): this;
|
|
19
|
+
simulateCorsEveryNth(urlPattern: string, n: number, methods?: string[]): this;
|
|
20
|
+
failRequestsAfterN(urlPattern: string, statusCode: number, n: number, methods?: string[]): this;
|
|
21
|
+
addLatencyAfterN(urlPattern: string, delayMs: number, n: number, methods?: string[]): this;
|
|
22
|
+
abortRequestsAfterN(urlPattern: string, n: number, timeout?: number, methods?: string[]): this;
|
|
23
|
+
corruptResponsesAfterN(urlPattern: string, strategy: CorruptionStrategy, n: number, methods?: string[]): this;
|
|
24
|
+
simulateCorsAfterN(urlPattern: string, n: number, methods?: string[]): this;
|
|
10
25
|
assaultUi(selector: string, action: 'disable' | 'hide' | 'remove', probability: number): this;
|
|
26
|
+
dropMessages(urlPattern: string, direction: WebSocketDirection, probability: number, counting?: RequestCountingOptions): this;
|
|
27
|
+
delayMessages(urlPattern: string, direction: WebSocketDirection, delayMs: number, probability: number, counting?: RequestCountingOptions): this;
|
|
28
|
+
corruptMessages(urlPattern: string, direction: WebSocketDirection, strategy: WebSocketCorruptionStrategy, probability: number, counting?: RequestCountingOptions): this;
|
|
29
|
+
closeConnection(urlPattern: string, probability: number, opts?: {
|
|
30
|
+
code?: number;
|
|
31
|
+
reason?: string;
|
|
32
|
+
afterMs?: number;
|
|
33
|
+
}, counting?: RequestCountingOptions): this;
|
|
34
|
+
dropMessagesOnNth(urlPattern: string, direction: WebSocketDirection, n: number): this;
|
|
35
|
+
delayMessagesOnNth(urlPattern: string, direction: WebSocketDirection, delayMs: number, n: number): this;
|
|
36
|
+
/** Set the PRNG seed for reproducible chaos. */
|
|
37
|
+
withSeed(seed: number): this;
|
|
11
38
|
build(): ChaosConfig;
|
|
12
39
|
}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -1,4 +1,17 @@
|
|
|
1
|
-
|
|
1
|
+
/** Counting options shared by all network chaos config types.
|
|
2
|
+
* At most one of `onNth`, `everyNth`, or `afterN` may be set on a single rule.
|
|
3
|
+
* Counting is per-rule and shared across fetch + XHR (only increments when a
|
|
4
|
+
* request matches `urlPattern` + `methods`).
|
|
5
|
+
* - `onNth` – apply chaos only on the Nth matching request (1-based). e.g. `onNth: 3` fires on the 3rd request only.
|
|
6
|
+
* - `everyNth` – apply chaos on every Nth matching request. e.g. `everyNth: 3` fires on the 3rd, 6th, 9th, …
|
|
7
|
+
* - `afterN` – apply chaos only after the first N matching requests have passed through. e.g. `afterN: 3` fires from the 4th request onward.
|
|
8
|
+
*/
|
|
9
|
+
export interface RequestCountingOptions {
|
|
10
|
+
onNth?: number;
|
|
11
|
+
everyNth?: number;
|
|
12
|
+
afterN?: number;
|
|
13
|
+
}
|
|
14
|
+
export interface NetworkFailureConfig extends RequestCountingOptions {
|
|
2
15
|
urlPattern: string;
|
|
3
16
|
methods?: string[];
|
|
4
17
|
statusCode: number;
|
|
@@ -7,26 +20,26 @@ export interface NetworkFailureConfig {
|
|
|
7
20
|
statusText?: string;
|
|
8
21
|
headers?: Record<string, string>;
|
|
9
22
|
}
|
|
10
|
-
export interface NetworkLatencyConfig {
|
|
23
|
+
export interface NetworkLatencyConfig extends RequestCountingOptions {
|
|
11
24
|
urlPattern: string;
|
|
12
25
|
methods?: string[];
|
|
13
26
|
delayMs: number;
|
|
14
27
|
probability: number;
|
|
15
28
|
}
|
|
16
|
-
export interface NetworkAbortConfig {
|
|
29
|
+
export interface NetworkAbortConfig extends RequestCountingOptions {
|
|
17
30
|
urlPattern: string;
|
|
18
31
|
methods?: string[];
|
|
19
32
|
probability: number;
|
|
20
33
|
timeout?: number;
|
|
21
34
|
}
|
|
22
35
|
export type CorruptionStrategy = 'truncate' | 'malformed-json' | 'empty' | 'wrong-type';
|
|
23
|
-
export interface NetworkCorruptionConfig {
|
|
36
|
+
export interface NetworkCorruptionConfig extends RequestCountingOptions {
|
|
24
37
|
urlPattern: string;
|
|
25
38
|
methods?: string[];
|
|
26
39
|
probability: number;
|
|
27
40
|
strategy: CorruptionStrategy;
|
|
28
41
|
}
|
|
29
|
-
export interface NetworkCorsConfig {
|
|
42
|
+
export interface NetworkCorsConfig extends RequestCountingOptions {
|
|
30
43
|
urlPattern: string;
|
|
31
44
|
methods?: string[];
|
|
32
45
|
probability: number;
|
|
@@ -46,7 +59,64 @@ export interface UiAssaultConfig {
|
|
|
46
59
|
export interface UiConfig {
|
|
47
60
|
assaults?: UiAssaultConfig[];
|
|
48
61
|
}
|
|
62
|
+
/** Direction of a WebSocket message relative to the client.
|
|
63
|
+
* - `outbound` = client → server (intercepted at `.send()`).
|
|
64
|
+
* - `inbound` = server → client (intercepted at `message` event dispatch).
|
|
65
|
+
* - `both` = apply independently in either direction.
|
|
66
|
+
*/
|
|
67
|
+
export type WebSocketDirection = 'inbound' | 'outbound' | 'both';
|
|
68
|
+
export interface WebSocketDropConfig extends RequestCountingOptions {
|
|
69
|
+
urlPattern: string;
|
|
70
|
+
direction: WebSocketDirection;
|
|
71
|
+
probability: number;
|
|
72
|
+
}
|
|
73
|
+
export interface WebSocketDelayConfig extends RequestCountingOptions {
|
|
74
|
+
urlPattern: string;
|
|
75
|
+
direction: WebSocketDirection;
|
|
76
|
+
delayMs: number;
|
|
77
|
+
probability: number;
|
|
78
|
+
}
|
|
79
|
+
/** Strategies for corrupting WebSocket payloads.
|
|
80
|
+
* `truncate` and `empty` apply to both text and binary payloads.
|
|
81
|
+
* `malformed-json` and `wrong-type` apply to text payloads only; when the
|
|
82
|
+
* actual payload at runtime is binary, corruption is skipped and an event is
|
|
83
|
+
* emitted with `applied: false`.
|
|
84
|
+
*/
|
|
85
|
+
export type WebSocketCorruptionStrategy = 'truncate' | 'malformed-json' | 'empty' | 'wrong-type';
|
|
86
|
+
export interface WebSocketCorruptConfig extends RequestCountingOptions {
|
|
87
|
+
urlPattern: string;
|
|
88
|
+
direction: WebSocketDirection;
|
|
89
|
+
strategy: WebSocketCorruptionStrategy;
|
|
90
|
+
probability: number;
|
|
91
|
+
}
|
|
92
|
+
export interface WebSocketCloseConfig extends RequestCountingOptions {
|
|
93
|
+
urlPattern: string;
|
|
94
|
+
/**
|
|
95
|
+
* WebSocket close code. Must be either `1000` (Normal Closure) or in the
|
|
96
|
+
* `3000–4999` range per the WebSocket spec; other values are rejected by
|
|
97
|
+
* the browser's `close()` call. Defaults to `1000`. Use `4000–4999` for
|
|
98
|
+
* application-defined chaos codes.
|
|
99
|
+
*/
|
|
100
|
+
code?: number;
|
|
101
|
+
/**
|
|
102
|
+
* WebSocket close reason string. Must encode to <= 123 UTF-8 bytes per the
|
|
103
|
+
* spec. Defaults to `"Chaos Maker close"`.
|
|
104
|
+
*/
|
|
105
|
+
reason?: string;
|
|
106
|
+
/** Delay after `open` before closing, in ms. Default 0 = close immediately. */
|
|
107
|
+
afterMs?: number;
|
|
108
|
+
probability: number;
|
|
109
|
+
}
|
|
110
|
+
export interface WebSocketConfig {
|
|
111
|
+
drops?: WebSocketDropConfig[];
|
|
112
|
+
delays?: WebSocketDelayConfig[];
|
|
113
|
+
corruptions?: WebSocketCorruptConfig[];
|
|
114
|
+
closes?: WebSocketCloseConfig[];
|
|
115
|
+
}
|
|
49
116
|
export interface ChaosConfig {
|
|
50
117
|
network?: NetworkConfig;
|
|
51
118
|
ui?: UiConfig;
|
|
119
|
+
websocket?: WebSocketConfig;
|
|
120
|
+
/** Seed for the PRNG. When provided, all probability rolls become deterministic and replayable. */
|
|
121
|
+
seed?: number;
|
|
52
122
|
}
|
package/dist/types/events.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export type ChaosEventType = 'network:failure' | 'network:latency' | 'network:abort' | 'network:corruption' | 'network:cors' | 'ui:assault';
|
|
1
|
+
export type ChaosEventType = 'network:failure' | 'network:latency' | 'network:abort' | 'network:corruption' | 'network:cors' | 'ui:assault' | 'websocket:drop' | 'websocket:delay' | 'websocket:corrupt' | 'websocket:close';
|
|
2
2
|
export interface ChaosEvent {
|
|
3
3
|
type: ChaosEventType;
|
|
4
4
|
timestamp: number;
|
|
@@ -12,6 +12,16 @@ export interface ChaosEvent {
|
|
|
12
12
|
strategy?: string;
|
|
13
13
|
selector?: string;
|
|
14
14
|
action?: string;
|
|
15
|
+
/** WebSocket message direction (for `websocket:*` events). */
|
|
16
|
+
direction?: 'inbound' | 'outbound';
|
|
17
|
+
/** WebSocket payload kind (for `websocket:*` events). */
|
|
18
|
+
payloadType?: 'text' | 'binary';
|
|
19
|
+
/** WebSocket close code (for `websocket:close` events). */
|
|
20
|
+
closeCode?: number;
|
|
21
|
+
/** WebSocket close reason (for `websocket:close` events). */
|
|
22
|
+
closeReason?: string;
|
|
23
|
+
/** Reason string for diagnostic `applied: false` events. */
|
|
24
|
+
reason?: string;
|
|
15
25
|
};
|
|
16
26
|
}
|
|
17
27
|
export type ChaosEventListener = (event: ChaosEvent) => void;
|
package/dist/types/index.d.ts
CHANGED
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { ChaosMaker } from './ChaosMaker';
|
|
2
|
-
import { ChaosConfig, CorruptionStrategy, NetworkFailureConfig, NetworkLatencyConfig, NetworkAbortConfig, NetworkCorruptionConfig, NetworkCorsConfig, NetworkConfig, UiAssaultConfig, UiConfig } from './config';
|
|
2
|
+
import { ChaosConfig, CorruptionStrategy, NetworkFailureConfig, NetworkLatencyConfig, NetworkAbortConfig, NetworkCorruptionConfig, NetworkCorsConfig, NetworkConfig, UiAssaultConfig, UiConfig, WebSocketConfig, WebSocketDropConfig, WebSocketDelayConfig, WebSocketCorruptConfig, WebSocketCloseConfig, WebSocketDirection, WebSocketCorruptionStrategy } from './config';
|
|
3
3
|
import { ChaosConfigError } from './errors';
|
|
4
4
|
import { validateConfig } from './validation';
|
|
5
5
|
import { ChaosEvent, ChaosEventType, ChaosEventListener, ChaosEventEmitter } from './events';
|
|
6
6
|
import { ChaosConfigBuilder } from './builder';
|
|
7
7
|
import { presets } from './presets';
|
|
8
|
-
|
|
9
|
-
export
|
|
8
|
+
import { createPrng, generateSeed } from './prng';
|
|
9
|
+
export { ChaosMaker, ChaosConfigError, validateConfig, ChaosEventEmitter, ChaosConfigBuilder, presets, createPrng, generateSeed };
|
|
10
|
+
export type { ChaosConfig, CorruptionStrategy, NetworkFailureConfig, NetworkLatencyConfig, NetworkAbortConfig, NetworkCorruptionConfig, NetworkCorsConfig, NetworkConfig, UiAssaultConfig, UiConfig, WebSocketConfig, WebSocketDropConfig, WebSocketDelayConfig, WebSocketCorruptConfig, WebSocketCloseConfig, WebSocketDirection, WebSocketCorruptionStrategy, ChaosEvent, ChaosEventType, ChaosEventListener };
|