schema-shield 1.0.0 → 1.0.2
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 +38 -12
- package/dist/formats.d.ts.map +1 -1
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1445 -447
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +1 -1
- package/dist/index.mjs +1445 -447
- package/dist/keywords/array-keywords.d.ts.map +1 -1
- package/dist/keywords/object-keywords.d.ts.map +1 -1
- package/dist/keywords/other-keywords.d.ts.map +1 -1
- package/dist/keywords/string-keywords.d.ts.map +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils/deep-freeze.d.ts +5 -0
- package/dist/utils/deep-freeze.d.ts.map +1 -0
- package/dist/utils/has-changed.d.ts +2 -0
- package/dist/utils/has-changed.d.ts.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/{utils.d.ts → utils/main-utils.d.ts} +3 -6
- package/dist/utils/main-utils.d.ts.map +1 -0
- package/dist/utils/pattern-matcher.d.ts +3 -0
- package/dist/utils/pattern-matcher.d.ts.map +1 -0
- package/lib/formats.ts +402 -84
- package/lib/index.ts +494 -46
- package/lib/keywords/array-keywords.ts +215 -21
- package/lib/keywords/number-keywords.ts +1 -1
- package/lib/keywords/object-keywords.ts +218 -113
- package/lib/keywords/other-keywords.ts +229 -76
- package/lib/keywords/string-keywords.ts +97 -7
- package/lib/types.ts +4 -5
- package/lib/utils/deep-freeze.ts +208 -0
- package/lib/utils/has-changed.ts +51 -0
- package/lib/utils/index.ts +4 -0
- package/lib/utils/main-utils.ts +190 -0
- package/lib/utils/pattern-matcher.ts +66 -0
- package/package.json +1 -1
- package/dist/utils.d.ts.map +0 -1
- package/lib/utils.ts +0 -362
package/dist/index.min.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{var e=class extends Error{message;item;keyword;cause;schemaPath="";instancePath="";data;schema;_getCause(t="#",i="#"){let r=`${t}/${this.keyword}`,n=`${i}`;return void 0!==this.item&&("string"==typeof this.item&&this.item in this.schema&&(r+=`/${this.item}`),n+=`/${this.item}`),this.instancePath=n,this.schemaPath=r,this.cause&&this.cause instanceof e?this.cause._getCause(r,n):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 i(i,r,n){if(n)return t;const a=new e(`Invalid ${i}`);a.keyword=i,a.schema=r;return o(`defineError_${i}`,(e,t={})=>(a.message=e,a.item=t.item,a.cause=t.cause&&!0!==t.cause?t.cause:void 0,a.data=t.data,a))}function r(e,t){if(Array.isArray(e)){if(!1===Array.isArray(t))return!0;if(e.length!==t.length)return!0;for(let i=0;i<t.length;i++)if(r(e[i],t[i]))return!0;return!1}if("object"==typeof e&&null!==e){if("object"!=typeof t||null===t)return!0;for(const i in t)if(r(e[i],t[i]))return!0;for(const i in e)if(r(e[i],t[i]))return!0;return!1}return!1===Object.is(e,t)}function n(e){return"object"==typeof e&&null!==e&&!Array.isArray(e)}function a(e,t=!1,i=new WeakMap){if(null==e||"object"!=typeof e)return e;if(i.has(e))return i.get(e);let r;if("function"==typeof structuredClone)return r=structuredClone(e),i.set(e,r),r;switch(!0){case Array.isArray(e):r=[],i.set(e,r);for(let n=0,s=e.length;n<s;n++)r[n]=a(e[n],t,i);return r;case e instanceof Date:return r=new Date(e.getTime()),i.set(e,r),r;case e instanceof RegExp:return r=new RegExp(e.source,e.flags),i.set(e,r),r;case e instanceof Map:r=new Map,i.set(e,r);for(const[n,s]of e.entries())r.set(a(n,t,i),a(s,t,i));return r;case e instanceof Set:r=new Set,i.set(e,r);for(const n of e.values())r.add(a(n,t,i));return r;case e instanceof ArrayBuffer:return r=e.slice(0),i.set(e,r),r;case ArrayBuffer.isView(e):return r=new e.constructor(e.buffer.slice(0)),i.set(e,r),r;case"undefined"!=typeof Buffer&&e instanceof Buffer:return r=Buffer.from(e),i.set(e,r),r;case e instanceof Error:r=new e.constructor(e.message),i.set(e,r);break;case e instanceof Promise||e instanceof WeakMap||e instanceof WeakSet:return r=e,i.set(e,r),r;case e.constructor&&e.constructor!==Object:if(!t)return r=e,i.set(e,r),r;r=Object.create(Object.getPrototypeOf(e)),i.set(e,r);break;default:{r={},i.set(e,r);const n=Reflect.ownKeys(e);for(let s=0,o=n.length;s<o;s++){const o=n[s];r[o]=a(e[o],t,i)}return r}}const n=Object.getOwnPropertyDescriptors(e);for(const e of Reflect.ownKeys(n)){const s=n[e];"value"in s&&(s.value=a(s.value,t,i)),Object.defineProperty(r,e,s)}return r}function s(e){return n(e)&&"$validate"in e}function o(e,t){return Object.defineProperty(t,"name",{value:e})}var f=/^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i,l=/^P(?!$)((\d+Y)?(\d+M)?(\d+W)?(\d+D)?)(T(?=\d)(\d+H)?(\d+M)?(\d+S)?)?$/,u=/^(\d{4})-(0[0-9]|1[0-2])-(\d{2})T(0[0-9]|1\d|2[0-3]):([0-5]\d):((?:[0-5]\d|60))(?:.\d+)?(?:([+-])(0[0-9]|1\d|2[0-3]):([0-5]\d)|Z)?$/i,d=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,c=/^(?!\.)(?!.*\.$)[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,m=/^(?:(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])\.){3}(?:25[0-5]|2[0-4][0-9]|1[0-9]{2}|[1-9][0-9]|[0-9])$/,p=/(?:\s+|:::+|^\w{5,}|\w{5}$|^:{1}\w|\w:{1}$)/,h=/^[0-9a-fA-F:.]*$/,y=/^(?:(?:[0-9a-fA-F]{1,4}:){7}(?:[0-9a-fA-F]{1,4}|:))$/,v=/(?:[0-9a-fA-F]{5,}|\D[0-9a-fA-F]{3}:)/,g=/^(?:(?:(?:[0-9a-fA-F]{1,4}(?::|$)){1,6}))|(?:::(?:[0-9a-fA-F]{1,4})){0,5}$/,b=/^[a-z0-9][a-z0-9-]{0,62}(?:\.[a-z0-9][a-z0-9-]{0,62})*[a-z0-9]$/i,$=/^(\d{4})-(\d{2})-(\d{2})$/,A=/^\/(?:[^~]|~0|~1)*$/,O=/^([0-9]+)(#|\/(?:[^~]|~0|~1)*)?$/,w=/^([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(\.\d+)?(Z|([+-])([01]\d|2[0-3]):([0-5]\d))$/,x=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,P=/^(?:[^{}]|\{[^}]+\})*$/,j=/^[a-zA-Z][a-zA-Z0-9+\-.]*:[^\s]*$/,_=/^(([^:/?#]+):)?(\/\/([^/?#]*))?([^?#]*)(\?([^#]*))?(#((?![^#]*\\)[^#]*))?/i,k=/^[^@\s]+@[^@\s]+\.[^@\s]+$/,V=/^[^\s!@#$%^&*()_+\=\[\]{};':"\\|,<>\/?]+$/,R=/\\/,S=[31,28,31,30,31,30,31,31,30,31,30,31],M={"date-time"(e){const t=e.match(u);if(!t)return!1;const[,i,r,n,a,s,o]=t,f=Number(i),l=Number(r),d=Number(n),c=Number(a),m=Number(s),p=Number(o);if(l<1||l>12)return!1;if(d<1)return!1;const h=2===l?f%4!=0||f%100==0&&f%400!=0?28:29:S[l-1];return!(!h||d>h)&&(60!==p||59===m&&23===c)},uri:e=>d.test(e),email:e=>c.test(e),ipv4:e=>m.test(e),ipv6(e){if("::"===e)return!0;if(-1===e.indexOf(":")||p.test(e))return!1;const t=-1!==e.indexOf(".");let i=e;if(t){i=e.split(":");const t=i.pop();if(!m.test(t))return!1}const r=-1!==e.indexOf("::"),n=t?i.join(":"):e;if(r)return!(n.split("::").length-1>1)&&(!!h.test(n)&&g.test(n));const a=y.test(n),s=v.test(n);return t?a||!s:a&&!s},hostname:e=>b.test(e),date(e){const t=$.exec(e);if(!t)return!1;const[,i,r,n]=t,a=Number(i),s=Number(r),o=Number(n);if(s<1||s>12)return!1;if(o<1)return!1;const f=2===s?a%4!=0||a%100==0&&a%400!=0?28:29:S[s-1];return!!f&&o<=f},regex(e){try{return new RegExp(e),!0}catch(e){return!1}},"json-pointer":e=>""===e||A.test(e),"relative-json-pointer":e=>""===e||O.test(e),time:e=>w.test(e),"uri-reference":e=>!R.test(e)&&x.test(e),"uri-template":e=>P.test(e),duration:e=>l.test(e),uuid:e=>f.test(e),iri:e=>j.test(e),"iri-reference":e=>!R.test(e)&&_.test(e),"idn-email":e=>k.test(e),"idn-hostname":e=>V.test(e)},I={object:e=>n(e),array:e=>Array.isArray(e),string:e=>"string"==typeof e,number:e=>"number"==typeof e,integer:e=>"number"==typeof e&&e%1==0,boolean:e=>"boolean"==typeof e,null:e=>null===e,timestamp:!1,int8:!1,unit8:!1,int16:!1,unit16:!1,int32:!1,unit32:!1,float32:!1,float64:!1},F={...{required(e,t,i){if(n(t))for(let r=0;r<e.required.length;r++){const n=e.required[r];if(!t.hasOwnProperty(n))return i("Required property is missing",{item:n,data:t[n]})}},properties(e,t,i){if(!n(t))return;let r=e._propKeys;r||(r=Object.keys(e.properties||{}),Object.defineProperty(e,"_propKeys",{value:r,enumerable:!1,configurable:!1,writable:!1}));let s=e._requiredKeys;void 0===s&&(s=Array.isArray(e.required)?e.required:null,Object.defineProperty(e,"_requiredKeys",{value:s,enumerable:!1,configurable:!1,writable:!1}));const o=s||[];for(let s=0;s<r.length;s++){const f=r[s],l=e.properties[f];if(Object.prototype.hasOwnProperty.call(t,f)){if("boolean"!=typeof l){if(l&&"$validate"in l){const e=l.$validate(t[f]);if(e)return i("Property is invalid",{item:f,cause:e,data:t[f]})}}else if(!1===l)return i("Property is not allowed",{item:f,data:t[f]})}else if(o.length&&-1!==o.indexOf(f)&&n(l)&&"default"in l){const e=l.$validate(l.default);if(e)return i("Default property is invalid",{item:f,cause:e,data:l.default});t[f]=a(l.default)}}},values(e,t,i){if(!n(t))return;const r=e.values,a=r&&r.$validate;if("function"!=typeof a)return;const s=Object.keys(t);for(let e=0;e<s.length;e++){const r=s[e],n=a(t[r]);if(n)return i("Property is invalid",{item:r,cause:n,data:t[r]})}},maxProperties(e,t,i){if(n(t)&&!(Object.keys(t).length<=e.maxProperties))return i("Too many properties",{data:t})},minProperties(e,t,i){if(n(t)&&!(Object.keys(t).length>=e.minProperties))return i("Too few properties",{data:t})},additionalProperties(e,t,i){if(!n(t))return;const r=Object.keys(t);let a=e._apIsCompiled;void 0===a&&(a=s(e.additionalProperties),Object.defineProperty(e,"_apIsCompiled",{value:a,enumerable:!1}));let o=e._patternPropertiesList;if(e.patternProperties&&!o){o=[];for(const t in e.patternProperties)o.push({regex:new RegExp(t,"u"),key:t});Object.defineProperty(e,"_patternPropertiesList",{value:o,enumerable:!1})}for(let n=0;n<r.length;n++){const f=r[n];if(!e.properties||!e.properties.hasOwnProperty(f)){if(o&&o.length){let e=!1;for(let t=0;t<o.length;t++)if(o[t].regex.test(f)){e=!0;break}if(e)continue}if(!1===e.additionalProperties)return i("Additional properties are not allowed",{item:f,data:t[f]});if(a&&s(e.additionalProperties)){const r=e.additionalProperties.$validate(t[f]);if(r)return i("Additional properties are invalid",{item:f,cause:r,data:t[f]})}}}},patternProperties(e,t,i){if(!n(t))return;let r=e._patternPropertiesList;if(!r){r=[];const t=Object.keys(e.patternProperties||{});for(let e=0;e<t.length;e++){const i=t[e];r.push({regex:new RegExp(i,"u"),key:i})}Object.defineProperty(e,"_patternPropertiesList",{value:r,enumerable:!1})}const a=Object.keys(t);for(let n=0;n<r.length;n++){const{regex:s,key:o}=r[n],f=e.patternProperties[o];if("boolean"!=typeof f){if("$validate"in f)for(let e=0;e<a.length;e++){const r=a[e];if(s.test(r)){const e=f.$validate(t[r]);if(e)return i("Property is invalid",{item:r,cause:e,data:t[r]})}}}else if(!1===f)for(let e=0;e<a.length;e++){const r=a[e];if(s.test(r))return i("Property is not allowed",{item:r,data:t[r]})}}},propertyNames(e,t,i){if(!n(t))return;const r=e.propertyNames;if("boolean"==typeof r)return!1===r&&Object.keys(t).length>0?i("Properties are not allowed",{data:t}):void 0;const a=r&&r.$validate;if("function"==typeof a)for(const e in t){if(!Object.prototype.hasOwnProperty.call(t,e))continue;const r=a(e);if(r)return i("Property name is invalid",{item:e,cause:r,data:t[e]})}},dependencies(e,t,i){if(n(t))for(const r in e.dependencies){if(r in t==!1)continue;const n=e.dependencies[r];if(Array.isArray(n)){for(let e=0;e<n.length;e++)if(!(n[e]in t))return i("Dependency is not satisfied",{item:e,data:n[e]});continue}if("boolean"==typeof n){if(n)continue;return i("Dependency is not satisfied",{data:n})}if("string"==typeof n){if(n in t)continue;return i("Dependency is not satisfied",{data:n})}const a=n.$validate(t);if(a)return i("Dependency is not satisfied",{cause:a,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},...{items(e,t,i){if(!Array.isArray(t))return;const r=e.items,n=t.length;if("boolean"==typeof r)return!1===r&&n>0?i("Array items are not allowed",{data:t}):void 0;if(Array.isArray(r)){const e=r.length,a=e<n?e:n;for(let e=0;e<a;e++){const n=r[e];if("boolean"==typeof n){if(!1===n&&void 0!==t[e])return i("Array item is not allowed",{item:e,data:t[e]});continue}const a=n&&n.$validate;if("function"==typeof a){const r=a(t[e]);if(r)return i("Array item is invalid",{item:e,cause:r,data:t[e]})}}return}const a=r&&r.$validate;if("function"==typeof a)for(let e=0;e<n;e++){const r=a(t[e]);if(r)return i("Array item is invalid",{item:e,cause:r,data:t[e]})}},elements(e,t,i){if(!Array.isArray(t))return;const r=e.elements,n=r&&r.$validate;if("function"==typeof n)for(let e=0;e<t.length;e++){const r=n(t[e]);if(r)return i("Array item is invalid",{item:e,cause:r,data:t[e]})}},minItems(e,t,i){if(Array.isArray(t)&&!(t.length>=e.minItems))return i("Array is too short",{data:t})},maxItems(e,t,i){if(Array.isArray(t)&&!(t.length<=e.maxItems))return i("Array is too long",{data:t})},additionalItems(e,t,i){if(e.items&&!n(e.items)){if(!1===e.additionalItems)return t.length>e.items.length?i("Array is too long",{data:t}):void 0;if(n(e.additionalItems)){if(s(e.additionalItems)){for(let r=e.items.length;r<t.length;r++){const n=e.additionalItems.$validate(t[r]);if(n)return i("Array item is invalid",{item:r,cause:n,data:t[r]})}return}}else;}},uniqueItems(e,t,i){if(!Array.isArray(t)||!e.uniqueItems)return;const n=t.length;if(n<=1)return;const a=new Set;for(let e=0;e<n;e++){const n=t[e],s=typeof n;if(null!==n&&"string"!==s&&"number"!==s&&"boolean"!==s){if(n&&"object"==typeof n)for(let a=0;a<e;a++){const e=t[a];if(e&&"object"==typeof e&&!r(e,n))return i("Array items are not unique",{data:n})}}else{if(a.has(n))return i("Array items are not unique",{data:n});a.add(n)}}},contains(e,t,i){if(Array.isArray(t)){if("boolean"==typeof e.contains)return e.contains?0===t.length?i("Array must contain at least one item",{data:t}):void 0:i("Array must not contain any items",{data:t});for(let i=0;i<t.length;i++){if(!e.contains.$validate(t[i]))return}return i("Array must contain at least one item",{data:t})}}},...{minLength(e,t,i){if(!("string"!=typeof t||t.length>=e.minLength))return i("Value is shorter than the minimum length",{data:t})},maxLength(e,t,i){if(!("string"!=typeof t||t.length<=e.maxLength))return i("Value is longer than the maximum length",{data:t})},pattern(e,t,i){if("string"!=typeof t)return;let r=e._patternRegexp;if(!r)try{r=new RegExp(e.pattern,"u"),Object.defineProperty(e,"_patternRegexp",{value:r,enumerable:!1,configurable:!1,writable:!1})}catch(e){return i("Invalid regular expression",{data:t,cause:e})}return r.test(t)?void 0:i("Value does not match the pattern",{data:t})},format(e,t,i,r){if("string"!=typeof t)return;let n=e._formatValidate;return void 0===n&&(n=r.getFormat(e.format),Object.defineProperty(e,"_formatValidate",{value:n,enumerable:!1,configurable:!1,writable:!1})),n&&!n(t)?i("Value does not match the format",{data:t}):void 0}},...{minimum(e,t,i,r){if("number"!=typeof t)return;let n=e.minimum;return"number"==typeof e.exclusiveMinimum?n=e.exclusiveMinimum+1e-15:!0===e.exclusiveMinimum&&(n+=1e-15),t<n?i("Value is less than the minimum",{data:t}):void 0},maximum(e,t,i,r){if("number"!=typeof t)return;let n=e.maximum;return"number"==typeof e.exclusiveMaximum?n=e.exclusiveMaximum-1e-15:!0===e.exclusiveMaximum&&(n-=1e-15),t>n?i("Value is greater than the maximum",{data:t}):void 0},multipleOf(e,t,i,r){if("number"!=typeof t)return;const n=t/e.multipleOf;return isFinite(n)?function(e,t,i=1e-15){return Math.abs(e-t)<=i*Math.max(Math.abs(e),Math.abs(t))}(n,Math.round(n))?void 0:i("Value is not a multiple of the multipleOf",{data:t}):void 0},exclusiveMinimum(e,t,i,r){if("number"==typeof t&&"number"==typeof e.exclusiveMinimum&&!("minimum"in e))return t<=e.exclusiveMinimum+1e-15?i("Value is less than or equal to the exclusiveMinimum"):void 0},exclusiveMaximum(e,t,i,r){if("number"==typeof t&&"number"==typeof e.exclusiveMaximum&&!("maximum"in e))return t>=e.exclusiveMaximum?i("Value is greater than or equal to the exclusiveMaximum",{data:t}):void 0}},...{enum(e,t,i){const n=e.enum;for(let e=0;e<n.length;e++){const i=n[e];if(i===t)return;if(null!==i&&null!==t&&"object"==typeof i&&"object"==typeof t&&!r(i,t))return}return i("Value is not one of the allowed values",{data:t})},allOf(e,t,i){for(let r=0;r<e.allOf.length;r++)if(n(e.allOf[r])){if("$validate"in e.allOf[r]){const n=e.allOf[r].$validate(t);if(n)return i("Value is not valid",{cause:n,data:t})}}else if("boolean"!=typeof e.allOf[r]){if(t!==e.allOf[r])return i("Value is not valid",{data:t})}else if(Boolean(t)!==e.allOf[r])return i("Value is not valid",{data:t})},anyOf(e,t,i){for(let i=0;i<e.anyOf.length;i++){if(n(e.anyOf[i])){if("$validate"in e.anyOf[i]){if(!e.anyOf[i].$validate(t))return;continue}return}if("boolean"==typeof e.anyOf[i]&&Boolean(t)===e.anyOf[i])return;if(t===e.anyOf[i])return}return i("Value is not valid",{data:t})},oneOf(e,t,i){const r=e.oneOf;let a=0;for(let e=0;e<r.length;e++){const s=r[e];if(n(s)){if("$validate"in s){if(!s.$validate(t)&&(a++,a>1))return i("Value is not valid",{data:t});continue}if(a++,a>1)return i("Value is not valid",{data:t})}else if("boolean"!=typeof s){if(t===s&&(a++,a>1))return i("Value is not valid",{data:t})}else if(Boolean(t)===s&&(a++,a>1))return i("Value is not valid",{data:t})}if(1!==a)return i("Value is not valid",{data:t})},const(e,t,i){if(t!==e.const&&!(n(t)&&n(e.const)&&!r(t,e.const)||Array.isArray(t)&&Array.isArray(e.const)&&!r(t,e.const)))return i("Value is not valid",{data:t})},if(e,t){if("then"in e==!1&&"else"in e==!1)return;if("boolean"==typeof e.if){if(e.if){if(s(e.then))return e.then.$validate(t)}else if(s(e.else))return e.else.$validate(t);return}if(!s(e.if))return;return e.if.$validate(t)?s(e.else)?e.else.$validate(t):void 0:s(e.then)?e.then.$validate(t):void 0},not(e,t,i){if("boolean"==typeof e.not)return e.not?i("Value is not valid",{data:t}):void 0;if(n(e.not)){if("$validate"in e.not){const r=e.not.$validate(t);return r?void 0:i("Value is not valid",{cause:r,data:t})}return i("Value is not valid",{data:t})}return i("Value is not valid",{data:t})},$ref(e,t,i,r){if(e._resolvedRef)return e._resolvedRef(t);const n=e.$ref;let a=r.getSchemaRef(n);return a||(a=r.getSchemaById(n)),a?a.$validate?(e._resolvedRef=a.$validate,e._resolvedRef(t)):void 0:i(`Missing reference: ${n}`)}}},z={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(I))t&&this.addType(e,t);for(const[e,t]of Object.entries(F))this.addKeyword(e,t);for(const[e,t]of Object.entries(M))t&&this.addFormat(e,t)}addType(t,i,r=!1){if(this.types[t]&&!r)throw new e(`Type "${t}" already exists`);this.types[t]=i}getType(e){return this.types[e]}addFormat(t,i,r=!1){if(this.formats[t]&&!r)throw new e(`Format "${t}" already exists`);this.formats[t]=i}getFormat(e){return this.formats[e]}addKeyword(t,i,r=!1){if(this.keywords[t]&&!r)throw new e(`Keyword "${t}" already exists`);this.keywords[t]=i}getKeyword(e){return this.keywords[e]}getSchemaRef(e){if(this.rootSchema)return function(e,t){if(!t||"#"===t)return e;if(t.startsWith("#/")){const i=t.split("/").slice(1);let r=e;for(const e of i){const t=decodeURIComponent(e).replace(/~1/g,"/").replace(/~0/g,"~");if(!r||"object"!=typeof r||!(t in r))return;r=r[t]}return r}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 i=this.compileSchema(t);if(this.rootSchema=i,this.linkReferences(i),!i.$validate){if(!1===this.isSchemaLike(t))throw new e("Invalid schema");i.$validate=o("Validate_Any",()=>{})}const r=e=>{this.rootSchema=i;const t=this.immutable?a(e):e,r=i.$validate(t);return r?{data:t,error:r,valid:!1}:{data:t,error:null,valid:!0}};return r.compiledSchema=i,r}compileSchema(e){n(e)||(e=!0===e?{anyOf:[{}]}:!1===e?{oneOf:[]}:{oneOf:[e]});const t=a(e);if("string"==typeof e.$id&&this.idRegistry.set(e.$id,t),"$ref"in e){const r=this.getKeyword("$ref");if(r){const n=i("$ref",e.$ref,this.failFast);t.$validate=o("Validate_Reference",e=>r(t,e,n,this))}return t}const r=[],s=[];if("type"in e){const t=i("type",e,this.failFast),n=Array.isArray(e.type)?e.type:e.type.split(",").map(e=>e.trim()),a=[],f=[];for(const e of n){const t=this.getType(e);t&&(a.push(t),f.push(t.name))}if(0===a.length)throw i("type",e,this.failFast)("Invalid type for schema",{data:e.type});let l,u="";if(1===a.length){u=f[0];const e=a[0];l=i=>{if(!e(i))return t("Invalid type",{data:i})}}else u=f.join("_OR_"),l=e=>{for(let t=0;t<a.length;t++)if(a[t](e))return;return t("Invalid type",{data:e})};const d=(e,t)=>l(t);r.push({fn:o(u,d),defineError:t}),s.push(u)}const{type:f,$id:l,$ref:u,$validate:d,required:c,...m}=e,p=c?[...Object.keys(m),"required"]:Object.keys(m);for(const t of p){const n=this.getKeyword(t);if(n){const a=i(t,e[t],this.failFast),o=n.name||t;r.push({fn:n,defineError:a}),s.push(o)}}const h=["enum","const","default","examples"];for(const i of p)if(!h.includes(i))if(n(e[i])){if("properties"===i){for(const r of Object.keys(e[i]))t[i][r]=this.compileSchema(e[i][r]);continue}t[i]=this.compileSchema(e[i])}else if(Array.isArray(e[i]))for(let r=0;r<e[i].length;r++)this.isSchemaLike(e[i][r])&&(t[i][r]=this.compileSchema(e[i][r]));else;if(0===r.length)return t;if(1===r.length){const e=r[0];t.$validate=o(s[0],i=>e.fn(t,i,e.defineError,this))}else{const e="Validate_"+s.join("_AND_"),i=e=>{for(let i=0;i<r.length;i++){const n=r[i],a=n.fn(t,e,n.defineError,this);if(a)return a}};t.$validate=o(e,i)}return t}isSchemaLike(e){if(n(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 r=this.getSchemaRef(t);if(void 0===r&&(r=this.getSchemaById(t)),"boolean"==typeof r){if(!0===r)e.$validate=o("Validate_Ref_True",()=>{});else{const t=i("$ref",e,this.failFast);e.$validate=o("Validate_Ref_False",e=>t("Value is not valid"))}continue}r&&"function"==typeof r.$validate&&(e.$validate=r.$validate)}for(const i in e){const r=e[i];if(r)if(Array.isArray(r))for(let e=0;e<r.length;e++){const i=r[e];i&&"object"==typeof i&&t.push(i)}else"object"==typeof r&&t.push(r)}}}}},ValidationError:e,deepClone:a};"undefined"!=typeof module?module.exports=z:self.SchemaShield=z})();//# sourceMappingURL=index.min.js.map
|
|
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
|