schema-shield 1.0.4 → 1.0.5

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/README.md CHANGED
@@ -238,6 +238,92 @@ SchemaShield is designed to run seamlessly in restrictive environments like **Cl
238
238
  - **CSP Compliant:** Works in environments where `eval()` and `new Function()` are banned for security.
239
239
  - **Instant Startup:** No compilation overhead, minimizing "cold start" latency in Serverless functions.
240
240
 
241
+ ### Serverless Example
242
+
243
+ ```javascript
244
+ // Compile at module level - runs once at cold start
245
+ const validateRequest = new SchemaShield().compile({
246
+ type: "object",
247
+ properties: {
248
+ name: { type: "string" },
249
+ email: { type: "string", format: "email" }
250
+ },
251
+ required: ["name", "email"]
252
+ });
253
+
254
+ // Vercel Edge / Cloudflare Worker handler
255
+ export default function handler(request) {
256
+ const result = validateRequest(request.body);
257
+
258
+ if (!result.valid) {
259
+ return new Response(JSON.stringify({ error: result.error.message }), {
260
+ status: 400,
261
+ headers: { "Content-Type": "application/json" }
262
+ });
263
+ }
264
+
265
+ return new Response(JSON.stringify(result.data), { status: 200 });
266
+ }
267
+ ```
268
+
269
+ ### Sharing Compiled Validators
270
+
271
+ Compiled validators are safe to share across requests:
272
+
273
+ ```javascript
274
+ // Compile once at startup
275
+ const validateUser = new SchemaShield().compile(userSchema);
276
+
277
+ // Reuse across requests - no mutable state
278
+ app.get("/user/:id", (req) => {
279
+ const result = validateUser(req.body);
280
+ // ...
281
+ });
282
+ ```
283
+
284
+ ## Interpreter Architecture
285
+
286
+ Unlike JIT compilers that generate code at runtime, SchemaShield uses a flat-loop interpreter:
287
+
288
+ 1. **Compilation:** Schema is compiled into a tree of validator functions at compile-time
289
+ 2. **Reference Resolution:** $ref links are resolved once during compilation
290
+ 3. **Validation:** Data flows through the validator tree in a flat loop (no recursion)
291
+
292
+ ### Performance Characteristics
293
+
294
+ | Schema Type | Performance | Notes |
295
+ |-------------|-------------|-------|
296
+ | Simple (type, properties) | Very fast | ~same as JIT |
297
+ | allOf/anyOf/oneOf | ~70% JIT | Sequential branch evaluation |
298
+ | Deep nesting | Stack-safe | Constant memory, no recursion |
299
+ | Many $refs | Fast | Resolved at compile-time |
300
+
301
+ ### Performance Optimization Tips
302
+
303
+ ```javascript
304
+ // Best: Flat structure
305
+ const fastSchema = {
306
+ type: "object",
307
+ properties: {
308
+ name: { type: "string" },
309
+ email: { type: "string", format: "email" }
310
+ }
311
+ };
312
+
313
+ // Slower: Deeply nested allOf/anyOf
314
+ const slowSchema = {
315
+ allOf: [
316
+ { allOf: [{ allOf: [...] }]}
317
+ ]
318
+ };
319
+
320
+ // Better: Flatten your schema
321
+ const betterSchema = {
322
+ type: "object",
323
+ properties: { /* ... */ }
324
+ };
325
+ ```
326
+
241
327
  ## Features
242
328
 
