@chaos-maker/core 0.1.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/LICENSE +0 -0
- package/README.md +176 -0
- package/dist/chaos-maker.cjs +4 -0
- package/dist/chaos-maker.js +3288 -0
- package/dist/chaos-maker.umd.js +4 -0
- package/dist/types/ChaosMaker.d.ts +18 -0
- package/dist/types/builder.d.ts +12 -0
- package/dist/types/config.d.ts +52 -0
- package/dist/types/errors.d.ts +4 -0
- package/dist/types/events.d.ts +29 -0
- package/dist/types/index.d.ts +9 -0
- package/dist/types/interceptors/domAssailant.d.ts +3 -0
- package/dist/types/interceptors/networkFetch.d.ts +3 -0
- package/dist/types/interceptors/networkXHR.d.ts +4 -0
- package/dist/types/presets.d.ts +2 -0
- package/dist/types/utils.d.ts +4 -0
- package/dist/types/validation.d.ts +2 -0
- package/package.json +63 -0
package/LICENSE
ADDED
|
Binary file
|
package/README.md
ADDED
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
# @chaos-maker/core
|
|
2
|
+
|
|
3
|
+
Core chaos engine for web applications. Intercepts `fetch`, `XMLHttpRequest`, and DOM mutations to inject controlled failures, latency, aborts, corruption, and UI disruptions.
|
|
4
|
+
|
|
5
|
+
Framework-agnostic. Works with Playwright, Cypress, Selenium, or any browser environment.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @chaos-maker/core
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Usage
|
|
14
|
+
|
|
15
|
+
### Programmatic (ESM/CJS)
|
|
16
|
+
|
|
17
|
+
```ts
|
|
18
|
+
import { ChaosMaker } from '@chaos-maker/core';
|
|
19
|
+
|
|
20
|
+
const chaos = new ChaosMaker({
|
|
21
|
+
network: {
|
|
22
|
+
failures: [{ urlPattern: '/api', statusCode: 503, probability: 0.5 }],
|
|
23
|
+
latencies: [{ urlPattern: '/api', delayMs: 2000, probability: 0.3 }]
|
|
24
|
+
}
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
chaos.start();
|
|
28
|
+
// All matching fetch/XHR calls are now intercepted
|
|
29
|
+
|
|
30
|
+
chaos.on('network:failure', (event) => {
|
|
31
|
+
console.log(`${event.detail.url} → ${event.applied ? 'failed' : 'passed'}`);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
chaos.stop(); // restores original fetch/XHR
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
### Browser (UMD)
|
|
38
|
+
|
|
39
|
+
```html
|
|
40
|
+
<script src="chaos-maker.umd.js"></script>
|
|
41
|
+
<script>
|
|
42
|
+
window.chaosUtils.start({
|
|
43
|
+
network: {
|
|
44
|
+
failures: [{ urlPattern: '/api', statusCode: 500, probability: 1.0 }]
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
</script>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Presets
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
import { ChaosMaker, presets } from '@chaos-maker/core';
|
|
54
|
+
|
|
55
|
+
// Available: unstableApi, slowNetwork, offlineMode, flakyConnection, degradedUi
|
|
56
|
+
const chaos = new ChaosMaker(presets.slowNetwork);
|
|
57
|
+
chaos.start();
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Config Builder
|
|
61
|
+
|
|
62
|
+
```ts
|
|
63
|
+
import { ChaosConfigBuilder } from '@chaos-maker/core';
|
|
64
|
+
|
|
65
|
+
const config = new ChaosConfigBuilder()
|
|
66
|
+
.failRequests('/api/checkout', 500, 0.5)
|
|
67
|
+
.addLatency('/api/', 2000, 0.3)
|
|
68
|
+
.abortRequests('/api/upload', 1.0, 5000)
|
|
69
|
+
.corruptResponses('/api/data', 'malformed-json', 0.2)
|
|
70
|
+
.simulateCors('/external-api/', 1.0)
|
|
71
|
+
.assaultUi('button.submit', 'disable', 0.1)
|
|
72
|
+
.build();
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Chaos Types
|
|
76
|
+
|
|
77
|
+
| Type | Config Key | Description |
|
|
78
|
+
|------|-----------|-------------|
|
|
79
|
+
| Failure | `network.failures` | Force HTTP error responses |
|
|
80
|
+
| Latency | `network.latencies` | Add delays to requests |
|
|
81
|
+
| Abort | `network.aborts` | Cancel requests (immediate or timed) |
|
|
82
|
+
| Corruption | `network.corruptions` | Corrupt response bodies |
|
|
83
|
+
| CORS | `network.cors` | Simulate CORS errors |
|
|
84
|
+
| UI Assault | `ui.assaults` | Disable, hide, or remove DOM elements |
|
|
85
|
+
|
|
86
|
+
## Configuration Reference
|
|
87
|
+
|
|
88
|
+
### NetworkFailureConfig
|
|
89
|
+
|
|
90
|
+
| Field | Type | Required | Description |
|
|
91
|
+
|-------|------|----------|-------------|
|
|
92
|
+
| `urlPattern` | `string` | Yes | Substring match against request URL |
|
|
93
|
+
| `statusCode` | `number` | Yes | HTTP status code (100-599) |
|
|
94
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
95
|
+
| `methods` | `string[]` | No | HTTP methods to match (default: all) |
|
|
96
|
+
| `body` | `string` | No | Custom response body |
|
|
97
|
+
| `statusText` | `string` | No | Custom status text |
|
|
98
|
+
| `headers` | `Record<string, string>` | No | Custom response headers |
|
|
99
|
+
|
|
100
|
+
### NetworkLatencyConfig
|
|
101
|
+
|
|
102
|
+
| Field | Type | Required | Description |
|
|
103
|
+
|-------|------|----------|-------------|
|
|
104
|
+
| `urlPattern` | `string` | Yes | Substring match against request URL |
|
|
105
|
+
| `delayMs` | `number` | Yes | Delay in milliseconds |
|
|
106
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
107
|
+
| `methods` | `string[]` | No | HTTP methods to match |
|
|
108
|
+
|
|
109
|
+
### NetworkAbortConfig
|
|
110
|
+
|
|
111
|
+
| Field | Type | Required | Description |
|
|
112
|
+
|-------|------|----------|-------------|
|
|
113
|
+
| `urlPattern` | `string` | Yes | Substring match against request URL |
|
|
114
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
115
|
+
| `timeout` | `number` | No | ms before abort (0 or omitted = immediate) |
|
|
116
|
+
| `methods` | `string[]` | No | HTTP methods to match |
|
|
117
|
+
|
|
118
|
+
### NetworkCorruptionConfig
|
|
119
|
+
|
|
120
|
+
| Field | Type | Required | Description |
|
|
121
|
+
|-------|------|----------|-------------|
|
|
122
|
+
| `urlPattern` | `string` | Yes | Substring match against request URL |
|
|
123
|
+
| `strategy` | `CorruptionStrategy` | Yes | `'truncate'` \| `'malformed-json'` \| `'empty'` \| `'wrong-type'` |
|
|
124
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
125
|
+
| `methods` | `string[]` | No | HTTP methods to match |
|
|
126
|
+
|
|
127
|
+
### NetworkCorsConfig
|
|
128
|
+
|
|
129
|
+
| Field | Type | Required | Description |
|
|
130
|
+
|-------|------|----------|-------------|
|
|
131
|
+
| `urlPattern` | `string` | Yes | Substring match against request URL |
|
|
132
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
133
|
+
| `methods` | `string[]` | No | HTTP methods to match |
|
|
134
|
+
|
|
135
|
+
### UiAssaultConfig
|
|
136
|
+
|
|
137
|
+
| Field | Type | Required | Description |
|
|
138
|
+
|-------|------|----------|-------------|
|
|
139
|
+
| `selector` | `string` | Yes | CSS selector |
|
|
140
|
+
| `action` | `string` | Yes | `'disable'` \| `'hide'` \| `'remove'` |
|
|
141
|
+
| `probability` | `number` | Yes | 0.0-1.0 chance of applying |
|
|
142
|
+
|
|
143
|
+
## Event System
|
|
144
|
+
|
|
145
|
+
```ts
|
|
146
|
+
chaos.on('network:failure', (event) => { /* ... */ });
|
|
147
|
+
chaos.on('*', (event) => { /* all events */ });
|
|
148
|
+
chaos.off('network:failure', listener);
|
|
149
|
+
|
|
150
|
+
const log = chaos.getLog(); // all events since start
|
|
151
|
+
chaos.clearLog();
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
Event types: `network:failure`, `network:latency`, `network:abort`, `network:corruption`, `network:cors`, `ui:assault`
|
|
155
|
+
|
|
156
|
+
## Config Validation
|
|
157
|
+
|
|
158
|
+
All configs are validated with Zod in strict mode. Unknown keys are rejected. Invalid values throw `ChaosConfigError` with descriptive messages.
|
|
159
|
+
|
|
160
|
+
```ts
|
|
161
|
+
import { validateConfig, ChaosConfigError } from '@chaos-maker/core';
|
|
162
|
+
|
|
163
|
+
try {
|
|
164
|
+
validateConfig({ network: { failures: [{ urlPattern: '', statusCode: 999 }] } });
|
|
165
|
+
} catch (e) {
|
|
166
|
+
if (e instanceof ChaosConfigError) {
|
|
167
|
+
console.log(e.issues);
|
|
168
|
+
// ['network.failures.0.urlPattern: urlPattern must not be empty',
|
|
169
|
+
// 'network.failures.0.statusCode: Number must be less than or equal to 599']
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## License
|
|
175
|
+
|
|
176
|
+
[MIT](../../LICENSE)
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
"use strict";var Ge=Object.defineProperty;var Je=(s,e,t)=>e in s?Ge(s,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):s[e]=t;var E=(s,e,t)=>Je(s,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});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 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})(b||(b={}));var be;(function(s){s.mergeShapes=(e,t)=>({...e,...t})})(be||(be={}));const h=b.arrayToEnum(["string","nan","number","integer","float","boolean","date","bigint","symbol","function","undefined","null","array","object","unknown","promise","void","never","map","set"]),V=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}},c=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 P 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 P))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()}}P.create=s=>new P(s);const le=(s,e)=>{let t;switch(s.code){case c.invalid_type:s.received===h.undefined?t="Required":t=`Expected ${s.expected}, received ${s.received}`;break;case c.invalid_literal:t=`Invalid literal value, expected ${JSON.stringify(s.expected,b.jsonStringifyReplacer)}`;break;case c.unrecognized_keys:t=`Unrecognized key(s) in object: ${b.joinValues(s.keys,", ")}`;break;case c.invalid_union:t="Invalid input";break;case c.invalid_union_discriminator:t=`Invalid discriminator value. Expected ${b.joinValues(s.options)}`;break;case c.invalid_enum_value:t=`Invalid enum value. Expected ${b.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}"`:b.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,b.assertNever(s)}return{message:t}};let Ye=le;function Qe(){return Ye}const Ke=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=Qe(),r=Ke({issueData:e,data:s.data,path:s.path,errorMaps:[s.common.contextualErrorMap,s.schemaErrorMap,t,t===le?void 0:le].filter(n=>!!n)});s.common.issues.push(r)}class O{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 O.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"}),Y=s=>({status:"dirty",value:s}),N=s=>({status:"valid",value:s}),ke=s=>s.status==="aborted",xe=s=>s.status==="dirty",B=s=>s.status==="valid",re=s=>typeof Promise<"u"&&s instanceof Promise;var f;(function(s){s.errToObj=e=>typeof e=="string"?{message:e}:e||{},s.toString=e=>typeof e=="string"?e:e==null?void 0:e.message})(f||(f={}));class I{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 we=(s,e)=>{if(B(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 P(s.common.issues);return this._error=t,this._error}}};function v(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 _{get description(){return this._def.description}_getType(e){return V(e.data)}_getOrReturnCtx(e,t){return t||{common:e.parent.common,data:e.data,parsedType:V(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}_processInputParams(e){return{status:new O,ctx:{common:e.parent.common,data:e.data,parsedType:V(e.data),schemaErrorMap:this._def.errorMap,path:e.path,parent:e.parent}}}_parseSync(e){const t=this._parse(e);if(re(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:V(e)},n=this._parseSync({data:e,path:r.path,parent:r});return we(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:V(e)};if(!this["~standard"].async)try{const a=this._parseSync({data:e,path:[],parent:t});return B(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=>B(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:V(e)},n=this._parse({data:e,path:r.path,parent:r}),a=await(re(n)?n:Promise.resolve(n));return we(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 X({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 z.create(this,this._def)}nullable(){return G.create(this,this._def)}nullish(){return this.nullable().optional()}array(){return $.create(this)}promise(){return ce.create(this,this._def)}or(e){return ae.create([this,e],this._def)}and(e){return ie.create(this,e,this._def)}transform(e){return new X({...v(this._def),schema:this,typeName:y.ZodEffects,effect:{type:"transform",transform:e}})}default(e){const t=typeof e=="function"?e:()=>e;return new fe({...v(this._def),innerType:this,defaultValue:t,typeName:y.ZodDefault})}brand(){return new xt({typeName:y.ZodBranded,type:this,...v(this._def)})}catch(e){const t=typeof e=="function"?e:()=>e;return new pe({...v(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 ve.create(this,e)}readonly(){return me.create(this)}isOptional(){return this.safeParse(void 0).success}isNullable(){return this.safeParse(null).success}}const et=/^c[^\s-]{8,}$/i,tt=/^[0-9a-z]+$/,st=/^[0-9A-HJKMNP-TV-Z]{26}$/i,rt=/^[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,nt=/^[a-z0-9_-]{21}$/i,at=/^[A-Za-z0-9-_]+\.[A-Za-z0-9-_]+\.[A-Za-z0-9-_]*$/,it=/^[-+]?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)?)??$/,ot=/^(?!\.)(?!.*\.\.)([A-Z0-9_'+\-\.]*)[A-Z0-9_+-]@([A-Z0-9][A-Z0-9\-]*\.)+[A-Z]{2,}$/i,ct="^(\\p{Extended_Pictographic}|\\p{Emoji_Component})+$";let ue;const 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])$/,ut=/^(?:(?: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])$/,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]))$/,ht=/^(([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}=))?$/,pt=/^([0-9a-zA-Z-_]{4})*(([0-9a-zA-Z-_]{2}(==)?)|([0-9a-zA-Z-_]{3}(=)?))?$/,Ve="((\\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])))",mt=new RegExp(`^${Ve}$`);function ze(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 yt(s){return new RegExp(`^${ze(s)}$`)}function gt(s){let e=`${Ve}T${ze(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)&&dt.test(s)||(e==="v6"||!e)&<.test(s))}function _t(s,e){if(!at.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 bt(s,e){return!!((e==="v4"||!e)&&ut.test(s)||(e==="v6"||!e)&&ht.test(s))}class L extends _{_parse(e){if(this._def.coerce&&(e.data=String(e.data)),this._getType(e)!==h.string){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_type,expected:h.string,received:a.parsedType}),g}const r=new O;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")ot.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")ue||(ue=new RegExp(ct,"u")),ue.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")rt.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")nt.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")et.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")tt.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")st.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"?gt(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"?mt.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{code:c.invalid_string,validation:"date",message:a.message}),r.dirty()):a.kind==="time"?yt(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"?it.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"duration",code:c.invalid_string,message:a.message}),r.dirty()):a.kind==="ip"?vt(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"?_t(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"?bt(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"?pt.test(e.data)||(n=this._getOrReturnCtx(e,n),u(n,{validation:"base64url",code:c.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:c.invalid_string,...f.errToObj(r)})}_addCheck(e){return new L({...this._def,checks:[...this._def.checks,e]})}email(e){return this._addCheck({kind:"email",...f.errToObj(e)})}url(e){return this._addCheck({kind:"url",...f.errToObj(e)})}emoji(e){return this._addCheck({kind:"emoji",...f.errToObj(e)})}uuid(e){return this._addCheck({kind:"uuid",...f.errToObj(e)})}nanoid(e){return this._addCheck({kind:"nanoid",...f.errToObj(e)})}cuid(e){return this._addCheck({kind:"cuid",...f.errToObj(e)})}cuid2(e){return this._addCheck({kind:"cuid2",...f.errToObj(e)})}ulid(e){return this._addCheck({kind:"ulid",...f.errToObj(e)})}base64(e){return this._addCheck({kind:"base64",...f.errToObj(e)})}base64url(e){return this._addCheck({kind:"base64url",...f.errToObj(e)})}jwt(e){return this._addCheck({kind:"jwt",...f.errToObj(e)})}ip(e){return this._addCheck({kind:"ip",...f.errToObj(e)})}cidr(e){return this._addCheck({kind:"cidr",...f.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,...f.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,...f.errToObj(e==null?void 0:e.message)})}duration(e){return this._addCheck({kind:"duration",...f.errToObj(e)})}regex(e,t){return this._addCheck({kind:"regex",regex:e,...f.errToObj(t)})}includes(e,t){return this._addCheck({kind:"includes",value:e,position:t==null?void 0:t.position,...f.errToObj(t==null?void 0:t.message)})}startsWith(e,t){return this._addCheck({kind:"startsWith",value:e,...f.errToObj(t)})}endsWith(e,t){return this._addCheck({kind:"endsWith",value:e,...f.errToObj(t)})}min(e,t){return this._addCheck({kind:"min",value:e,...f.errToObj(t)})}max(e,t){return this._addCheck({kind:"max",value:e,...f.errToObj(t)})}length(e,t){return this._addCheck({kind:"length",value:e,...f.errToObj(t)})}nonempty(e){return this.min(1,f.errToObj(e))}trim(){return new L({...this._def,checks:[...this._def.checks,{kind:"trim"}]})}toLowerCase(){return new L({...this._def,checks:[...this._def.checks,{kind:"toLowerCase"}]})}toUpperCase(){return new L({...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}}L.create=s=>new L({checks:[],typeName:y.ZodString,coerce:(s==null?void 0:s.coerce)??!1,...v(s)});function kt(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 H extends _{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 u(a,{code:c.invalid_type,expected:h.number,received:a.parsedType}),g}let r;const n=new O;for(const a of this._def.checks)a.kind==="int"?b.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"?kt(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()):b.assertNever(a);return{status:n.value,value:e.data}}gte(e,t){return this.setLimit("min",e,!0,f.toString(t))}gt(e,t){return this.setLimit("min",e,!1,f.toString(t))}lte(e,t){return this.setLimit("max",e,!0,f.toString(t))}lt(e,t){return this.setLimit("max",e,!1,f.toString(t))}setLimit(e,t,r,n){return new H({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:f.toString(n)}]})}_addCheck(e){return new H({...this._def,checks:[...this._def.checks,e]})}int(e){return this._addCheck({kind:"int",message:f.toString(e)})}positive(e){return this._addCheck({kind:"min",value:0,inclusive:!1,message:f.toString(e)})}negative(e){return this._addCheck({kind:"max",value:0,inclusive:!1,message:f.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:0,inclusive:!0,message:f.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:0,inclusive:!0,message:f.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:f.toString(t)})}finite(e){return this._addCheck({kind:"finite",message:f.toString(e)})}safe(e){return this._addCheck({kind:"min",inclusive:!0,value:Number.MIN_SAFE_INTEGER,message:f.toString(e)})._addCheck({kind:"max",inclusive:!0,value:Number.MAX_SAFE_INTEGER,message:f.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)}}H.create=s=>new H({checks:[],typeName:y.ZodNumber,coerce:(s==null?void 0:s.coerce)||!1,...v(s)});class Q extends _{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 O;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()):b.assertNever(a);return{status:n.value,value:e.data}}_getInvalidInput(e){const t=this._getOrReturnCtx(e);return u(t,{code:c.invalid_type,expected:h.bigint,received:t.parsedType}),g}gte(e,t){return this.setLimit("min",e,!0,f.toString(t))}gt(e,t){return this.setLimit("min",e,!1,f.toString(t))}lte(e,t){return this.setLimit("max",e,!0,f.toString(t))}lt(e,t){return this.setLimit("max",e,!1,f.toString(t))}setLimit(e,t,r,n){return new Q({...this._def,checks:[...this._def.checks,{kind:e,value:t,inclusive:r,message:f.toString(n)}]})}_addCheck(e){return new Q({...this._def,checks:[...this._def.checks,e]})}positive(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!1,message:f.toString(e)})}negative(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!1,message:f.toString(e)})}nonpositive(e){return this._addCheck({kind:"max",value:BigInt(0),inclusive:!0,message:f.toString(e)})}nonnegative(e){return this._addCheck({kind:"min",value:BigInt(0),inclusive:!0,message:f.toString(e)})}multipleOf(e,t){return this._addCheck({kind:"multipleOf",value:e,message:f.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}}Q.create=s=>new Q({checks:[],typeName:y.ZodBigInt,coerce:(s==null?void 0:s.coerce)??!1,...v(s)});class Ce extends _{_parse(e){if(this._def.coerce&&(e.data=!!e.data),this._getType(e)!==h.boolean){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.boolean,received:r.parsedType}),g}return N(e.data)}}Ce.create=s=>new Ce({typeName:y.ZodBoolean,coerce:(s==null?void 0:s.coerce)||!1,...v(s)});class ne extends _{_parse(e){if(this._def.coerce&&(e.data=new Date(e.data)),this._getType(e)!==h.date){const a=this._getOrReturnCtx(e);return u(a,{code:c.invalid_type,expected:h.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 O;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()):b.assertNever(a);return{status:r.value,value:new Date(e.data.getTime())}}_addCheck(e){return new ne({...this._def,checks:[...this._def.checks,e]})}min(e,t){return this._addCheck({kind:"min",value:e.getTime(),message:f.toString(t)})}max(e,t){return this._addCheck({kind:"max",value:e.getTime(),message:f.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}}ne.create=s=>new ne({checks:[],coerce:(s==null?void 0:s.coerce)||!1,typeName:y.ZodDate,...v(s)});class Te extends _{_parse(e){if(this._getType(e)!==h.symbol){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.symbol,received:r.parsedType}),g}return N(e.data)}}Te.create=s=>new Te({typeName:y.ZodSymbol,...v(s)});class Oe extends _{_parse(e){if(this._getType(e)!==h.undefined){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.undefined,received:r.parsedType}),g}return N(e.data)}}Oe.create=s=>new Oe({typeName:y.ZodUndefined,...v(s)});class Se extends _{_parse(e){if(this._getType(e)!==h.null){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.null,received:r.parsedType}),g}return N(e.data)}}Se.create=s=>new Se({typeName:y.ZodNull,...v(s)});class Ae extends _{constructor(){super(...arguments),this._any=!0}_parse(e){return N(e.data)}}Ae.create=s=>new Ae({typeName:y.ZodAny,...v(s)});class Ee extends _{constructor(){super(...arguments),this._unknown=!0}_parse(e){return N(e.data)}}Ee.create=s=>new Ee({typeName:y.ZodUnknown,...v(s)});class U extends _{_parse(e){const t=this._getOrReturnCtx(e);return u(t,{code:c.invalid_type,expected:h.never,received:t.parsedType}),g}}U.create=s=>new U({typeName:y.ZodNever,...v(s)});class Ne extends _{_parse(e){if(this._getType(e)!==h.undefined){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.void,received:r.parsedType}),g}return N(e.data)}}Ne.create=s=>new Ne({typeName:y.ZodVoid,...v(s)});class $ extends _{_parse(e){const{ctx:t,status:r}=this._processInputParams(e),n=this._def;if(t.parsedType!==h.array)return u(t,{code:c.invalid_type,expected:h.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 I(t,o,t.path,i)))).then(o=>O.mergeArray(r,o));const a=[...t.data].map((o,i)=>n.type._parseSync(new I(t,o,t.path,i)));return O.mergeArray(r,a)}get element(){return this._def.type}min(e,t){return new $({...this._def,minLength:{value:e,message:f.toString(t)}})}max(e,t){return new $({...this._def,maxLength:{value:e,message:f.toString(t)}})}length(e,t){return new $({...this._def,exactLength:{value:e,message:f.toString(t)}})}nonempty(e){return this.min(1,e)}}$.create=(s,e)=>new $({type:s,minLength:null,maxLength:null,exactLength:null,typeName:y.ZodArray,...v(e)});function q(s){if(s instanceof k){const e={};for(const t in s.shape){const r=s.shape[t];e[t]=z.create(q(r))}return new k({...s._def,shape:()=>e})}else return s instanceof $?new $({...s._def,type:q(s.element)}):s instanceof z?z.create(q(s.unwrap())):s instanceof G?G.create(q(s.unwrap())):s instanceof F?F.create(s.items.map(e=>q(e))):s}class k extends _{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 l=this._getOrReturnCtx(e);return u(l,{code:c.invalid_type,expected:h.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 I(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 I(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=>O.mergeObjectSync(r,l)):O.mergeObjectSync(r,d)}get shape(){return this._def.shape()}strict(e){return f.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:f.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 b.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 b.objectKeys(this.shape))e[r]||(t[r]=this.shape[r]);return new k({...this._def,shape:()=>t})}deepPartial(){return q(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 k({...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 z;)a=a._def.innerType;t[r]=a}return new k({...this._def,shape:()=>t})}keyof(){return Ue(b.objectKeys(this.shape))}}k.create=(s,e)=>new k({shape:()=>s,unknownKeys:"strip",catchall:U.create(),typeName:y.ZodObject,...v(e)});k.strictCreate=(s,e)=>new k({shape:()=>s,unknownKeys:"strict",catchall:U.create(),typeName:y.ZodObject,...v(e)});k.lazycreate=(s,e)=>new k({shape:s,unknownKeys:"strip",catchall:U.create(),typeName:y.ZodObject,...v(e)});class ae extends _{_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 P(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 P(d));return u(t,{code:c.invalid_union,unionErrors:i}),g}}get options(){return this._def.options}}ae.create=(s,e)=>new ae({options:s,typeName:y.ZodUnion,...v(e)});function he(s,e){const t=V(s),r=V(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(i=>n.indexOf(i)!==-1),o={...s,...e};for(const i of a){const d=he(s[i],e[i]);if(!d.valid)return{valid:!1};o[i]=d.data}return{valid:!0,data:o}}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 o=s[a],i=e[a],d=he(o,i);if(!d.valid)return{valid:!1};n.push(d.data)}return{valid:!0,data:n}}else return t===h.date&&r===h.date&&+s==+e?{valid:!0,data:s}:{valid:!1}}class ie extends _{_parse(e){const{status:t,ctx:r}=this._processInputParams(e),n=(a,o)=>{if(ke(a)||ke(o))return g;const i=he(a.value,o.value);return i.valid?((xe(a)||xe(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}))}}ie.create=(s,e,t)=>new ie({left:s,right:e,typeName:y.ZodIntersection,...v(t)});class F extends _{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.array)return u(r,{code:c.invalid_type,expected:h.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 I(r,o,r.path,i)):null}).filter(o=>!!o);return r.common.async?Promise.all(a).then(o=>O.mergeArray(t,o)):O.mergeArray(t,a)}get items(){return this._def.items}rest(e){return new F({...this._def,rest:e})}}F.create=(s,e)=>{if(!Array.isArray(s))throw new Error("You must pass an array of schemas to z.tuple([ ... ])");return new F({items:s,typeName:y.ZodTuple,rest:null,...v(e)})};class oe extends _{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 u(r,{code:c.invalid_type,expected:h.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 I(r,i,r.path,i)),value:o._parse(new I(r,r.data[i],r.path,i)),alwaysSet:i in r.data});return r.common.async?O.mergeObjectAsync(t,n):O.mergeObjectSync(t,n)}get element(){return this._def.valueType}static create(e,t,r){return t instanceof _?new oe({keyType:e,valueType:t,typeName:y.ZodRecord,...v(r)}):new oe({keyType:L.create(),valueType:e,typeName:y.ZodRecord,...v(t)})}}class Re extends _{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 u(r,{code:c.invalid_type,expected:h.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 I(r,i,r.path,[l,"key"])),value:a._parse(new I(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}}}}Re.create=(s,e,t)=>new Re({valueType:e,keyType:s,typeName:y.ZodMap,...v(t)});class K extends _{_parse(e){const{status:t,ctx:r}=this._processInputParams(e);if(r.parsedType!==h.set)return u(r,{code:c.invalid_type,expected:h.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 I(r,d,r.path,l)));return r.common.async?Promise.all(i).then(d=>o(d)):o(i)}min(e,t){return new K({...this._def,minSize:{value:e,message:f.toString(t)}})}max(e,t){return new K({...this._def,maxSize:{value:e,message:f.toString(t)}})}size(e,t){return this.min(e,t).max(e,t)}nonempty(e){return this.min(1,e)}}K.create=(s,e)=>new K({valueType:s,minSize:null,maxSize:null,typeName:y.ZodSet,...v(e)});class Ze extends _{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})}}Ze.create=(s,e)=>new Ze({getter:s,typeName:y.ZodLazy,...v(e)});class je extends _{_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}}je.create=(s,e)=>new je({value:s,typeName:y.ZodLiteral,...v(e)});function Ue(s,e){return new W({values:s,typeName:y.ZodEnum,...v(e)})}class W extends _{_parse(e){if(typeof e.data!="string"){const t=this._getOrReturnCtx(e),r=this._def.values;return u(t,{expected:b.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 N(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 W.create(e,{...this._def,...t})}exclude(e,t=this._def){return W.create(this.options.filter(r=>!e.includes(r)),{...this._def,...t})}}W.create=Ue;class $e extends _{_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 u(r,{expected:b.joinValues(n),received:r.parsedType,code:c.invalid_type}),g}if(this._cache||(this._cache=new Set(b.getValidEnumValues(this._def.values))),!this._cache.has(e.data)){const n=b.objectValues(t);return u(r,{received:r.data,code:c.invalid_enum_value,options:n}),g}return N(e.data)}get enum(){return this._def.values}}$e.create=(s,e)=>new $e({values:s,typeName:y.ZodNativeEnum,...v(e)});class ce extends _{unwrap(){return this._def.type}_parse(e){const{ctx:t}=this._processInputParams(e);if(t.parsedType!==h.promise&&t.common.async===!1)return u(t,{code:c.invalid_type,expected:h.promise,received:t.parsedType}),g;const r=t.parsedType===h.promise?t.data:Promise.resolve(t.data);return N(r.then(n=>this._def.type.parseAsync(n,{path:t.path,errorMap:t.common.contextualErrorMap})))}}ce.create=(s,e)=>new ce({type:s,typeName:y.ZodPromise,...v(e)});class X extends _{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"?Y(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"?Y(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(!B(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=>B(o)?Promise.resolve(n.transform(o.value,a)).then(i=>({status:t.value,value:i})):g);b.assertNever(n)}}X.create=(s,e,t)=>new X({schema:s,typeName:y.ZodEffects,effect:e,...v(t)});X.createWithPreprocess=(s,e,t)=>new X({schema:e,effect:{type:"preprocess",transform:s},typeName:y.ZodEffects,...v(t)});class z extends _{_parse(e){return this._getType(e)===h.undefined?N(void 0):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}z.create=(s,e)=>new z({innerType:s,typeName:y.ZodOptional,...v(e)});class G extends _{_parse(e){return this._getType(e)===h.null?N(null):this._def.innerType._parse(e)}unwrap(){return this._def.innerType}}G.create=(s,e)=>new G({innerType:s,typeName:y.ZodNullable,...v(e)});class fe extends _{_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}}fe.create=(s,e)=>new fe({innerType:s,typeName:y.ZodDefault,defaultValue:typeof e.default=="function"?e.default:()=>e.default,...v(e)});class pe extends _{_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 re(n)?n.then(a=>({status:"valid",value:a.status==="valid"?a.value:this._def.catchValue({get error(){return new P(r.common.issues)},input:r.data})})):{status:"valid",value:n.status==="valid"?n.value:this._def.catchValue({get error(){return new P(r.common.issues)},input:r.data})}}removeCatch(){return this._def.innerType}}pe.create=(s,e)=>new pe({innerType:s,typeName:y.ZodCatch,catchValue:typeof e.catch=="function"?e.catch:()=>e.catch,...v(e)});class Ie extends _{_parse(e){if(this._getType(e)!==h.nan){const r=this._getOrReturnCtx(e);return u(r,{code:c.invalid_type,expected:h.nan,received:r.parsedType}),g}return{status:"valid",value:e.data}}}Ie.create=s=>new Ie({typeName:y.ZodNaN,...v(s)});class xt extends _{_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 ve extends _{_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(),Y(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 ve({in:e,out:t,typeName:y.ZodPipeline})}}class me extends _{_parse(e){const t=this._def.innerType._parse(e),r=n=>(B(n)&&(n.value=Object.freeze(n.value)),n);return re(t)?t.then(n=>r(n)):r(t)}unwrap(){return this._def.innerType}}me.create=(s,e)=>new me({innerType:s,typeName:y.ZodReadonly,...v(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 S=L.create,de=H.create;U.create;const R=$.create,D=k.create;ae.create;ie.create;F.create;const wt=oe.create,Fe=W.create;ce.create;z.create;G.create;class qe extends Error{constructor(t){const r=`Invalid ChaosConfig:
|
|
2
|
+
${t.map(n=>` - ${n}`).join(`
|
|
3
|
+
`)}`;super(r);E(this,"issues");this.name="ChaosConfigError",this.issues=t}}const J=de().min(0,"Probability must be >= 0").max(1,"Probability must be <= 1"),Ct=D({urlPattern:S().min(1,"urlPattern must not be empty"),methods:R(S()).optional(),statusCode:de().int().min(100).max(599),probability:J,body:S().optional(),statusText:S().optional(),headers:wt(S()).optional()}).strict(),Tt=D({urlPattern:S().min(1,"urlPattern must not be empty"),methods:R(S()).optional(),delayMs:de().min(0,"delayMs must be >= 0"),probability:J}).strict(),Ot=D({urlPattern:S().min(1,"urlPattern must not be empty"),methods:R(S()).optional(),probability:J,timeout:de().min(0,"timeout must be >= 0").optional()}).strict(),St=D({urlPattern:S().min(1,"urlPattern must not be empty"),methods:R(S()).optional(),probability:J,strategy:Fe(["truncate","malformed-json","empty","wrong-type"])}).strict(),At=D({urlPattern:S().min(1,"urlPattern must not be empty"),methods:R(S()).optional(),probability:J}).strict(),Et=D({failures:R(Ct).optional(),latencies:R(Tt).optional(),aborts:R(Ot).optional(),corruptions:R(St).optional(),cors:R(At).optional()}).strict(),Nt=D({selector:S().min(1,"selector must not be empty"),action:Fe(["disable","hide","remove"]),probability:J}).strict(),Rt=D({assaults:R(Nt).optional()}).strict(),Zt=D({network:Et.optional(),ui:Rt.optional()}).strict();function Be(s){const e=Zt.safeParse(s);if(!e.success){const t=e.error.issues.map(r=>`${r.path.join(".")}: ${r.message}`);throw new qe(t)}return e.data}class He{constructor(e=2e3){E(this,"listeners",new Map);E(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 Z(s){return Math.random()<s}function j(s,e){return e==="*"?!0:s.includes(e)}function We(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 jt(s){return _e(s)?s.url:s.toString()}function $t(s,e){return e!=null&&e.method?e.method.toUpperCase():_e(s)?s.method.toUpperCase():"GET"}function It(s,e){if(e!=null&&e.signal)return e.signal;if(_e(s))return s.signal}function Mt(){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 Lt(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 Pt(s,e){return e?{...s??{},signal:e}:s}function Me(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 te(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 async(r,n)=>{const a=jt(r),o=$t(r,n),i=It(r,n);if(e.cors){for(const p of e.cors)if(j(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const A=Z(p.probability);if(t==null||t.emit({type:"network:cors",timestamp:Date.now(),applied:A,detail:{url:a,method:o}}),A){console.debug(`[chaos-maker] CORS block: ${o} ${a}`);const M=new TypeError("Failed to fetch");throw M.stack="",M}}}let d=null,l,m,w=!1;const x=p=>{!d||w||(w=!0,m&&(clearTimeout(m),m=void 0),Me(t,d,a,o,p))};if(e.aborts){for(const p of e.aborts)if(j(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){if(!Z(p.probability)){Me(t,p,a,o,!1);continue}console.warn(`CHAOS: Aborting ${o} ${a} after ${p.timeout||0}ms`),d=p;const M=new AbortController;l=Lt(M.signal,i);const ee=()=>{w||(x(!0),M.abort(Mt()))};p.timeout?m=setTimeout(ee,p.timeout):ee();break}}if(d)try{const p=await s(r,Pt(n,l));return x(!1),p}catch(p){throw x(!1),p}if(e.failures){for(const p of e.failures)if(j(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const A=Z(p.probability);if(t==null||t.emit({type:"network:failure",timestamp:Date.now(),applied:A,detail:{url:a,method:o,statusCode:p.statusCode}}),A){console.warn(`CHAOS: Forcing ${p.statusCode} for ${o} ${a}`);const M=p.body??JSON.stringify({error:"Chaos Maker Attack!"}),ee=p.headers??{};return new Response(M,{status:p.statusCode,statusText:p.statusText??"Service Unavailable (Chaos)",headers:ee})}}}if(e.latencies){for(const p of e.latencies)if(j(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){const A=Z(p.probability);t==null||t.emit({type:"network:latency",timestamp:Date.now(),applied:A,detail:{url:a,method:o,delayMs:p.delayMs}}),A&&(console.warn(`CHAOS: Adding ${p.delayMs}ms latency to ${o} ${a}`),await new Promise(M=>setTimeout(M,p.delayMs)))}}let T=null;if(e.corruptions){for(const p of e.corruptions)if(j(a,p.urlPattern)&&(!p.methods||p.methods.includes(o))){if(!Z(p.probability)){te(t,p,a,o,!1);continue}T=p;break}}let C;try{C=await s(r,n)}catch(p){throw T&&te(t,T,a,o,!1),p}if(!T)return C;try{console.warn(`CHAOS: Corrupting response for ${o} ${a} with strategy: ${T.strategy}`);const p=await C.text(),A=We(p,T.strategy);return te(t,T,a,o,!0),new Response(A,{status:C.status,statusText:C.statusText,headers:C.headers})}catch(p){throw te(t,T,a,o,!1),p}}}function Le(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 Pe(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 Vt(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(j(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=Z(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(j(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){if(!Z(i.probability)){Le(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",T)},x=p=>{l||(l=!0,w(),Le(t,i,n,a,p))},T=()=>{x(!1)},C=()=>{l||(x(!0),this.abort())};typeof this.addEventListener=="function"&&this.addEventListener("loadend",T);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(j(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=Z(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(T=>T.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(j(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){if(!Z(i.probability)){Pe(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",T))},m=C=>{i||(i=!0,Pe(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=We(C,o.strategy),Object.defineProperty(this,"responseText",{value:d,configurable:!0}),m(!0),d)}catch(C){throw m(!1),C}},x=()=>{m(!1)},T=()=>{if(!i)try{w()}catch{}};typeof this.addEventListener=="function"&&(this.addEventListener("error",x),this.addEventListener("abort",x),this.addEventListener("loadend",T)),Object.defineProperty(this,"responseText",{get(){return w()},configurable:!0})}if(e.latencies){for(const i of e.latencies)if(j(n,i.urlPattern)&&(!i.methods||i.methods.includes(a))){const d=Z(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 zt(s){return function(e,t){this._chaos_url=t.toString(),this._chaos_method=e.toUpperCase(),s.call(this,e,t)}}function ye(s,e,t){const r=Z(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 Ut(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)&&ye(r,n,t)}catch(a){console.error(`Chaos Maker: Invalid selector '${n.selector}'`,a)}r.querySelectorAll(n.selector).forEach(a=>{ye(a,n,t)})}}function Ft(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=>{ye(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=>Ut(a,s,e))})}class ge{constructor(e){E(this,"config");E(this,"emitter");E(this,"running",!1);E(this,"originalFetch");E(this,"originalXhrSend");E(this,"originalXhrOpen");E(this,"domObserver");this.config=Be(e),this.emitter=new He,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=Dt(this.originalFetch.bind(window),this.config.network,this.emitter),this.originalXhrOpen=window.XMLHttpRequest.prototype.open,window.XMLHttpRequest.prototype.open=zt(this.originalXhrOpen),this.originalXhrSend=window.XMLHttpRequest.prototype.send,window.XMLHttpRequest.prototype.send=Vt(this.originalXhrSend,this.config.network,this.emitter)),this.config.ui&&(this.domObserver=Ft(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 De(s){return JSON.parse(JSON.stringify(s))}class qt{constructor(e){E(this,"config");this.config=e?De(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 De(this.config)}}const se="*";function Xe(s){if(s&&typeof s=="object"&&!Object.isFrozen(s)){Object.freeze(s);for(const e of Object.values(s))Xe(e)}return s}const Bt=Xe({unstableApi:{network:{failures:[{urlPattern:"/api/",statusCode:500,probability:.1}],latencies:[{urlPattern:"/api/",delayMs:1e3,probability:.2}]}},slowNetwork:{network:{latencies:[{urlPattern:se,delayMs:2e3,probability:1}]}},offlineMode:{network:{cors:[{urlPattern:se,probability:1}]}},flakyConnection:{network:{aborts:[{urlPattern:se,probability:.05}],latencies:[{urlPattern:se,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=ge;const s={instance:null,start:e=>{try{return s.instance&&s.instance.stop(),s.instance=new ge(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)}}exports.ChaosConfigBuilder=qt;exports.ChaosConfigError=qe;exports.ChaosEventEmitter=He;exports.ChaosMaker=ge;exports.presets=Bt;exports.validateConfig=Be;
|