243
329
  - Supports draft-06 and draft-07 of the [JSON Schema](https://json-schema.org/) specification.
@@ -280,6 +366,70 @@ class CustomDate extends Date {}
280
366
  schemaShield.addType("custom-date-class", (data) => data instanceof CustomDate);
281
367
  ```
282
368
 
369
+ ## Security Implementation Examples
370
+
371
+ ### CSP-Compliant Validation
372
+
373
+ SchemaShield works in strict CSP environments because it uses no code generation:
374
+
375
+ ```javascript
376
+ // No eval(), no new Function() - CSP-safe
377
+ const validator = new SchemaShield().compile({
378
+ type: "object",
379
+ properties: {
380
+ name: { type: "string" }
381
+ }
382
+ });
383
+
384
+ // This works in strict CSP policies
385
+ const result = validator({ name: "John" });
386
+ ```
387
+
388
+ ### Preventing Prototype Pollution
389
+
390
+ SchemaShield prevents prototype pollution by design:
391
+
392
+ ```javascript
393
+ const schema = {
394
+ type: "object",
395
+ properties: {
396
+ name: { type: "string" }
397
+ },
398
+ additionalProperties: false
399
+ };
400
+
401
+ const validator = new SchemaShield().compile(schema);
402
+
403
+ // Malicious input {"__proto__": {"evil": "value"}} will fail
404
+ validator({ "__proto__": { "evil": "value" } });
405
+ // { valid: false, error: ValidationError }
406
+
407
+ // Only explicitly defined properties are allowed
408
+ validator({ name: "John", age: 30 });
409
+ // { valid: false, error: ValidationError (additionalProperties: false) }
410
+ ```
411
+
412
+ ### Immutable Mode
413
+
414
+ Protect input data from accidental modification:
415
+
416
+ ```javascript
417
+ const shield = new SchemaShield({ immutable: true });
418
+ const validator = shield.compile({
419
+ type: "object",
420
+ properties: {
421
+ name: { type: "string" }
422
+ }
423
+ });
424
+
425
+ const input = { name: "John" };
426
+ const result = validator(input);
427
+
428
+ // Input remains unchanged
429
+ console.log(input);
430
+ // { name: "John" }
431
+ ```
432
+
283
433
  ## Error Handling
284
434
 
285
435
  SchemaShield provides comprehensive error handling for schema validation. When a validation error occurs:
package/dist/index.js CHANGED
@@ -35,11 +35,15 @@ var ValidationError = class extends Error {
35
35
  instancePath = "";
36
36
  data;
37
37
  schema;
38
+ constructor(message) {
39
+ super(message);
40
+ this.message = message;
41
+ }
38
42
  _getCause(pointer = "#", instancePointer = "#") {
39
43
  let schemaPath = `${pointer}/${this.keyword}`;
40
44
  let instancePath = `${instancePointer}`;
41
45
  if (typeof this.item !== "undefined") {
42
- if (typeof this.item === "string" && this.item in this.schema) {
46
+ if (typeof this.item === "string" && this.schema && typeof this.schema === "object" && this.item in this.schema) {
43
47
  schemaPath += `/${this.item}`;
44
48
  }
45
49
  instancePath += `/${this.item}`;
package/dist/index.min.js CHANGED
@@ -1 +1 @@
1
- (()=>{var e=class extends Error{message;item;keyword;cause;schemaPath="";instancePath="";data;schema;_getCause(t="#",r="#"){let a=`${t}/${this.keyword}`,i=`${r}`;return void 0!==this.item&&("string"==typeof this.item&&this.item in this.schema&&(a+=`/${this.item}`),i+=`/${this.item}`),this.instancePath=i,this.schemaPath=a,this.cause&&this.cause instanceof e?this.cause._getCause(a,i):this}getCause(){return this._getCause()}_getTree(){const e={message:this.message,keyword:this.keyword,item:this.item,schemaPath:this.schemaPath,instancePath:this.instancePath,data:this.data};return this.cause&&(e.cause=this.cause._getTree()),e}getTree(){return this.getCause(),this._getTree()}getPath(){const e=this.getCause();return{schemaPath:e.schemaPath,instancePath:e.instancePath}}},t=()=>!0;function r(r,a,n){if(n)return t;const s=new e(`Invalid ${r}`);return s.keyword=r,s.schema=a,i(`defineError_${r}`,(e,t={})=>(s.message=e,s.item=t.item,s.cause=t.cause&&!0!==t.cause?t.cause:void 0,s.data=t.data,s))}function a(e){return!!e&&"object"==typeof e&&!Array.isArray(e)&&"$validate"in e}function i(e,t){return Object.defineProperty(t,"name",{value:e})}var n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=/^P(?!$)((\d+Y)?(\d+M)?(\d+W)?(\d+D)?)(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?$/,o=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,l=/^(?!\.)(?!.*\.$)[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,20}(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,21}){0,2}@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,60}[a-z0-9])?){0,3}$/i,f=/^[a-z0-9][a-z0-9-]{0,62}(?:\.[a-z0-9][a-z0-9-]{0,62})*[a-z0-9]$/i,u=/^(\d{4})-(\d{2})-(\d{2})$/,c=/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(\.\d+)?(Z|([+-])([01]\d|2[0-3]):([0-5]\d))$/,d=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,y=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,h=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,p=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,m=/^[^\s!@#$%^&*()_+\=\[\]{};':"\\|,<>\/?]+$/,v=[31,28,31,30,31,30,31,31,30,31,30,31];function b(e,t){const r=e.charCodeAt(t)-48,a=e.charCodeAt(t+1)-48;return r<0||r>9||a<0||a>9?-1:10*r+a}function g(e,t,r){let a=0,i=t;for(let n=t;n<=r;n++){if(n!==r&&46!==e.charCodeAt(n))continue;const t=n-i;if(t<1||t>3)return!1;if(t>1&&48===e.charCodeAt(i))return!1;let s=0;for(let t=i;t<n;t++){const r=e.charCodeAt(t)-48;if(r<0||r>9)return!1;s=10*s+r}if(s>255)return!1;a++,i=n+1}return 4===a}var A={"date-time"(e){const t=e.length;if(t<19)return!1;if(45!==e.charCodeAt(4)||45!==e.charCodeAt(7)||58!==e.charCodeAt(13)||58!==e.charCodeAt(16))return!1;const r=e.charCodeAt(10);if(84!==r&&116!==r)return!1;const a=((e,t)=>{const r=e.charCodeAt(0)-48,a=e.charCodeAt(1)-48,i=e.charCodeAt(2)-48,n=e.charCodeAt(3)-48;return r<0||r>9||a<0||a>9||i<0||i>9||n<0||n>9?-1:1e3*r+100*a+10*i+n})(e),i=b(e,5),n=b(e,8),s=b(e,11),o=b(e,14),l=b(e,17);if(a<0||i<0||n<0||s<0||o<0||l<0)return!1;if(s>23||o>59||l>60)return!1;let f=19,u=null,c=0,d=0;if(f<t&&46===e.charCodeAt(f)){f++;const r=f;for(;f<t&&(y=e.charCodeAt(f))>=48&&y<=57;)f++;if(f===r)return!1}var y;if(f<t){const r=e.charCodeAt(f);if(90===r||122===r)f++;else{if(43!==r&&45!==r)return!1;if(u=43===r?"+":"-",f+6>t||58!==e.charCodeAt(f+3))return!1;if(c=b(e,f+1),d=b(e,f+4),c<0||d<0||c>23||d>59)return!1;f+=6}}if(f!==t)return!1;if(i<1||i>12)return!1;if(n<1)return!1;const h=2===i?a%4!=0||a%100==0&&a%400!=0?28:29:v[i-1];if(!h||n>h)return!1;if(60===l){let e=60*s+o;if(u){const t=60*c+d;e+="+"===u?-t:t,e%=1440,e<0&&(e+=1440)}if(1439!==e)return!1}return!0},uri(e){return o.test(e)},email(e){return l.test(e)},ipv4(e){return(e=>g(e,0,e.length))(e)},ipv6(e){return(e=>{const t=e.length;if(0===t)return!1;let r=!1,a=!1,i=0,n=0;for(;n<t;){if(58===e.charCodeAt(n)){if(r=!0,n+1<t&&58===e.charCodeAt(n+1)){if(a)return!1;if(a=!0,n+=2,n===t)break;continue}return!1}const o=n;let l=0;for(;n<t&&((s=e.charCodeAt(n))>=48&&s<=57||s>=65&&s<=70||s>=97&&s<=102);){if(l++,l>4)return!1;n++}if(0===l)return!1;if(n<t&&46===e.charCodeAt(n))return!!r&&!!g(e,o,t)&&(a?i<6:6===i);if(i++,i>8)return!1;if(n===t)break;if(58!==e.charCodeAt(n))return!1;if(r=!0,n++,n===t)return!1;if(58===e.charCodeAt(n)){if(a)return!1;if(a=!0,n++,n===t)break}}var s;return!!r&&(a?i<8:8===i)})(e)},hostname(e){return f.test(e)},date(e){const t=u.exec(e);if(!t)return!1;const[,r,a,i]=t,n=Number(r),s=Number(a),o=Number(i);if(s<1||s>12)return!1;if(o<1)return!1;const l=2===s?n%4!=0||n%100==0&&n%400!=0?28:29:v[s-1];return!!l&&o<=l},regex(e){try{return new RegExp(e),!0}catch(e){return!1}},"json-pointer"(e){return(e=>{if(""===e)return!0;if(47!==e.charCodeAt(0))return!1;for(let t=1;t<e.length;t++){if(126!==e.charCodeAt(t))continue;const r=e.charCodeAt(t+1);if(48!==r&&49!==r)return!1;t++}return!0})(e)},"relative-json-pointer"(e){return(e=>{if(0===e.length)return!0;let t=0;for(;t<e.length;){const r=e.charCodeAt(t);if(r<48||r>57)break;t++}if(0===t)return!1;if(t===e.length)return!0;if(35===e.charCodeAt(t))return t+1===e.length;if(47!==e.charCodeAt(t))return!1;for(t+=1;t<e.length;t++){if(126!==e.charCodeAt(t))continue;const r=e.charCodeAt(t+1);if(48!==r&&49!==r)return!1;t++}return!0})(e)},time(e){return c.test(e)},"uri-reference"(e){return!e.includes("\\")&&d.test(e)},"uri-template"(e){return(e=>{for(let t=0;t<e.length;t++){const r=e.charCodeAt(t);if(125===r)return!1;if(123!==r)continue;const a=e.indexOf("}",t+1);if(-1===a||a===t+1)return!1;t=a}return!0})(e)},duration(e){return s.test(e)},uuid(e){return n.test(e)},iri(e){return y.test(e)},"iri-reference"(e){return!e.includes("\\")&&h.test(e)},"idn-email"(e){return p.test(e)},"idn-hostname"(e){return m.test(e)}},w={object(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)},array(e){return Array.isArray(e)},string(e){return"string"==typeof e},number(e){return"number"==typeof e},integer(e){return"number"==typeof e&&e%1==0},boolean(e){return"boolean"==typeof e},null(e){return null===e},timestamp:!1,int8:!1,uint8:!1,int16:!1,uint16:!1,int32:!1,uint32:!1,float32:!1,float64:!1};function O(e,t){if(Object.is(e,t))return!1;if(Array.isArray(e)){if(!1===Array.isArray(t))return!0;if(e.length!==t.length)return!0;for(let r=0;r<t.length;r++)if(O(e[r],t[r]))return!0;return!1}if("object"==typeof e&&null!==e){if("object"!=typeof t||null===t)return!0;for(const r in t)if(O(e[r],t[r]))return!0;for(const r in e)if(!(r in t)&&O(e[r],void 0))return!0;return!1}return!0}function $(e){return null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e}function j(e){const t=e.length;if(0===t)return"0";const r=e[0],a=e[t-1],i=null===r?"null":typeof r,n=null===a?"null":typeof a;let s="";if(Array.isArray(r)){const e=k(r);s=null===e?`a:${r.length}`:e}let o="";if(Array.isArray(a)){const e=k(a);o=null===e?`a:${a.length}`:e}return`${t}:${i}:${s}:${n}:${o}`}function P(e){const t=Object.keys(e).sort();return`${t.length}:${t.join("")}`}function k(e){const t=e.length;if(0===t)return"a:0";if(!$(e[0])||!$(e[t-1]))return null;let r=`a:${t}:`;for(let a=0;a<t;a++){const t=e[a];if(null!==t)if("string"!=typeof t)if("number"!=typeof t){if("boolean"!=typeof t)return null;r+=t?"b:1;":"b:0;"}else{if(Number.isNaN(t)){r+="n:NaN;";continue}if(Object.is(t,-0)){r+="n:-0;";continue}r+=`n:${t};`}else r+=`s${t.length}:${t};`;else r+="l;"}return r}var V={items(e,t,r){if(!Array.isArray(t))return;const a=e.items,i=t.length;if("boolean"==typeof a)return!1===a&&i>0?r("Array items are not allowed",{data:t}):void 0;if(Array.isArray(a)){const e=a.length,n=e<i?e:i;for(let e=0;e<n;e++){const i=a[e];if("boolean"==typeof i){if(!1===i&&void 0!==t[e])return r("Array item is not allowed",{item:e,data:t[e]});continue}const n=i&&i.$validate;if("function"==typeof n){const a=n(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}}return}const n=a&&a.$validate;if("function"==typeof n)for(let e=0;e<i;e++){const a=n(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}},elements(e,t,r){if(!Array.isArray(t))return;const a=e.elements,i=a&&a.$validate;if("function"==typeof i)for(let e=0;e<t.length;e++){const a=i(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}},minItems(e,t,r){if(Array.isArray(t)&&!(t.length>=e.minItems))return r("Array is too short",{data:t})},maxItems(e,t,r){if(Array.isArray(t)&&!(t.length<=e.maxItems))return r("Array is too long",{data:t})},additionalItems(e,t,r){if(!Array.isArray(t)||!Array.isArray(e.items))return;let i=e._tupleItemsLength;if(void 0===i&&(i=e.items.length,Object.defineProperty(e,"_tupleItemsLength",{value:i,enumerable:!1,configurable:!1,writable:!1})),!(t.length<=i)){if(!1===e.additionalItems)return r("Array is too long",{data:t});if(!e.additionalItems||"object"!=typeof e.additionalItems||Array.isArray(e.additionalItems));else if(a(e.additionalItems)){for(let a=i;a<t.length;a++){const i=e.additionalItems.$validate(t[a]);if(i)return r("Array item is invalid",{item:a,cause:i,data:t[a]})}return}}},uniqueItems(e,t,r){if(!Array.isArray(t)||!e.uniqueItems)return;const a=t.length;if(a<=1)return;if(a<=8){for(let e=0;e<a;e++){const i=t[e];for(let n=e+1;n<a;n++){const e=t[n];if(i===e)return r("Array items are not unique",{data:e});if("number"==typeof i&&"number"==typeof e&&Number.isNaN(i)&&Number.isNaN(e))return r("Array items are not unique",{data:e});if(i&&e&&"object"==typeof i&&"object"==typeof e&&!O(i,e))return r("Array items are not unique",{data:e})}}return}const i=new Set;let n,s,o;for(let e=0;e<a;e++){const a=t[e];if($(a)){if(i.has(a))return r("Array items are not unique",{data:a});i.add(a);continue}if(!a||"object"!=typeof a)continue;if(Array.isArray(a)){const e=k(a);if(null!==e){if(n||(n=new Set),n.has(e))return r("Array items are not unique",{data:a});n.add(e);continue}s||(s=new Map);const t=j(a);let i=s.get(t);i||(i=[],s.set(t,i));for(let e=0;e<i.length;e++)if(!O(i[e],a))return r("Array items are not unique",{data:a});i.push(a);continue}o||(o=new Map);const l=P(a);let f=o.get(l);f||(f=[],o.set(l,f));for(let e=0;e<f.length;e++)if(!O(f[e],a))return r("Array items are not unique",{data:a});f.push(a)}},contains(e,t,r){if(!Array.isArray(t))return;if("boolean"==typeof e.contains)return e.contains?0===t.length?r("Array must contain at least one item",{data:t}):void 0:r("Array must not contain any items",{data:t});const a=e.contains.$validate;for(let e=0;e<t.length;e++)if(!a(t[e]))return;return r("Array must contain at least one item",{data:t})}};function _(e,t=!1,r=new WeakMap){if(null==e||"object"!=typeof e)return e;const a=e;if(r.has(a))return r.get(a);if(i=a,"function"==typeof structuredClone&&!("undefined"!=typeof Buffer&&i instanceof Buffer)&&(Array.isArray(i)||(e=>{if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t})(i)||i instanceof Date||i instanceof RegExp||i instanceof Map||i instanceof Set||i instanceof ArrayBuffer||ArrayBuffer.isView(i))){const e=structuredClone(a);return r.set(a,e),e}var i;let n;switch(!0){case Array.isArray(a):n=[],r.set(a,n);for(let e=0,i=a.length;e<i;e++)n[e]=_(a[e],t,r);return n;case a instanceof Date:return n=new Date(a.getTime()),r.set(a,n),n;case a instanceof RegExp:return n=new RegExp(a.source,a.flags),r.set(a,n),n;case a instanceof Map:n=new Map,r.set(a,n);for(const[e,i]of a.entries())n.set(_(e,t,r),_(i,t,r));return n;case a instanceof Set:n=new Set,r.set(a,n);for(const e of a.values())n.add(_(e,t,r));return n;case a instanceof ArrayBuffer:return n=a.slice(0),r.set(a,n),n;case ArrayBuffer.isView(a):return n=new a.constructor(a.buffer.slice(0)),r.set(a,n),n;case"undefined"!=typeof Buffer&&a instanceof Buffer:return n=Buffer.from(a),r.set(a,n),n;case a instanceof Error:n=new a.constructor(a.message),r.set(a,n);break;case a instanceof Promise||a instanceof WeakMap||a instanceof WeakSet:return n=a,r.set(a,n),n;case a.constructor&&a.constructor!==Object:if(!t)return n=a,r.set(a,n),n;n=Object.create(Object.getPrototypeOf(a)),r.set(a,n);break;default:{n={},r.set(a,n);const e=Reflect.ownKeys(a);for(let i=0,s=e.length;i<s;i++){const s=e[i];n[s]=_(a[s],t,r)}return n}}const s=Object.getOwnPropertyDescriptors(a);for(const e of Reflect.ownKeys(s)){const a=s[e];"value"in a&&(a.value=_(a.value,t,r)),Object.defineProperty(n,e,a)}return n}var x={minimum(e,t,r,a){if("number"!=typeof t)return;let i=e.minimum;return"number"==typeof e.exclusiveMinimum?i=e.exclusiveMinimum+1e-15:!0===e.exclusiveMinimum&&(i+=1e-15),t<i?r("Value is less than the minimum",{data:t}):void 0},maximum(e,t,r,a){if("number"!=typeof t)return;let i=e.maximum;return"number"==typeof e.exclusiveMaximum?i=e.exclusiveMaximum-1e-15:!0===e.exclusiveMaximum&&(i-=1e-15),t>i?r("Value is greater than the maximum",{data:t}):void 0},multipleOf(e,t,r,a){if("number"!=typeof t)return;const i=t/e.multipleOf;return isFinite(i)?((e,t,r=1e-15)=>Math.abs(e-t)<=r*Math.max(Math.abs(e),Math.abs(t)))(i,Math.round(i))?void 0:r("Value is not a multiple of the multipleOf",{data:t}):void 0},exclusiveMinimum(e,t,r,a){if("number"==typeof t&&"number"==typeof e.exclusiveMinimum&&!("minimum"in e))return t<=e.exclusiveMinimum+1e-15?r("Value is less than or equal to the exclusiveMinimum"):void 0},exclusiveMaximum(e,t,r,a){if("number"==typeof t&&"number"==typeof e.exclusiveMaximum&&!("maximum"in e))return t>=e.exclusiveMaximum?r("Value is greater than or equal to the exclusiveMaximum",{data:t}):void 0}},C=/[\\.^$*+?()[\]{}|]/;function I(e){return C.test(e)}var R=new Map;function S(e){const t=R.get(e);if(t)return t;let r;if(0===e.length)r=e=>!0;else if(I(e)){const t=e.length;if(t>=2&&"^"===e[0]&&"$"===e[t-1]){const t=e.slice(1,-1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>0===e.length:e=>e===t}else if("^"===e[0]){const t=e.slice(1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>!0:e=>e.startsWith(t)}else if("$"===e[t-1]){const t=e.slice(0,-1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>!0:e=>e.endsWith(t)}else r=new RegExp(e,"u")}else r=t=>t.includes(e);return R.set(e,r),r}var M=512;function q(e){let t=e._patternPropertyEntries;if(t)return t;if(!e.patternProperties||"object"!=typeof e.patternProperties||Array.isArray(e.patternProperties))return;const r=Object.keys(e.patternProperties);t=new Array(r.length);for(let a=0;a<r.length;a++){const i=r[a],n=S(i),s=n instanceof RegExp?e=>n.test(e):n;t[a]={schemaProp:e.patternProperties[i],match:s}}return Object.defineProperty(e,"_patternPropertyEntries",{value:t,enumerable:!1,configurable:!1,writable:!1}),t}function E(e,t,r){let a=e._patternKeyMatchIndexCache;if(a){const e=a.get(t);if(e)return e}else a=new Map,Object.defineProperty(e,"_patternKeyMatchIndexCache",{value:a,enumerable:!1,configurable:!1,writable:!1});const i=[];for(let e=0;e<r.length;e++)r[e].match(t)&&i.push(e);return a.size<M&&a.set(t,i),i}function N(e,t){const r=`_${t}BranchEntries`;let a=e[r];if(a)return a;const i=e[t]||[];a=[];for(let e=0;e<i.length;e++)a.push((n=i[e])&&"object"==typeof n&&!Array.isArray(n)?"$validate"in n&&"function"==typeof n.$validate?{kind:"validate",validate:n.$validate}:{kind:"alwaysValid"}:"boolean"==typeof n?{kind:n?"alwaysValid":"alwaysInvalid"}:{kind:"literal",value:n});var n;return Object.defineProperty(e,r,{value:a,enumerable:!1,configurable:!1,writable:!1}),a}var z={...{required(e,t,r){if(t&&"object"==typeof t&&!Array.isArray(t))for(let a=0;a<e.required.length;a++){const i=e.required[a];if(!{}.hasOwnProperty.call(t,i))return r("Required property is missing",{item:i,data:t[i]})}},properties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=e._propKeys;a||(a=Object.keys(e.properties||{}),Object.defineProperty(e,"_propKeys",{value:a,enumerable:!1,configurable:!1,writable:!1}));let i=e._requiredSet;void 0===i&&(i=Array.isArray(e.required)?new Set(e.required):null,Object.defineProperty(e,"_requiredSet",{value:i,enumerable:!1,configurable:!1,writable:!1}));for(let n=0;n<a.length;n++){const s=a[n],o=e.properties[s];if({}.hasOwnProperty.call(t,s)){if("boolean"!=typeof o){if(o&&"$validate"in o){const e=o.$validate(t[s]);if(e)return r("Property is invalid",{item:s,cause:e,data:t[s]})}}else if(!1===o)return r("Property is not allowed",{item:s,data:t[s]})}else if(i&&i.has(s)&&o&&"object"==typeof o&&!Array.isArray(o)&&"default"in o){const e=o.$validate(o.default);if(e)return r("Default property is invalid",{item:s,cause:e,data:o.default});t[s]=_(o.default)}}},values(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=e.values,i=a&&a.$validate;if("function"==typeof i)for(const e in t){if(!{}.hasOwnProperty.call(t,e))continue;const a=i(t[e]);if(a)return r("Property is invalid",{item:e,cause:a,data:t[e]})}},maxProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=0;for(const i in t)if({}.hasOwnProperty.call(t,i)&&(a++,a>e.maxProperties))return r("Too many properties",{data:t})},minProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=0;for(const r in t)if({}.hasOwnProperty.call(t,r)&&(a++,a>=e.minProperties))return;return r("Too few properties",{data:t})},additionalProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let i=e._apValidate;void 0===i&&(i=a(e.additionalProperties)?e.additionalProperties.$validate:null,Object.defineProperty(e,"_apValidate",{value:i,enumerable:!1,configurable:!1,writable:!1}));const n=q(e);for(const a in t)if({}.hasOwnProperty.call(t,a)&&!(e.properties&&{}.hasOwnProperty.call(e.properties,a)||n&&n.length&&E(e,a,n).length>0)){if(!1===e.additionalProperties)return r("Additional properties are not allowed",{item:a,data:t[a]});if(i){const e=i(t[a]);if(e)return r("Additional properties are invalid",{item:a,cause:e,data:t[a]})}}},patternProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=q(e);if(a&&0!==a.length)for(const i in t){if(!{}.hasOwnProperty.call(t,i))continue;const n=E(e,i,a);if(0!==n.length)for(let e=0;e<n.length;e++){const s=a[n[e]].schemaProp;if("boolean"!=typeof s){if("$validate"in s){const e=s.$validate(t[i]);if(e)return r("Property is invalid",{item:i,cause:e,data:t[i]})}}else if(!1===s)return r("Property is not allowed",{item:i,data:t[i]})}else if(!(!1!==e.additionalProperties||e.properties&&{}.hasOwnProperty.call(e.properties,i)))return r("Additional properties are not allowed",{item:i,data:t[i]})}},propertyNames(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=e.propertyNames;if("boolean"==typeof a){if(!1===a)for(const e in t)if({}.hasOwnProperty.call(t,e))return r("Properties are not allowed",{data:t});return}const i=a&&a.$validate;if("function"==typeof i)for(const e in t){if(!{}.hasOwnProperty.call(t,e))continue;const a=i(e);if(a)return r("Property name is invalid",{item:e,cause:a,data:t[e]})}},dependencies(e,t,r){if(t&&"object"==typeof t&&!Array.isArray(t))for(const a in e.dependencies){if(a in t==0)continue;const i=e.dependencies[a];if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(!(i[e]in t))return r("Dependency is not satisfied",{item:e,data:i[e]});continue}if("boolean"==typeof i){if(i)continue;return r("Dependency is not satisfied",{data:i})}if("string"==typeof i){if(i in t)continue;return r("Dependency is not satisfied",{data:i})}const n=i.$validate(t);if(n)return r("Dependency is not satisfied",{cause:n,data:t})}},then:!1,else:!1,default:!1,definitions:!1,$id:!1,$schema:!1,title:!1,description:!1,$comment:!1,examples:!1,contentMediaType:!1,contentEncoding:!1,discriminator:!1,nullable:!1},...V,...{minLength(e,t,r){if(!("string"!=typeof t||t.length>=e.minLength))return r("Value is shorter than the minimum length",{data:t})},maxLength(e,t,r){if(!("string"!=typeof t||t.length<=e.maxLength))return r("Value is longer than the maximum length",{data:t})},pattern(e,t,r){if("string"!=typeof t)return;let a=e._patternMatch,i=e._patternMatchCache;if(!a)try{const t=S(e.pattern);a=t instanceof RegExp?e=>t.test(e):t,Object.defineProperty(e,"_patternMatch",{value:a,enumerable:!1,configurable:!1,writable:!1})}catch(e){return r("Invalid regular expression",{data:t,cause:e})}if(i){if(i.has(t)){if(i.get(t))return;return r("Value does not match the pattern",{data:t})}}else i=new Map,Object.defineProperty(e,"_patternMatchCache",{value:i,enumerable:!1,configurable:!1,writable:!1});const n=a(t);return i.size<512&&i.set(t,n),n?void 0:r("Value does not match the pattern",{data:t})},format(e,t,r,a){if("string"!=typeof t)return;let i=e._formatValidate,n=e._formatResultCacheEnabled,s=e._formatResultCache;if(void 0===i&&(i=a.getFormat(e.format),Object.defineProperty(e,"_formatValidate",{value:i,enumerable:!1,configurable:!1,writable:!1})),!i)return;if(void 0===n&&(n=a.isDefaultFormatValidator(e.format,i),Object.defineProperty(e,"_formatResultCacheEnabled",{value:n,enumerable:!1,configurable:!1,writable:!1})),!n){if(i(t))return;return r("Value does not match the format",{data:t})}if(s){if(s.has(t)){if(s.get(t))return;return r("Value does not match the format",{data:t})}}else s=new Map,Object.defineProperty(e,"_formatResultCache",{value:s,enumerable:!1,configurable:!1,writable:!1});const o=i(t);return s.size<512&&s.set(t,o),o?void 0:r("Value does not match the format",{data:t})}},...x,...{enum(e,t,r){let a=e._enumCache;if(!a){const t=new Set,r=[],i=e.enum;for(let e=0;e<i.length;e++){const a=i[e];null!==a&&"object"==typeof a?r.push(a):t.add(a)}a={primitiveSet:t,objectValues:r},Object.defineProperty(e,"_enumCache",{value:a,enumerable:!1,configurable:!1,writable:!1})}if("number"==typeof t&&Number.isNaN(t)||!a.primitiveSet.has(t)){if(null!==t&&"object"==typeof t)for(let e=0;e<a.objectValues.length;e++)if(!O(a.objectValues[e],t))return;return r("Value is not one of the allowed values",{data:t})}},allOf(e,t,r){const a=N(e,"allOf");if(1===a.length){const e=a[0];if("validate"===e.kind){const a=e.validate(t);return a?r("Value is not valid",{cause:a,data:t}):void 0}if("alwaysValid"===e.kind)return;return"alwaysInvalid"===e.kind||t!==e.value?r("Value is not valid",{data:t}):void 0}for(let e=0;e<a.length;e++){const i=a[e];if("validate"!==i.kind){if("alwaysValid"!==i.kind){if("alwaysInvalid"===i.kind)return r("Value is not valid",{data:t});if(t!==i.value)return r("Value is not valid",{data:t})}}else{const e=i.validate(t);if(e)return r("Value is not valid",{cause:e,data:t})}}},anyOf(e,t,r){const a=N(e,"anyOf");if(1===a.length){const e=a[0];if("validate"===e.kind){if(!e.validate(t))return;return r("Value is not valid",{data:t})}if("alwaysValid"===e.kind)return;if("alwaysInvalid"===e.kind)return r("Value is not valid",{data:t});if(t===e.value)return;return r("Value is not valid",{data:t})}for(let e=0;e<a.length;e++){const r=a[e];if("validate"!==r.kind){if("alwaysValid"===r.kind)return;if("alwaysInvalid"!==r.kind&&t===r.value)return}else if(!r.validate(t))return}return r("Value is not valid",{data:t})},oneOf(e,t,r){const a=N(e,"oneOf");if(1===a.length){const e=a[0];if("validate"===e.kind){if(!e.validate(t))return;return r("Value is not valid",{data:t})}if("alwaysValid"===e.kind)return;if("alwaysInvalid"===e.kind)return r("Value is not valid",{data:t});if(t===e.value)return;return r("Value is not valid",{data:t})}let i=0;for(let e=0;e<a.length;e++){const n=a[e];let s=!1;if(s="validate"===n.kind?!n.validate(t):"alwaysValid"===n.kind||"alwaysInvalid"!==n.kind&&t===n.value,s&&(i++,i>1))return r("Value is not valid",{data:t})}if(1!==i)return r("Value is not valid",{data:t})},const(e,t,r){if(t!==e.const&&!(t&&"object"==typeof t&&!Array.isArray(t)&&e.const&&"object"==typeof e.const&&!Array.isArray(e.const)&&!O(t,e.const)||Array.isArray(t)&&Array.isArray(e.const)&&!O(t,e.const)))return r("Value is not valid",{data:t})},if(e,t){if("then"in e!=0||"else"in e!=0)if("boolean"!=typeof e.if){if(a(e.if))return e.if.$validate(t)?a(e.else)?e.else.$validate(t):void 0:a(e.then)?e.then.$validate(t):void 0}else if(e.if){if(a(e.then))return e.then.$validate(t)}else if(a(e.else))return e.else.$validate(t)},not:(e,t,r)=>"boolean"==typeof e.not?e.not?r("Value is not valid",{data:t}):void 0:e.not&&"object"==typeof e.not&&!Array.isArray(e.not)&&"$validate"in e.not&&e.not.$validate(t)?void 0:r("Value is not valid",{data:t}),$ref(e,t,r,a){if(e._resolvedRef)return e.$validate!==e._resolvedRef&&(e.$validate=e._resolvedRef),e._resolvedRef(t);const i=e.$ref;let n=a.getSchemaRef(i);return n||(n=a.getSchemaById(i)),n?n.$validate?(e._resolvedRef=n.$validate,e.$validate=e._resolvedRef,e._resolvedRef(t)):void 0:r(`Missing reference: ${i}`)}}},F={SchemaShield:class{types={};formats={};keywords={};immutable=!1;rootSchema=null;idRegistry=new Map;failFast=!0;constructor({immutable:e=!1,failFast:t=!0}={}){this.immutable=e,this.failFast=t;for(const[e,t]of Object.entries(w))t&&this.addType(e,t);for(const[e,t]of Object.entries(z))this.addKeyword(e,t);for(const[e,t]of Object.entries(A))t&&this.addFormat(e,t)}addType(t,r,a=!1){if(this.types[t]&&!a)throw new e(`Type "${t}" already exists`);this.types[t]=r}getType(e){return this.types[e]}addFormat(t,r,a=!1){if(this.formats[t]&&!a)throw new e(`Format "${t}" already exists`);this.formats[t]=r}getFormat(e){return this.formats[e]}isDefaultFormatValidator(e,t){return A[e]===t}addKeyword(t,r,a=!1){if(this.keywords[t]&&!a)throw new e(`Keyword "${t}" already exists`);this.keywords[t]=r}getKeyword(e){return this.keywords[e]}getSchemaRef(e){if(this.rootSchema)return((e,t)=>{if(!t||"#"===t)return e;if(t.startsWith("#/")){const r=t.split("/").slice(1);let a=e;for(const e of r){const t=decodeURIComponent(e).replace(/~1/g,"/").replace(/~0/g,"~");if(!a||"object"!=typeof a||!(t in a))return;a=a[t]}return a}if(!t.includes("#")){if(e.definitions&&e.definitions[t])return e.definitions[t];if(e.defs&&e.defs[t])return e.defs[t];if(e.$id&&"string"==typeof e.$id&&(e.$id===t||e.$id.endsWith("/"+t)))return e}})(this.rootSchema,e)}getSchemaById(e){return this.idRegistry.get(e)}compile(t){this.idRegistry.clear();const a=this.compileSchema(t);if(this.rootSchema=a,!0===a._hasRef&&this.linkReferences(a),!a.$validate)if(!1===t){const e=r("oneOf",a,this.failFast);a.$validate=i("Validate_False",t=>e("Value is not valid",{data:t}))}else if(!0===t)a.$validate=i("Validate_Any",()=>{});else{if(!1===this.isSchemaLike(t))throw new e("Invalid schema");a.$validate=i("Validate_Any",()=>{})}const n=e=>{this.rootSchema=a;const t=this.immutable?_(e):e,r=a.$validate(t);return r?{data:t,error:r,valid:!1}:{data:t,error:null,valid:!0}};return n.compiledSchema=a,n}isPlainObject(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}isTrivialAlwaysValidSubschema(e){return!0===e||this.isPlainObject(e)&&0===Object.keys(e).length}shallowArrayEquals(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}flattenAssociativeBranches(e,t){const r=[];for(let a=0;a<t.length;a++){const i=t[a];if(this.isPlainObject(i)&&1===Object.keys(i).length&&Array.isArray(i[e])){const t=this.flattenAssociativeBranches(e,i[e]);for(let e=0;e<t.length;e++)r.push(t[e])}else r.push(i)}return r}flattenSingleWrapperOneOf(e){let t=e;for(;1===t.length;){const e=t[0];if(!this.isPlainObject(e)||1!==Object.keys(e).length||!Array.isArray(e.oneOf))break;t=e.oneOf}return t}normalizeSchemaForCompile(e){let t=e;const r=Object.keys(e),a=e=>1===r.length&&r[0]===e,i=(r,a)=>{t===e&&(t={...e}),t[r]=a};if(Array.isArray(e.allOf)){const t=this.flattenAssociativeBranches("allOf",e.allOf).filter(e=>!(this.isPlainObject(e)&&0===Object.keys(e).length));if(a("allOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.allOf)||i("allOf",t)}if(Array.isArray(e.anyOf)){const t=this.flattenAssociativeBranches("anyOf",e.anyOf);if(a("anyOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.anyOf)||i("anyOf",t)}if(Array.isArray(e.oneOf)){const t=this.flattenSingleWrapperOneOf(e.oneOf);if(a("oneOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.oneOf)||i("oneOf",t)}return t}markSchemaHasRef(e){!0!==e._hasRef&&Object.defineProperty(e,"_hasRef",{value:!0,enumerable:!1,configurable:!1,writable:!1})}shouldSkipKeyword(e,t){const r=e[t];switch(t){case"required":return Array.isArray(r)&&0===r.length;case"uniqueItems":return!1===r;case"properties":case"patternProperties":case"dependencies":return this.isPlainObject(r)&&0===Object.keys(r).length;case"propertyNames":case"items":return!0===r;case"additionalProperties":return!0===r||!1===r&&this.isPlainObject(e.patternProperties)&&Object.keys(e.patternProperties).length>0;case"additionalItems":return!0===r||!Array.isArray(e.items);case"allOf":if(!Array.isArray(r))return!1;if(0===r.length)return!0;for(let e=0;e<r.length;e++)if(!this.isTrivialAlwaysValidSubschema(r[e]))return!1;return!0;case"anyOf":if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(this.isTrivialAlwaysValidSubschema(r[e]))return!0;return!1;default:return!1}}hasRequiredDefaults(e){const t=e.properties;if(!this.isPlainObject(t))return!1;const r=Object.keys(t);for(let e=0;e<r.length;e++){const a=t[r[e]];if(this.isPlainObject(a)&&"default"in a)return!0}return!1}isDefaultTypeValidator(e,t){return w[e]===t}compileSchema(e){e&&"object"==typeof e&&!Array.isArray(e)||(e=!0===e?{anyOf:[{}]}:!1===e?{oneOf:[]}:{oneOf:[e]});const t=_(e=this.normalizeSchemaForCompile(e));let a=!1;if("string"==typeof e.$id&&this.idRegistry.set(e.$id,t),"$ref"in e){a=!0;const n=this.getKeyword("$ref");if(n){const a=r("$ref",e.$ref,this.failFast);t.$validate=i("Validate_Reference",e=>n(t,e,a,this))}return this.markSchemaHasRef(t),t}const n=[],s=[];if("type"in e){const t=r("type",e,this.failFast),a=Array.isArray(e.type)?e.type:e.type.split(",").map(e=>e.trim()),o=[],l=[],f=[];let u,c=!0;for(const e of a){const t=this.getType(e);t&&(o.push(t),l.push(t.name),this.isDefaultTypeValidator(e,t)?f.push(e):c=!1)}if(0===o.length)throw r("type",e,this.failFast)("Invalid type for schema",{data:e.type});let d="";if(1===o.length&&c){const e=f[0];switch(d=e,e){case"object":u=e=>{if(null===e||"object"!=typeof e||Array.isArray(e))return t("Invalid type",{data:e})};break;case"array":u=e=>{if(!Array.isArray(e))return t("Invalid type",{data:e})};break;case"string":u=e=>{if("string"!=typeof e)return t("Invalid type",{data:e})};break;case"number":u=e=>{if("number"!=typeof e)return t("Invalid type",{data:e})};break;case"integer":u=e=>{if("number"!=typeof e||!Number.isInteger(e))return t("Invalid type",{data:e})};break;case"boolean":u=e=>{if("boolean"!=typeof e)return t("Invalid type",{data:e})};break;case"null":u=e=>{if(null!==e)return t("Invalid type",{data:e})};break;default:{const e=o[0];u=r=>{if(!e(r))return t("Invalid type",{data:r})}}}}else if(o.length>1&&c){d=f.join("_OR_");const e=f.includes("object"),r=f.includes("array"),a=f.includes("string"),i=f.includes("number"),n=f.includes("integer"),s=f.includes("boolean"),o=f.includes("null");u=l=>{const f=typeof l;if("number"===f){if(i||n&&Number.isInteger(l))return;return t("Invalid type",{data:l})}if("string"===f){if(a)return;return t("Invalid type",{data:l})}if("boolean"===f){if(s)return;return t("Invalid type",{data:l})}if("object"===f){if(null===l){if(o)return;return t("Invalid type",{data:l})}if(Array.isArray(l)){if(r)return;return t("Invalid type",{data:l})}if(e)return;return t("Invalid type",{data:l})}return t("Invalid type",{data:l})}}else if(1===o.length){d=l[0];const e=o[0];u=r=>{if(!e(r))return t("Invalid type",{data:r})}}else d=l.join("_OR_"),u=e=>{for(let t=0;t<o.length;t++)if(o[t](e))return;return t("Invalid type",{data:e})};n.push({name:d,validate:i(d,u)}),s.push(d)}const{type:o,$id:l,$ref:f,$validate:u,required:c,...d}=e,y=c?this.hasRequiredDefaults(e)?[...Object.keys(d),"required"]:["required",...Object.keys(d)]:Object.keys(d);for(const a of y){const o=this.getKeyword(a);if(!o)continue;if(this.shouldSkipKeyword(e,a))continue;const l=r(a,e[a],this.failFast),f=o.name||a;n.push({name:f,validate:i(f,e=>o(t,e,l,this))}),s.push(f)}const h=["enum","const","default","examples"];for(const r of y)if(!h.includes(r))if(!e[r]||"object"!=typeof e[r]||Array.isArray(e[r])){if(Array.isArray(e[r]))for(let i=0;i<e[r].length;i++)if(this.isSchemaLike(e[r][i])){const n=this.compileSchema(e[r][i]);!0===n._hasRef&&(a=!0),t[r][i]=n}}else{if("properties"===r){for(const i of Object.keys(e[r])){const n=this.compileSchema(e[r][i]);!0===n._hasRef&&(a=!0),t[r][i]=n}continue}const i=this.compileSchema(e[r]);!0===i._hasRef&&(a=!0),t[r]=i}if(a&&this.markSchemaHasRef(t),0===n.length)return t;if(1===n.length){const e=n[0];t.$validate=i(e.name,e.validate)}else{const e="Validate_"+s.join("_AND_"),r=e=>{for(let t=0;t<n.length;t++){const r=n[t].validate(e);if(r)return r}};t.$validate=i(e,r)}return t}isSchemaLike(e){if(e&&"object"==typeof e&&!Array.isArray(e)){if("type"in e)return!0;for(let t in e)if(t in this.keywords)return!0}return!1}linkReferences(e){const t=[e];for(;t.length>0;){const e=t.pop();if(e&&"object"==typeof e){if("string"==typeof e.$ref&&"function"==typeof e.$validate&&"Validate_Reference"===e.$validate.name){const t=e.$ref;let a=this.getSchemaRef(t);if(void 0===a&&(a=this.getSchemaById(t)),"boolean"==typeof a){if(!0===a)e.$validate=i("Validate_Ref_True",()=>{});else{const t=r("$ref",e,this.failFast);e.$validate=i("Validate_Ref_False",e=>t("Value is not valid"))}continue}a&&"function"==typeof a.$validate&&(e.$validate=a.$validate)}for(const r in e){const a=e[r];if(a)if(Array.isArray(a))for(let e=0;e<a.length;e++){const r=a[e];r&&"object"==typeof r&&t.push(r)}else"object"==typeof a&&t.push(a)}}}}},ValidationError:e,deepClone:_};"undefined"!=typeof module?module.exports=F:self.SchemaShield=F})();//# sourceMappingURL=index.min.js.map
1
+ (()=>{var e=class extends Error{message;item;keyword;cause;schemaPath="";instancePath="";data;schema;constructor(e){super(e),this.message=e}_getCause(t="#",r="#"){let a=`${t}/${this.keyword}`,i=`${r}`;return void 0!==this.item&&("string"==typeof this.item&&this.schema&&"object"==typeof this.schema&&this.item in this.schema&&(a+=`/${this.item}`),i+=`/${this.item}`),this.instancePath=i,this.schemaPath=a,this.cause&&this.cause instanceof e?this.cause._getCause(a,i):this}getCause(){return this._getCause()}_getTree(){const e={message:this.message,keyword:this.keyword,item:this.item,schemaPath:this.schemaPath,instancePath:this.instancePath,data:this.data};return this.cause&&(e.cause=this.cause._getTree()),e}getTree(){return this.getCause(),this._getTree()}getPath(){const e=this.getCause();return{schemaPath:e.schemaPath,instancePath:e.instancePath}}},t=()=>!0;function r(r,a,n){if(n)return t;const s=new e(`Invalid ${r}`);return s.keyword=r,s.schema=a,i(`defineError_${r}`,(e,t={})=>(s.message=e,s.item=t.item,s.cause=t.cause&&!0!==t.cause?t.cause:void 0,s.data=t.data,s))}function a(e){return!!e&&"object"==typeof e&&!Array.isArray(e)&&"$validate"in e}function i(e,t){return Object.defineProperty(t,"name",{value:e})}var n=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,s=/^P(?!$)((\d+Y)?(\d+M)?(\d+W)?(\d+D)?)(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?$/,o=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,l=/^(?!\.)(?!.*\.$)[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,20}(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]{1,21}){0,2}@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\.[a-z0-9](?:[a-z0-9-]{0,60}[a-z0-9])?){0,3}$/i,f=/^[a-z0-9][a-z0-9-]{0,62}(?:\.[a-z0-9][a-z0-9-]{0,62})*[a-z0-9]$/i,u=/^(\d{4})-(\d{2})-(\d{2})$/,c=/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(\.\d+)?(Z|([+-])([01]\d|2[0-3]):([0-5]\d))$/,d=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,h=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,y=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,p=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,m=/^[^\s!@#$%^&*()_+\=\[\]{};':"\\|,<>\/?]+$/,v=[31,28,31,30,31,30,31,31,30,31,30,31];function b(e,t){const r=e.charCodeAt(t)-48,a=e.charCodeAt(t+1)-48;return r<0||r>9||a<0||a>9?-1:10*r+a}function g(e,t,r){let a=0,i=t;for(let n=t;n<=r;n++){if(n!==r&&46!==e.charCodeAt(n))continue;const t=n-i;if(t<1||t>3)return!1;if(t>1&&48===e.charCodeAt(i))return!1;let s=0;for(let t=i;t<n;t++){const r=e.charCodeAt(t)-48;if(r<0||r>9)return!1;s=10*s+r}if(s>255)return!1;a++,i=n+1}return 4===a}var A={"date-time"(e){const t=e.length;if(t<19)return!1;if(45!==e.charCodeAt(4)||45!==e.charCodeAt(7)||58!==e.charCodeAt(13)||58!==e.charCodeAt(16))return!1;const r=e.charCodeAt(10);if(84!==r&&116!==r)return!1;const a=((e,t)=>{const r=e.charCodeAt(0)-48,a=e.charCodeAt(1)-48,i=e.charCodeAt(2)-48,n=e.charCodeAt(3)-48;return r<0||r>9||a<0||a>9||i<0||i>9||n<0||n>9?-1:1e3*r+100*a+10*i+n})(e),i=b(e,5),n=b(e,8),s=b(e,11),o=b(e,14),l=b(e,17);if(a<0||i<0||n<0||s<0||o<0||l<0)return!1;if(s>23||o>59||l>60)return!1;let f=19,u=null,c=0,d=0;if(f<t&&46===e.charCodeAt(f)){f++;const r=f;for(;f<t&&(h=e.charCodeAt(f))>=48&&h<=57;)f++;if(f===r)return!1}var h;if(f<t){const r=e.charCodeAt(f);if(90===r||122===r)f++;else{if(43!==r&&45!==r)return!1;if(u=43===r?"+":"-",f+6>t||58!==e.charCodeAt(f+3))return!1;if(c=b(e,f+1),d=b(e,f+4),c<0||d<0||c>23||d>59)return!1;f+=6}}if(f!==t)return!1;if(i<1||i>12)return!1;if(n<1)return!1;const y=2===i?a%4!=0||a%100==0&&a%400!=0?28:29:v[i-1];if(!y||n>y)return!1;if(60===l){let e=60*s+o;if(u){const t=60*c+d;e+="+"===u?-t:t,e%=1440,e<0&&(e+=1440)}if(1439!==e)return!1}return!0},uri(e){return o.test(e)},email(e){return l.test(e)},ipv4(e){return(e=>g(e,0,e.length))(e)},ipv6(e){return(e=>{const t=e.length;if(0===t)return!1;let r=!1,a=!1,i=0,n=0;for(;n<t;){if(58===e.charCodeAt(n)){if(r=!0,n+1<t&&58===e.charCodeAt(n+1)){if(a)return!1;if(a=!0,n+=2,n===t)break;continue}return!1}const o=n;let l=0;for(;n<t&&((s=e.charCodeAt(n))>=48&&s<=57||s>=65&&s<=70||s>=97&&s<=102);){if(l++,l>4)return!1;n++}if(0===l)return!1;if(n<t&&46===e.charCodeAt(n))return!!r&&!!g(e,o,t)&&(a?i<6:6===i);if(i++,i>8)return!1;if(n===t)break;if(58!==e.charCodeAt(n))return!1;if(r=!0,n++,n===t)return!1;if(58===e.charCodeAt(n)){if(a)return!1;if(a=!0,n++,n===t)break}}var s;return!!r&&(a?i<8:8===i)})(e)},hostname(e){return f.test(e)},date(e){const t=u.exec(e);if(!t)return!1;const[,r,a,i]=t,n=Number(r),s=Number(a),o=Number(i);if(s<1||s>12)return!1;if(o<1)return!1;const l=2===s?n%4!=0||n%100==0&&n%400!=0?28:29:v[s-1];return!!l&&o<=l},regex(e){try{return new RegExp(e),!0}catch(e){return!1}},"json-pointer"(e){return(e=>{if(""===e)return!0;if(47!==e.charCodeAt(0))return!1;for(let t=1;t<e.length;t++){if(126!==e.charCodeAt(t))continue;const r=e.charCodeAt(t+1);if(48!==r&&49!==r)return!1;t++}return!0})(e)},"relative-json-pointer"(e){return(e=>{if(0===e.length)return!0;let t=0;for(;t<e.length;){const r=e.charCodeAt(t);if(r<48||r>57)break;t++}if(0===t)return!1;if(t===e.length)return!0;if(35===e.charCodeAt(t))return t+1===e.length;if(47!==e.charCodeAt(t))return!1;for(t+=1;t<e.length;t++){if(126!==e.charCodeAt(t))continue;const r=e.charCodeAt(t+1);if(48!==r&&49!==r)return!1;t++}return!0})(e)},time(e){return c.test(e)},"uri-reference"(e){return!e.includes("\\")&&d.test(e)},"uri-template"(e){return(e=>{for(let t=0;t<e.length;t++){const r=e.charCodeAt(t);if(125===r)return!1;if(123!==r)continue;const a=e.indexOf("}",t+1);if(-1===a||a===t+1)return!1;t=a}return!0})(e)},duration(e){return s.test(e)},uuid(e){return n.test(e)},iri(e){return h.test(e)},"iri-reference"(e){return!e.includes("\\")&&y.test(e)},"idn-email"(e){return p.test(e)},"idn-hostname"(e){return m.test(e)}},w={object(e){return null!==e&&"object"==typeof e&&!Array.isArray(e)},array(e){return Array.isArray(e)},string(e){return"string"==typeof e},number(e){return"number"==typeof e},integer(e){return"number"==typeof e&&e%1==0},boolean(e){return"boolean"==typeof e},null(e){return null===e},timestamp:!1,int8:!1,uint8:!1,int16:!1,uint16:!1,int32:!1,uint32:!1,float32:!1,float64:!1};function O(e,t){if(Object.is(e,t))return!1;if(Array.isArray(e)){if(!1===Array.isArray(t))return!0;if(e.length!==t.length)return!0;for(let r=0;r<t.length;r++)if(O(e[r],t[r]))return!0;return!1}if("object"==typeof e&&null!==e){if("object"!=typeof t||null===t)return!0;for(const r in t)if(O(e[r],t[r]))return!0;for(const r in e)if(!(r in t)&&O(e[r],void 0))return!0;return!1}return!0}function $(e){return null===e||"string"==typeof e||"number"==typeof e||"boolean"==typeof e}function j(e){const t=e.length;if(0===t)return"0";const r=e[0],a=e[t-1],i=null===r?"null":typeof r,n=null===a?"null":typeof a;let s="";if(Array.isArray(r)){const e=k(r);s=null===e?`a:${r.length}`:e}let o="";if(Array.isArray(a)){const e=k(a);o=null===e?`a:${a.length}`:e}return`${t}:${i}:${s}:${n}:${o}`}function P(e){const t=Object.keys(e).sort();return`${t.length}:${t.join("")}`}function k(e){const t=e.length;if(0===t)return"a:0";if(!$(e[0])||!$(e[t-1]))return null;let r=`a:${t}:`;for(let a=0;a<t;a++){const t=e[a];if(null!==t)if("string"!=typeof t)if("number"!=typeof t){if("boolean"!=typeof t)return null;r+=t?"b:1;":"b:0;"}else{if(Number.isNaN(t)){r+="n:NaN;";continue}if(Object.is(t,-0)){r+="n:-0;";continue}r+=`n:${t};`}else r+=`s${t.length}:${t};`;else r+="l;"}return r}var V={items(e,t,r){if(!Array.isArray(t))return;const a=e.items,i=t.length;if("boolean"==typeof a)return!1===a&&i>0?r("Array items are not allowed",{data:t}):void 0;if(Array.isArray(a)){const e=a.length,n=e<i?e:i;for(let e=0;e<n;e++){const i=a[e];if("boolean"==typeof i){if(!1===i&&void 0!==t[e])return r("Array item is not allowed",{item:e,data:t[e]});continue}const n=i&&i.$validate;if("function"==typeof n){const a=n(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}}return}const n=a&&a.$validate;if("function"==typeof n)for(let e=0;e<i;e++){const a=n(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}},elements(e,t,r){if(!Array.isArray(t))return;const a=e.elements,i=a&&a.$validate;if("function"==typeof i)for(let e=0;e<t.length;e++){const a=i(t[e]);if(a)return r("Array item is invalid",{item:e,cause:a,data:t[e]})}},minItems(e,t,r){if(Array.isArray(t)&&!(t.length>=e.minItems))return r("Array is too short",{data:t})},maxItems(e,t,r){if(Array.isArray(t)&&!(t.length<=e.maxItems))return r("Array is too long",{data:t})},additionalItems(e,t,r){if(!Array.isArray(t)||!Array.isArray(e.items))return;let i=e._tupleItemsLength;if(void 0===i&&(i=e.items.length,Object.defineProperty(e,"_tupleItemsLength",{value:i,enumerable:!1,configurable:!1,writable:!1})),!(t.length<=i)){if(!1===e.additionalItems)return r("Array is too long",{data:t});if(!e.additionalItems||"object"!=typeof e.additionalItems||Array.isArray(e.additionalItems));else if(a(e.additionalItems)){for(let a=i;a<t.length;a++){const i=e.additionalItems.$validate(t[a]);if(i)return r("Array item is invalid",{item:a,cause:i,data:t[a]})}return}}},uniqueItems(e,t,r){if(!Array.isArray(t)||!e.uniqueItems)return;const a=t.length;if(a<=1)return;if(a<=8){for(let e=0;e<a;e++){const i=t[e];for(let n=e+1;n<a;n++){const e=t[n];if(i===e)return r("Array items are not unique",{data:e});if("number"==typeof i&&"number"==typeof e&&Number.isNaN(i)&&Number.isNaN(e))return r("Array items are not unique",{data:e});if(i&&e&&"object"==typeof i&&"object"==typeof e&&!O(i,e))return r("Array items are not unique",{data:e})}}return}const i=new Set;let n,s,o;for(let e=0;e<a;e++){const a=t[e];if($(a)){if(i.has(a))return r("Array items are not unique",{data:a});i.add(a);continue}if(!a||"object"!=typeof a)continue;if(Array.isArray(a)){const e=k(a);if(null!==e){if(n||(n=new Set),n.has(e))return r("Array items are not unique",{data:a});n.add(e);continue}s||(s=new Map);const t=j(a);let i=s.get(t);i||(i=[],s.set(t,i));for(let e=0;e<i.length;e++)if(!O(i[e],a))return r("Array items are not unique",{data:a});i.push(a);continue}o||(o=new Map);const l=P(a);let f=o.get(l);f||(f=[],o.set(l,f));for(let e=0;e<f.length;e++)if(!O(f[e],a))return r("Array items are not unique",{data:a});f.push(a)}},contains(e,t,r){if(!Array.isArray(t))return;if("boolean"==typeof e.contains)return e.contains?0===t.length?r("Array must contain at least one item",{data:t}):void 0:r("Array must not contain any items",{data:t});const a=e.contains.$validate;for(let e=0;e<t.length;e++)if(!a(t[e]))return;return r("Array must contain at least one item",{data:t})}};function _(e,t=!1,r=new WeakMap){if(null==e||"object"!=typeof e)return e;const a=e;if(r.has(a))return r.get(a);if(i=a,"function"==typeof structuredClone&&!("undefined"!=typeof Buffer&&i instanceof Buffer)&&(Array.isArray(i)||(e=>{if(!e||"object"!=typeof e)return!1;const t=Object.getPrototypeOf(e);return t===Object.prototype||null===t})(i)||i instanceof Date||i instanceof RegExp||i instanceof Map||i instanceof Set||i instanceof ArrayBuffer||ArrayBuffer.isView(i))){const e=structuredClone(a);return r.set(a,e),e}var i;let n;switch(!0){case Array.isArray(a):n=[],r.set(a,n);for(let e=0,i=a.length;e<i;e++)n[e]=_(a[e],t,r);return n;case a instanceof Date:return n=new Date(a.getTime()),r.set(a,n),n;case a instanceof RegExp:return n=new RegExp(a.source,a.flags),r.set(a,n),n;case a instanceof Map:n=new Map,r.set(a,n);for(const[e,i]of a.entries())n.set(_(e,t,r),_(i,t,r));return n;case a instanceof Set:n=new Set,r.set(a,n);for(const e of a.values())n.add(_(e,t,r));return n;case a instanceof ArrayBuffer:return n=a.slice(0),r.set(a,n),n;case ArrayBuffer.isView(a):return n=new a.constructor(a.buffer.slice(0)),r.set(a,n),n;case"undefined"!=typeof Buffer&&a instanceof Buffer:return n=Buffer.from(a),r.set(a,n),n;case a instanceof Error:n=new a.constructor(a.message),r.set(a,n);break;case a instanceof Promise||a instanceof WeakMap||a instanceof WeakSet:return n=a,r.set(a,n),n;case a.constructor&&a.constructor!==Object:if(!t)return n=a,r.set(a,n),n;n=Object.create(Object.getPrototypeOf(a)),r.set(a,n);break;default:{n={},r.set(a,n);const e=Reflect.ownKeys(a);for(let i=0,s=e.length;i<s;i++){const s=e[i];n[s]=_(a[s],t,r)}return n}}const s=Object.getOwnPropertyDescriptors(a);for(const e of Reflect.ownKeys(s)){const a=s[e];"value"in a&&(a.value=_(a.value,t,r)),Object.defineProperty(n,e,a)}return n}var x={minimum(e,t,r,a){if("number"!=typeof t)return;let i=e.minimum;return"number"==typeof e.exclusiveMinimum?i=e.exclusiveMinimum+1e-15:!0===e.exclusiveMinimum&&(i+=1e-15),t<i?r("Value is less than the minimum",{data:t}):void 0},maximum(e,t,r,a){if("number"!=typeof t)return;let i=e.maximum;return"number"==typeof e.exclusiveMaximum?i=e.exclusiveMaximum-1e-15:!0===e.exclusiveMaximum&&(i-=1e-15),t>i?r("Value is greater than the maximum",{data:t}):void 0},multipleOf(e,t,r,a){if("number"!=typeof t)return;const i=t/e.multipleOf;return isFinite(i)?((e,t,r=1e-15)=>Math.abs(e-t)<=r*Math.max(Math.abs(e),Math.abs(t)))(i,Math.round(i))?void 0:r("Value is not a multiple of the multipleOf",{data:t}):void 0},exclusiveMinimum(e,t,r,a){if("number"==typeof t&&"number"==typeof e.exclusiveMinimum&&!("minimum"in e))return t<=e.exclusiveMinimum+1e-15?r("Value is less than or equal to the exclusiveMinimum"):void 0},exclusiveMaximum(e,t,r,a){if("number"==typeof t&&"number"==typeof e.exclusiveMaximum&&!("maximum"in e))return t>=e.exclusiveMaximum?r("Value is greater than or equal to the exclusiveMaximum",{data:t}):void 0}},C=/[\\.^$*+?()[\]{}|]/;function I(e){return C.test(e)}var R=new Map;function S(e){const t=R.get(e);if(t)return t;let r;if(0===e.length)r=e=>!0;else if(I(e)){const t=e.length;if(t>=2&&"^"===e[0]&&"$"===e[t-1]){const t=e.slice(1,-1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>0===e.length:e=>e===t}else if("^"===e[0]){const t=e.slice(1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>!0:e=>e.startsWith(t)}else if("$"===e[t-1]){const t=e.slice(0,-1);r=I(t)?new RegExp(e,"u"):0===t.length?e=>!0:e=>e.endsWith(t)}else r=new RegExp(e,"u")}else r=t=>t.includes(e);return R.set(e,r),r}var M=512;function q(e){let t=e._patternPropertyEntries;if(t)return t;if(!e.patternProperties||"object"!=typeof e.patternProperties||Array.isArray(e.patternProperties))return;const r=Object.keys(e.patternProperties);t=new Array(r.length);for(let a=0;a<r.length;a++){const i=r[a],n=S(i),s=n instanceof RegExp?e=>n.test(e):n;t[a]={schemaProp:e.patternProperties[i],match:s}}return Object.defineProperty(e,"_patternPropertyEntries",{value:t,enumerable:!1,configurable:!1,writable:!1}),t}function E(e,t,r){let a=e._patternKeyMatchIndexCache;if(a){const e=a.get(t);if(e)return e}else a=new Map,Object.defineProperty(e,"_patternKeyMatchIndexCache",{value:a,enumerable:!1,configurable:!1,writable:!1});const i=[];for(let e=0;e<r.length;e++)r[e].match(t)&&i.push(e);return a.size<M&&a.set(t,i),i}function N(e,t){const r=`_${t}BranchEntries`;let a=e[r];if(a)return a;const i=e[t]||[];a=[];for(let e=0;e<i.length;e++)a.push((n=i[e])&&"object"==typeof n&&!Array.isArray(n)?"$validate"in n&&"function"==typeof n.$validate?{kind:"validate",validate:n.$validate}:{kind:"alwaysValid"}:"boolean"==typeof n?{kind:n?"alwaysValid":"alwaysInvalid"}:{kind:"literal",value:n});var n;return Object.defineProperty(e,r,{value:a,enumerable:!1,configurable:!1,writable:!1}),a}var z={...{required(e,t,r){if(t&&"object"==typeof t&&!Array.isArray(t))for(let a=0;a<e.required.length;a++){const i=e.required[a];if(!{}.hasOwnProperty.call(t,i))return r("Required property is missing",{item:i,data:t[i]})}},properties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=e._propKeys;a||(a=Object.keys(e.properties||{}),Object.defineProperty(e,"_propKeys",{value:a,enumerable:!1,configurable:!1,writable:!1}));let i=e._requiredSet;void 0===i&&(i=Array.isArray(e.required)?new Set(e.required):null,Object.defineProperty(e,"_requiredSet",{value:i,enumerable:!1,configurable:!1,writable:!1}));for(let n=0;n<a.length;n++){const s=a[n],o=e.properties[s];if({}.hasOwnProperty.call(t,s)){if("boolean"!=typeof o){if(o&&"$validate"in o){const e=o.$validate(t[s]);if(e)return r("Property is invalid",{item:s,cause:e,data:t[s]})}}else if(!1===o)return r("Property is not allowed",{item:s,data:t[s]})}else if(i&&i.has(s)&&o&&"object"==typeof o&&!Array.isArray(o)&&"default"in o){const e=o.$validate(o.default);if(e)return r("Default property is invalid",{item:s,cause:e,data:o.default});t[s]=_(o.default)}}},values(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=e.values,i=a&&a.$validate;if("function"==typeof i)for(const e in t){if(!{}.hasOwnProperty.call(t,e))continue;const a=i(t[e]);if(a)return r("Property is invalid",{item:e,cause:a,data:t[e]})}},maxProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=0;for(const i in t)if({}.hasOwnProperty.call(t,i)&&(a++,a>e.maxProperties))return r("Too many properties",{data:t})},minProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let a=0;for(const r in t)if({}.hasOwnProperty.call(t,r)&&(a++,a>=e.minProperties))return;return r("Too few properties",{data:t})},additionalProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;let i=e._apValidate;void 0===i&&(i=a(e.additionalProperties)?e.additionalProperties.$validate:null,Object.defineProperty(e,"_apValidate",{value:i,enumerable:!1,configurable:!1,writable:!1}));const n=q(e);for(const a in t)if({}.hasOwnProperty.call(t,a)&&!(e.properties&&{}.hasOwnProperty.call(e.properties,a)||n&&n.length&&E(e,a,n).length>0)){if(!1===e.additionalProperties)return r("Additional properties are not allowed",{item:a,data:t[a]});if(i){const e=i(t[a]);if(e)return r("Additional properties are invalid",{item:a,cause:e,data:t[a]})}}},patternProperties(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=q(e);if(a&&0!==a.length)for(const i in t){if(!{}.hasOwnProperty.call(t,i))continue;const n=E(e,i,a);if(0!==n.length)for(let e=0;e<n.length;e++){const s=a[n[e]].schemaProp;if("boolean"!=typeof s){if("$validate"in s){const e=s.$validate(t[i]);if(e)return r("Property is invalid",{item:i,cause:e,data:t[i]})}}else if(!1===s)return r("Property is not allowed",{item:i,data:t[i]})}else if(!(!1!==e.additionalProperties||e.properties&&{}.hasOwnProperty.call(e.properties,i)))return r("Additional properties are not allowed",{item:i,data:t[i]})}},propertyNames(e,t,r){if(!t||"object"!=typeof t||Array.isArray(t))return;const a=e.propertyNames;if("boolean"==typeof a){if(!1===a)for(const e in t)if({}.hasOwnProperty.call(t,e))return r("Properties are not allowed",{data:t});return}const i=a&&a.$validate;if("function"==typeof i)for(const e in t){if(!{}.hasOwnProperty.call(t,e))continue;const a=i(e);if(a)return r("Property name is invalid",{item:e,cause:a,data:t[e]})}},dependencies(e,t,r){if(t&&"object"==typeof t&&!Array.isArray(t))for(const a in e.dependencies){if(a in t==0)continue;const i=e.dependencies[a];if(Array.isArray(i)){for(let e=0;e<i.length;e++)if(!(i[e]in t))return r("Dependency is not satisfied",{item:e,data:i[e]});continue}if("boolean"==typeof i){if(i)continue;return r("Dependency is not satisfied",{data:i})}if("string"==typeof i){if(i in t)continue;return r("Dependency is not satisfied",{data:i})}const n=i.$validate(t);if(n)return r("Dependency is not satisfied",{cause:n,data:t})}},then:!1,else:!1,default:!1,definitions:!1,$id:!1,$schema:!1,title:!1,description:!1,$comment:!1,examples:!1,contentMediaType:!1,contentEncoding:!1,discriminator:!1,nullable:!1},...V,...{minLength(e,t,r){if(!("string"!=typeof t||t.length>=e.minLength))return r("Value is shorter than the minimum length",{data:t})},maxLength(e,t,r){if(!("string"!=typeof t||t.length<=e.maxLength))return r("Value is longer than the maximum length",{data:t})},pattern(e,t,r){if("string"!=typeof t)return;let a=e._patternMatch,i=e._patternMatchCache;if(!a)try{const t=S(e.pattern);a=t instanceof RegExp?e=>t.test(e):t,Object.defineProperty(e,"_patternMatch",{value:a,enumerable:!1,configurable:!1,writable:!1})}catch(e){return r("Invalid regular expression",{data:t,cause:e})}if(i){if(i.has(t)){if(i.get(t))return;return r("Value does not match the pattern",{data:t})}}else i=new Map,Object.defineProperty(e,"_patternMatchCache",{value:i,enumerable:!1,configurable:!1,writable:!1});const n=a(t);return i.size<512&&i.set(t,n),n?void 0:r("Value does not match the pattern",{data:t})},format(e,t,r,a){if("string"!=typeof t)return;let i=e._formatValidate,n=e._formatResultCacheEnabled,s=e._formatResultCache;if(void 0===i&&(i=a.getFormat(e.format),Object.defineProperty(e,"_formatValidate",{value:i,enumerable:!1,configurable:!1,writable:!1})),!i)return;if(void 0===n&&(n=a.isDefaultFormatValidator(e.format,i),Object.defineProperty(e,"_formatResultCacheEnabled",{value:n,enumerable:!1,configurable:!1,writable:!1})),!n){if(i(t))return;return r("Value does not match the format",{data:t})}if(s){if(s.has(t)){if(s.get(t))return;return r("Value does not match the format",{data:t})}}else s=new Map,Object.defineProperty(e,"_formatResultCache",{value:s,enumerable:!1,configurable:!1,writable:!1});const o=i(t);return s.size<512&&s.set(t,o),o?void 0:r("Value does not match the format",{data:t})}},...x,...{enum(e,t,r){let a=e._enumCache;if(!a){const t=new Set,r=[],i=e.enum;for(let e=0;e<i.length;e++){const a=i[e];null!==a&&"object"==typeof a?r.push(a):t.add(a)}a={primitiveSet:t,objectValues:r},Object.defineProperty(e,"_enumCache",{value:a,enumerable:!1,configurable:!1,writable:!1})}if("number"==typeof t&&Number.isNaN(t)||!a.primitiveSet.has(t)){if(null!==t&&"object"==typeof t)for(let e=0;e<a.objectValues.length;e++)if(!O(a.objectValues[e],t))return;return r("Value is not one of the allowed values",{data:t})}},allOf(e,t,r){const a=N(e,"allOf");if(1===a.length){const e=a[0];if("validate"===e.kind){const a=e.validate(t);return a?r("Value is not valid",{cause:a,data:t}):void 0}if("alwaysValid"===e.kind)return;return"alwaysInvalid"===e.kind||t!==e.value?r("Value is not valid",{data:t}):void 0}for(let e=0;e<a.length;e++){const i=a[e];if("validate"!==i.kind){if("alwaysValid"!==i.kind){if("alwaysInvalid"===i.kind)return r("Value is not valid",{data:t});if(t!==i.value)return r("Value is not valid",{data:t})}}else{const e=i.validate(t);if(e)return r("Value is not valid",{cause:e,data:t})}}},anyOf(e,t,r){const a=N(e,"anyOf");if(1===a.length){const e=a[0];if("validate"===e.kind){if(!e.validate(t))return;return r("Value is not valid",{data:t})}if("alwaysValid"===e.kind)return;if("alwaysInvalid"===e.kind)return r("Value is not valid",{data:t});if(t===e.value)return;return r("Value is not valid",{data:t})}for(let e=0;e<a.length;e++){const r=a[e];if("validate"!==r.kind){if("alwaysValid"===r.kind)return;if("alwaysInvalid"!==r.kind&&t===r.value)return}else if(!r.validate(t))return}return r("Value is not valid",{data:t})},oneOf(e,t,r){const a=N(e,"oneOf");if(1===a.length){const e=a[0];if("validate"===e.kind){if(!e.validate(t))return;return r("Value is not valid",{data:t})}if("alwaysValid"===e.kind)return;if("alwaysInvalid"===e.kind)return r("Value is not valid",{data:t});if(t===e.value)return;return r("Value is not valid",{data:t})}let i=0;for(let e=0;e<a.length;e++){const n=a[e];let s=!1;if(s="validate"===n.kind?!n.validate(t):"alwaysValid"===n.kind||"alwaysInvalid"!==n.kind&&t===n.value,s&&(i++,i>1))return r("Value is not valid",{data:t})}if(1!==i)return r("Value is not valid",{data:t})},const(e,t,r){if(t!==e.const&&!(t&&"object"==typeof t&&!Array.isArray(t)&&e.const&&"object"==typeof e.const&&!Array.isArray(e.const)&&!O(t,e.const)||Array.isArray(t)&&Array.isArray(e.const)&&!O(t,e.const)))return r("Value is not valid",{data:t})},if(e,t){if("then"in e!=0||"else"in e!=0)if("boolean"!=typeof e.if){if(a(e.if))return e.if.$validate(t)?a(e.else)?e.else.$validate(t):void 0:a(e.then)?e.then.$validate(t):void 0}else if(e.if){if(a(e.then))return e.then.$validate(t)}else if(a(e.else))return e.else.$validate(t)},not:(e,t,r)=>"boolean"==typeof e.not?e.not?r("Value is not valid",{data:t}):void 0:e.not&&"object"==typeof e.not&&!Array.isArray(e.not)&&"$validate"in e.not&&e.not.$validate(t)?void 0:r("Value is not valid",{data:t}),$ref(e,t,r,a){if(e._resolvedRef)return e.$validate!==e._resolvedRef&&(e.$validate=e._resolvedRef),e._resolvedRef(t);const i=e.$ref;let n=a.getSchemaRef(i);return n||(n=a.getSchemaById(i)),n?n.$validate?(e._resolvedRef=n.$validate,e.$validate=e._resolvedRef,e._resolvedRef(t)):void 0:r(`Missing reference: ${i}`)}}},F={SchemaShield:class{types={};formats={};keywords={};immutable=!1;rootSchema=null;idRegistry=new Map;failFast=!0;constructor({immutable:e=!1,failFast:t=!0}={}){this.immutable=e,this.failFast=t;for(const[e,t]of Object.entries(w))t&&this.addType(e,t);for(const[e,t]of Object.entries(z))this.addKeyword(e,t);for(const[e,t]of Object.entries(A))t&&this.addFormat(e,t)}addType(t,r,a=!1){if(this.types[t]&&!a)throw new e(`Type "${t}" already exists`);this.types[t]=r}getType(e){return this.types[e]}addFormat(t,r,a=!1){if(this.formats[t]&&!a)throw new e(`Format "${t}" already exists`);this.formats[t]=r}getFormat(e){return this.formats[e]}isDefaultFormatValidator(e,t){return A[e]===t}addKeyword(t,r,a=!1){if(this.keywords[t]&&!a)throw new e(`Keyword "${t}" already exists`);this.keywords[t]=r}getKeyword(e){return this.keywords[e]}getSchemaRef(e){if(this.rootSchema)return((e,t)=>{if(!t||"#"===t)return e;if(t.startsWith("#/")){const r=t.split("/").slice(1);let a=e;for(const e of r){const t=decodeURIComponent(e).replace(/~1/g,"/").replace(/~0/g,"~");if(!a||"object"!=typeof a||!(t in a))return;a=a[t]}return a}if(!t.includes("#")){if(e.definitions&&e.definitions[t])return e.definitions[t];if(e.defs&&e.defs[t])return e.defs[t];if(e.$id&&"string"==typeof e.$id&&(e.$id===t||e.$id.endsWith("/"+t)))return e}})(this.rootSchema,e)}getSchemaById(e){return this.idRegistry.get(e)}compile(t){this.idRegistry.clear();const a=this.compileSchema(t);if(this.rootSchema=a,!0===a._hasRef&&this.linkReferences(a),!a.$validate)if(!1===t){const e=r("oneOf",a,this.failFast);a.$validate=i("Validate_False",t=>e("Value is not valid",{data:t}))}else if(!0===t)a.$validate=i("Validate_Any",()=>{});else{if(!1===this.isSchemaLike(t))throw new e("Invalid schema");a.$validate=i("Validate_Any",()=>{})}const n=e=>{this.rootSchema=a;const t=this.immutable?_(e):e,r=a.$validate(t);return r?{data:t,error:r,valid:!1}:{data:t,error:null,valid:!0}};return n.compiledSchema=a,n}isPlainObject(e){return!!e&&"object"==typeof e&&!Array.isArray(e)}isTrivialAlwaysValidSubschema(e){return!0===e||this.isPlainObject(e)&&0===Object.keys(e).length}shallowArrayEquals(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(let r=0;r<e.length;r++)if(e[r]!==t[r])return!1;return!0}flattenAssociativeBranches(e,t){const r=[];for(let a=0;a<t.length;a++){const i=t[a];if(this.isPlainObject(i)&&1===Object.keys(i).length&&Array.isArray(i[e])){const t=this.flattenAssociativeBranches(e,i[e]);for(let e=0;e<t.length;e++)r.push(t[e])}else r.push(i)}return r}flattenSingleWrapperOneOf(e){let t=e;for(;1===t.length;){const e=t[0];if(!this.isPlainObject(e)||1!==Object.keys(e).length||!Array.isArray(e.oneOf))break;t=e.oneOf}return t}normalizeSchemaForCompile(e){let t=e;const r=Object.keys(e),a=e=>1===r.length&&r[0]===e,i=(r,a)=>{t===e&&(t={...e}),t[r]=a};if(Array.isArray(e.allOf)){const t=this.flattenAssociativeBranches("allOf",e.allOf).filter(e=>!(this.isPlainObject(e)&&0===Object.keys(e).length));if(a("allOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.allOf)||i("allOf",t)}if(Array.isArray(e.anyOf)){const t=this.flattenAssociativeBranches("anyOf",e.anyOf);if(a("anyOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.anyOf)||i("anyOf",t)}if(Array.isArray(e.oneOf)){const t=this.flattenSingleWrapperOneOf(e.oneOf);if(a("oneOf")&&1===t.length&&this.isPlainObject(t[0]))return t[0];this.shallowArrayEquals(t,e.oneOf)||i("oneOf",t)}return t}markSchemaHasRef(e){!0!==e._hasRef&&Object.defineProperty(e,"_hasRef",{value:!0,enumerable:!1,configurable:!1,writable:!1})}shouldSkipKeyword(e,t){const r=e[t];switch(t){case"required":return Array.isArray(r)&&0===r.length;case"uniqueItems":return!1===r;case"properties":case"patternProperties":case"dependencies":return this.isPlainObject(r)&&0===Object.keys(r).length;case"propertyNames":case"items":return!0===r;case"additionalProperties":return!0===r||!1===r&&this.isPlainObject(e.patternProperties)&&Object.keys(e.patternProperties).length>0;case"additionalItems":return!0===r||!Array.isArray(e.items);case"allOf":if(!Array.isArray(r))return!1;if(0===r.length)return!0;for(let e=0;e<r.length;e++)if(!this.isTrivialAlwaysValidSubschema(r[e]))return!1;return!0;case"anyOf":if(!Array.isArray(r))return!1;for(let e=0;e<r.length;e++)if(this.isTrivialAlwaysValidSubschema(r[e]))return!0;return!1;default:return!1}}hasRequiredDefaults(e){const t=e.properties;if(!this.isPlainObject(t))return!1;const r=Object.keys(t);for(let e=0;e<r.length;e++){const a=t[r[e]];if(this.isPlainObject(a)&&"default"in a)return!0}return!1}isDefaultTypeValidator(e,t){return w[e]===t}compileSchema(e){e&&"object"==typeof e&&!Array.isArray(e)||(e=!0===e?{anyOf:[{}]}:!1===e?{oneOf:[]}:{oneOf:[e]});const t=_(e=this.normalizeSchemaForCompile(e));let a=!1;if("string"==typeof e.$id&&this.idRegistry.set(e.$id,t),"$ref"in e){a=!0;const n=this.getKeyword("$ref");if(n){const a=r("$ref",e.$ref,this.failFast);t.$validate=i("Validate_Reference",e=>n(t,e,a,this))}return this.markSchemaHasRef(t),t}const n=[],s=[];if("type"in e){const t=r("type",e,this.failFast),a=Array.isArray(e.type)?e.type:e.type.split(",").map(e=>e.trim()),o=[],l=[],f=[];let u,c=!0;for(const e of a){const t=this.getType(e);t&&(o.push(t),l.push(t.name),this.isDefaultTypeValidator(e,t)?f.push(e):c=!1)}if(0===o.length)throw r("type",e,this.failFast)("Invalid type for schema",{data:e.type});let d="";if(1===o.length&&c){const e=f[0];switch(d=e,e){case"object":u=e=>{if(null===e||"object"!=typeof e||Array.isArray(e))return t("Invalid type",{data:e})};break;case"array":u=e=>{if(!Array.isArray(e))return t("Invalid type",{data:e})};break;case"string":u=e=>{if("string"!=typeof e)return t("Invalid type",{data:e})};break;case"number":u=e=>{if("number"!=typeof e)return t("Invalid type",{data:e})};break;case"integer":u=e=>{if("number"!=typeof e||!Number.isInteger(e))return t("Invalid type",{data:e})};break;case"boolean":u=e=>{if("boolean"!=typeof e)return t("Invalid type",{data:e})};break;case"null":u=e=>{if(null!==e)return t("Invalid type",{data:e})};break;default:{const e=o[0];u=r=>{if(!e(r))return t("Invalid type",{data:r})}}}}else if(o.length>1&&c){d=f.join("_OR_");const e=f.includes("object"),r=f.includes("array"),a=f.includes("string"),i=f.includes("number"),n=f.includes("integer"),s=f.includes("boolean"),o=f.includes("null");u=l=>{const f=typeof l;if("number"===f){if(i||n&&Number.isInteger(l))return;return t("Invalid type",{data:l})}if("string"===f){if(a)return;return t("Invalid type",{data:l})}if("boolean"===f){if(s)return;return t("Invalid type",{data:l})}if("object"===f){if(null===l){if(o)return;return t("Invalid type",{data:l})}if(Array.isArray(l)){if(r)return;return t("Invalid type",{data:l})}if(e)return;return t("Invalid type",{data:l})}return t("Invalid type",{data:l})}}else if(1===o.length){d=l[0];const e=o[0];u=r=>{if(!e(r))return t("Invalid type",{data:r})}}else d=l.join("_OR_"),u=e=>{for(let t=0;t<o.length;t++)if(o[t](e))return;return t("Invalid type",{data:e})};n.push({name:d,validate:i(d,u)}),s.push(d)}const{type:o,$id:l,$ref:f,$validate:u,required:c,...d}=e,h=c?this.hasRequiredDefaults(e)?[...Object.keys(d),"required"]:["required",...Object.keys(d)]:Object.keys(d);for(const a of h){const o=this.getKeyword(a);if(!o)continue;if(this.shouldSkipKeyword(e,a))continue;const l=r(a,e[a],this.failFast),f=o.name||a;n.push({name:f,validate:i(f,e=>o(t,e,l,this))}),s.push(f)}const y=["enum","const","default","examples"];for(const r of h)if(!y.includes(r))if(!e[r]||"object"!=typeof e[r]||Array.isArray(e[r])){if(Array.isArray(e[r]))for(let i=0;i<e[r].length;i++)if(this.isSchemaLike(e[r][i])){const n=this.compileSchema(e[r][i]);!0===n._hasRef&&(a=!0),t[r][i]=n}}else{if("properties"===r){for(const i of Object.keys(e[r])){const n=this.compileSchema(e[r][i]);!0===n._hasRef&&(a=!0),t[r][i]=n}continue}const i=this.compileSchema(e[r]);!0===i._hasRef&&(a=!0),t[r]=i}if(a&&this.markSchemaHasRef(t),0===n.length)return t;if(1===n.length){const e=n[0];t.$validate=i(e.name,e.validate)}else{const e="Validate_"+s.join("_AND_"),r=e=>{for(let t=0;t<n.length;t++){const r=n[t].validate(e);if(r)return r}};t.$validate=i(e,r)}return t}isSchemaLike(e){if(e&&"object"==typeof e&&!Array.isArray(e)){if("type"in e)return!0;for(let t in e)if(t in this.keywords)return!0}return!1}linkReferences(e){const t=[e];for(;t.length>0;){const e=t.pop();if(e&&"object"==typeof e){if("string"==typeof e.$ref&&"function"==typeof e.$validate&&"Validate_Reference"===e.$validate.name){const t=e.$ref;let a=this.getSchemaRef(t);if(void 0===a&&(a=this.getSchemaById(t)),"boolean"==typeof a){if(!0===a)e.$validate=i("Validate_Ref_True",()=>{});else{const t=r("$ref",e,this.failFast);e.$validate=i("Validate_Ref_False",e=>t("Value is not valid"))}continue}a&&"function"==typeof a.$validate&&(e.$validate=a.$validate)}for(const r in e){const a=e[r];if(a)if(Array.isArray(a))for(let e=0;e<a.length;e++){const r=a[e];r&&"object"==typeof r&&t.push(r)}else"object"==typeof a&&t.push(a)}}}}},ValidationError:e,deepClone:_};"undefined"!=typeof module?module.exports=F:self.SchemaShield=F})();//# sourceMappingURL=index.min.js.map