@jarenjs/validate 0.8.4 → 0.34.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/ARCHITECTURE.md +1131 -0
  2. package/LICENSE +21 -0
  3. package/README.md +796 -2
  4. package/dist/types/array.d.ts +2 -0
  5. package/dist/types/bigint.d.ts +1 -0
  6. package/dist/types/combine.d.ts +1 -0
  7. package/dist/types/condition.d.ts +1 -0
  8. package/dist/types/content.d.ts +3 -0
  9. package/dist/types/data.d.ts +7 -0
  10. package/dist/types/dollar-data.d.ts +11 -0
  11. package/dist/types/dynamic-ref.d.ts +44 -0
  12. package/dist/types/enum.d.ts +1 -0
  13. package/dist/types/format.d.ts +21 -0
  14. package/dist/types/index.d.ts +972 -0
  15. package/dist/types/messages.d.ts +142 -0
  16. package/dist/types/normalize.d.ts +107 -0
  17. package/dist/types/number.d.ts +1 -0
  18. package/dist/types/object.d.ts +3 -0
  19. package/dist/types/query-keyword.d.ts +19 -0
  20. package/dist/types/query.d.ts +29 -0
  21. package/dist/types/schema.d.ts +1 -0
  22. package/dist/types/string.d.ts +1 -0
  23. package/dist/types/tools.d.ts +109 -0
  24. package/dist/types/traverse.d.ts +32 -0
  25. package/dist/types/unevaluated.d.ts +12 -0
  26. package/docs/ERROR-MESSAGES.md +251 -0
  27. package/package.json +37 -7
  28. package/src/array.js +610 -0
  29. package/src/bigint.js +108 -0
  30. package/src/combine.js +276 -0
  31. package/src/condition.js +129 -0
  32. package/src/content.js +83 -0
  33. package/src/data.js +101 -0
  34. package/src/dollar-data.js +212 -0
  35. package/src/dynamic-ref.js +121 -0
  36. package/src/enum.js +147 -0
  37. package/src/format.js +108 -0
  38. package/src/index.js +1896 -0
  39. package/src/messages.js +497 -0
  40. package/src/normalize.js +585 -0
  41. package/src/number.js +169 -0
  42. package/src/object.js +848 -0
  43. package/src/query-keyword.js +99 -0
  44. package/src/query.js +85 -0
  45. package/src/schema.js +690 -0
  46. package/src/string.js +164 -0
  47. package/src/tools.js +397 -0
  48. package/src/traverse.js +442 -0
  49. package/src/unevaluated.js +173 -0
  50. package/dist/index.js +0 -1998
  51. package/dist/index.js.map +0 -7
  52. package/dist/index.min.js +0 -2
  53. package/dist/index.min.js.map +0 -7
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../core/src/index.js", "../../core/src/array.js", "../../core/src/number.js", "../../core/src/function.js", "../../core/src/string.js", "../src/tools.js", "../src/format.js", "../../core/src/object.js", "../src/enum.js", "../src/number.js", "../src/bigint.js", "../src/string.js", "../src/object.js", "../src/array.js", "../src/combine.js", "../src/condition.js", "../src/schema.js", "../../core/src/text/punycode.js", "../../core/src/text/index.js", "../src/traverse.js", "../src/index.js"],
4
- "sourcesContent": ["//@ts-check\nexport function isFn(data) {\n return typeof data === 'function';\n}\n\n//#region Scalar Tests\nfunction isScalarTypeEx(typeName) {\n switch (typeName) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'integer':\n case 'bigint':\n return true;\n default:\n return false;\n }\n}\n\nexport function isScalarType(data) {\n return data != null && isScalarTypeEx(typeof data);\n}\n\nexport function isStringType(data) {\n return typeof data === 'string';\n}\n\n/**\n * Checks if the given data is of boolean type.\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is a boolean, otherwise false.\n */\nexport function isBooleanType(data) {\n return data === true || data === false;\n}\n\n/**\n * Checks if the given data is of number type.\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is a number, otherwise false.\n */\nexport function isNumberType(data) {\n return data != null && typeof data === 'number';\n}\n\n/**\n * Checks if the given data is an integer type.\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is an integer, otherwise false.\n */\nexport function isIntegerType(data) {\n return Number.isInteger(data);\n}\n\nexport function isBigIntType(data) {\n return typeof data === 'bigint';\n}\n\n//#endregion\n\n//#region Scalar Getters\n/**\n * Returns the string type of the input object if it is a string; otherwise, returns the default value.\n * \n * @param {any} obj - The input object to check its type.\n * @param {string|undefined} [def=undefined] - The default value to return if the input object is not a string.\n * @returns {string} The string type of the input object or the default value.\n */\nexport function getStringType(obj, def = undefined) {\n return isStringType(obj) ? obj : def;\n}\n\n/**\n * Checks if the given object is a boolean type and returns it, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {boolean|undefined} [def=undefined] - The default value to return if the object is not a boolean.\n * @returns {boolean|undefined} - The boolean value or the default value.\n */\nexport function getBooleanType(obj, def = undefined) {\n return isBooleanType(obj) ? obj : def;\n}\n\n/**\n * Checks if the given object is a number type and returns it, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {number|undefined} [def=undefined] - The default value to return if the object is not a number.\n * @returns {number|undefined} - The number value or the default value.\n */\nexport function getNumberType(obj, def = undefined) {\n return isNumberType(obj) ? obj : def;\n}\n\n/**\n * Checks if the given object is an integer type and returns it, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {number|undefined} [def=undefined] - The default value to return if the object is not an integer.\n * @returns {number|undefined} - The integer value or the default value.\n */\nexport function getIntegerType(obj, def = undefined) {\n return isIntegerType(obj) ? obj : def;\n}\n\n/**\n * Checks if the given object is a bigint type and returns it, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {bigint|undefined} [def=undefined] - The default value to return if the object is not a bigint.\n * @returns {bigint|undefined} - The bigint value or the default value.\n */\nexport function getBigIntType(obj, def = undefined) {\n return isBigIntType(obj)\n ? obj\n : def;\n}\n//#endregion\n\n//#region Object Tests\n/**\n * Checks if the input data is null.\n *\n * @param {any} data - The data to be checked.\n * @returns {boolean} - Returns true if the data is null, otherwise false.\n */\nexport function isNullValue(data) {\n return data === null;\n}\n\n/**\n * Checks if the given data is an object of a specific class.\n *\n * @param {any} data - The data to check.\n * @param {Function} type - The class type to compare against.\n * @returns {boolean} Returns true if the data is an object of the specified class; otherwise, false.\n */\nexport function isObjectOfClass(data, type) {\n return data != null && data.constructor === type;\n}\n\n/**\n * @brief test if data is an object literal\n * @param {*} data the data to test\n * @returns boolean\n */\nexport function isObjectClass(data) {\n return isObjectOfClass(data, Object);\n}\n\n/**\n * Checks if the input data is of type Map.\n *\n * @param {any} data - The data to be checked.\n * @returns {boolean} - Returns true if the data is an instance of the Map class, otherwise false.\n */\nexport function isMapClass(data) {\n return isObjectOfClass(data, Map);\n}\n\n/**\n * @brief test if data is typeof object but not an Array\n * @param {*} data the data to test\n * @returns boolean\n */\nexport function isObjectType(data) {\n return data != null\n && typeof data === 'object'\n && data.constructor !== Array;\n}\n\n/**\n * Checks if the input data is of type Array.\n *\n * @param {any} data - The data to be checked.\n * @returns {boolean} - Returns true if the data is an instance of the Array class, otherwise false.\n */\nexport function isArrayClass(data) {\n return isObjectOfClass(data, Array);\n}\n\n/**\n * Checks if the input data is of type Set.\n *\n * @param {any} data - The data to be checked.\n * @returns {boolean} - Returns true if the data is an instance of the Set class, otherwise false.\n */\nexport function isSetClass(data) {\n return isObjectOfClass(data, Set);\n}\n\nexport const TypedArray = Object.getPrototypeOf(Uint8Array);\nexport function isTypedArray(data) {\n if (data == null)\n return false;\n const proto = data.__proto__.__proto__;\n return proto != null && proto.constructor === TypedArray;\n}\n//#endregion\n\n//#region Object Getters\nexport function getObjectType(obj, def = undefined) {\n return isObjectClass(obj) ? obj : def;\n}\n\nexport function getArrayClass(obj, def = undefined) {\n return isArrayClass(obj) ? obj : def;\n}\n//#endregion\n\n/**\n * Calculates the inclusive and exclusive bounds based on the provided parameters.\n * \n * @param {function} getType - A function to determine the type of the inclusive and exclusive bounds.\n * @param {number|string|undefined} inclusive - The inclusive bound value.\n * @param {number|string|boolean|undefined} exclusive - The exclusive bound value.\n * @returns {Array} An array containing the inclusive and exclusive bounds.\n */\nexport function getInclusiveExclusiveBounds(getType, inclusive, exclusive) {\n const includes = getType(inclusive);\n const excludes = exclusive === true\n ? includes\n : getType(exclusive);\n return (excludes === undefined)\n ? [includes, undefined]\n : [undefined, excludes];\n}\n", "//@ts-check\n\nimport {\n TypedArray,\n} from './index.js';\n\n/**\n * @brief test if object is instanceof Array, Set or TypedArray!\n * @param {*} data the data to test\n * @returns boolean\n */\nexport function isArrayish(data) {\n return data != null\n && (data instanceof Array\n || data instanceof Set\n || data instanceof TypedArray);\n}\n\n/**\n * Returns a new array containing only the unique elements from the input array.\n * If the input is an array, it filters out duplicate elements.\n * If the input is a Set, it converts it to an array.\n * @param {Array|Set} arr - The input array or Set.\n * @param {Array|undefined} [def=undefined] - The default value to return if the input is neither an array nor a Set.\n * @returns {Array|undefined} A new array with unique elements, or the default value if the input is not an array or Set.\n */\nexport function getUniqueArray(arr, def = undefined) {\n if (arr == null)\n return def;\n\n return arr.constructor === Array\n ? arr.filter((el, index, a) => index === a.indexOf(el))\n : arr.constructor === Set\n ? Array.from(arr)\n : def;\n}\n\n/**\n * Checks if all elements in the input array are unique.\n * @param {Array} arr - The input array to check for uniqueness.\n * @returns {boolean} True if all elements are unique, false otherwise.\n */\nexport function isUniqueArray(arr) {\n const unique = getUniqueArray(arr);\n return unique != null\n && unique.length == arr.length;\n}\n\n/**\n * Checks if all elements in the 'values' array are included in the 'arr' array.\n * @param {Array} arr - The array to check against.\n * @param {Array} values - The array of values to check for inclusion.\n * @returns {boolean} True if all 'values' are included in 'arr', false otherwise.\n */\nexport function includesAll(arr, values) {\n return values.every(v => arr.includes(v));\n}\n", "//@ts-check\n\n/**\n * Checks if the given data is of boolean type or boolean-like (the strings 'true' or 'false').\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is boolean or boolean-like, otherwise false.\n */\nexport function isBoolishType(data) {\n return data === true\n || data === false\n || data === 'true'\n || data === 'false';\n}\n\n/**\n * Checks if the given object is a boolean type or a boolean-like string ('true' or 'false') and returns it, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {boolean|undefined} [def=undefined] - The default value to return if the object is not a boolean or boolean-like string.\n * @returns {boolean|undefined} - The boolean/boolean-like value or the default value.\n */\nexport function getBoolishType(obj, def = undefined) {\n return isBoolishType(obj) || obj === 'true' || obj === 'false'\n ? obj\n : def;\n}\n\n/**\n * Checks if the given data is number-like (can be converted to a number).\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is number-like, otherwise false.\n */\nexport function isNumbishType(data) {\n return typeof data !== 'bigint' && !Number.isNaN(Number(data));\n}\n\n/**\n * Checks if the given data is an integer-like type.\n * @param {any} data - The data to check.\n * @returns {boolean} - True if the data is an integer-like type, otherwise false.\n */\nexport function isIntishType(data) {\n return Number.isInteger(Number(data));\n}\n\n/**\n * Checks if the given object is a number-like type and returns it as a number, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {number|undefined} [def=undefined] - The default value to return if the object is not a number-like type.\n * @returns {number|undefined} - The number value or the default value.\n */\nexport function getNumbishType(obj, def = undefined) {\n return isNumbishType(obj) ? Number(obj) : def;\n}\n\n/**\n * Checks if the given object is an integer-like type and returns it as a number, otherwise returns the default value.\n * @param {any} obj - The object to check.\n * @param {number|undefined} [def=undefined] - The default value to return if the object is not an integer-like type.\n * @returns {number|undefined} - The integer value or the default value.\n */\nexport function getIntishType(obj, def = undefined) {\n return isIntishType(obj) ? Number(obj) : def;\n}\n", "//@ts-check\nimport {\n isFn,\n} from './index.js';\n\n// export * from './function-tools-xtra';\n\n/**\n * trueThat\n * acts as a dummy validator that always returns true\n * @param {any} whatever any json data input\n * @param {string | undefined} _path the current json path to the data\n * @param {any | undefined} _root the root of the json data\n * @param {string | string[] | undefined} _key a key or an array of keys\n * @returns {boolean} returns always true\n */\n// eslint-disable-next-line no-unused-vars\nexport function trueThat(whatever, _path = undefined, _root = undefined, _key = undefined) {\n const that = true;\n return whatever === true || that;\n}\n\n/**\n * falseThat\n * acts as a dummy validator that always returns false\n * @param {any} whatever any json data input\n * @param {string | undefined} _path the current json path to the data\n * @param {any | undefined} _root the root of the json data\n * @param {string | string[] | undefined} _key a key or an array of keys\n * @returns {boolean} returns always true\n */\n// eslint-disable-next-line no-unused-vars\nexport function falseThat(whatever, _path = undefined, _root = undefined, _key = undefined) {\n // eslint-disable-next-line no-constant-binary-expression\n return false && whatever;\n}\n\nexport function fallbackFn(compiled, fallback = trueThat) {\n if (isFn(compiled)) return compiled;\n return isFn(fallback)\n ? fallback\n : trueThat;\n}\n\nexport function addFunctionToArray(arr = [], fn) {\n if (fn == null) return arr;\n if (isFn(fn))\n arr.push(fn);\n else if (fn.constructor === Array) {\n for (let i = 0; i < fn.length; ++i) {\n if (isFn(fn[i]))\n arr.push(fn[i]);\n }\n }\n return arr;\n}\n", "//@ts-check\n\nimport {\n isStringType,\n isObjectOfClass,\n} from './index.js';\n\n//#region String Tools\nexport function isStringEmpty(data) {\n return typeof data === 'string' && !data;\n}\n\nexport function isStringWhiteSpace(data) {\n return data == null || /^\\s*$/.test(data);\n}\n\nexport function isStringUpperCase(str) {\n return str === str.toUpperCase();\n}\n\nexport function isStringLowerCase(str) {\n return str === str.toLowerCase();\n}\n\nexport function isRegExpType(data) {\n return isObjectOfClass(data, RegExp);\n}\n\nexport function isStringRegExp(str) {\n try {\n return createRegExp(str) != null;\n }\n // eslint-disable-next-line no-unused-vars\n catch (e) {\n return false;\n }\n}\n\nexport function createRegExp(pattern) {\n if (pattern == null)\n return undefined;\n\n if (isRegExpType(pattern))\n return pattern;\n\n if (isStringType(pattern)) {\n if (pattern[0] === '/') {\n const e = pattern.lastIndexOf('/');\n if (e >= 0) {\n const r = pattern.substring(1, e);\n const g = pattern.substring(e + 1);\n return new RegExp(r, g);\n }\n }\n else\n return new RegExp(pattern);\n }\n\n throw new Error(`Unknown Regular Expression Pattern Type: ${pattern}`);\n}\n", "//@ts-check\n\nimport {\n isBigIntType,\n isNullValue,\n isBooleanType,\n isIntegerType,\n isNumberType,\n isStringType,\n isObjectClass,\n isObjectType,\n isMapClass,\n isArrayClass,\n isSetClass,\n} from '@jarenjs/core';\n\nimport {\n isRegExpType,\n isStringWhiteSpace,\n} from '@jarenjs/core/string';\n\nimport {\n isArrayish,\n} from '@jarenjs/core/array';\n\n//#region Object\nexport function isBoolOrObjectClass(obj) {\n return isBooleanType(obj)\n || isObjectClass(obj);\n}\n\n/**\n * getBoolOrObjectClass\n * extract the data of first parameter if data is boolean or object type otherwise return default\n * @param {any} obj any data data has to be tested on boolean or object type\n * @param {boolean | object | undefined} def default return type if not boolean or object type\n * @returns {boolean | undefined} return value when boolean or object otherwise def\n */\nexport function getBoolOrObjectClass(obj, def = undefined) {\n return isBoolOrObjectClass(obj) ? obj : def;\n}\n\nexport function getArrayClassMinItems(obj, len = 1, def = undefined) {\n return (isArrayClass(obj) && obj.length >= len && obj) || def;\n}\n//#endregion\n\n//#region Schema Helpers\nexport function isOfSchemaType(schema, type) {\n const stype = schema.type;\n if (stype == null) return false;\n if (stype === type) return true;\n if (stype.constructor === Array) {\n return stype.includes(type);\n }\n if (stype.constructor === Set) {\n return stype.has(type);\n }\n return false;\n}\n\nexport function hasSchemaRef(schema) {\n return isObjectClass(schema)\n && isStringType(schema.$ref)\n && !isStringWhiteSpace(schema.$ref);\n}\n\nexport function createIsSchemaTypeHandler(type, isStrict = false) {\n switch (type) {\n case 'null': return isNullValue;\n case 'boolean': return isBooleanType;\n case 'integer': return isIntegerType;\n case 'bigint': return isBigIntType;\n case 'number': return isNumberType;\n case 'string': return isStringType;\n case 'object': return isStrict\n ? isObjectClass\n : isObjectType;\n case 'array': return isStrict\n ? isArrayish\n : isArrayClass;\n case 'set': return isSetClass;\n case 'map': return isMapClass;\n case 'tuple': return isArrayClass;\n case 'regex': return isRegExpType;\n default: break;\n }\n\n if (type === null)\n return isNullValue;\n\n if (typeof type === 'function')\n throw new Error('This is interesting!');\n\n return undefined;\n}\n//#endregion\n\nexport class ValidationResult {\n static undefThat() {\n return new ValidationResult();\n }\n\n constructor(match = false, errors = 0) {\n this.match = match;\n this.errors = Number(errors);\n }\n\n addValid(valid = true) {\n if (valid === false)// this.errors += valid|0\n this.errors++;\n return this;\n }\n\n addMatch(valid = true) {\n this.match = true;\n if (valid === false)// this.errors += valid|0\n this.errors++;\n return this;\n }\n\n addResult(result = new ValidationResult()) {\n this.match = this.match || result.match;\n this.errors += result.errors;\n return this;\n }\n\n isValid() {\n return this.errors === 0;\n }\n}\n", "import {\n isStringType,\n isFn,\n} from '@jarenjs/core';\n\nexport function registerFormatCompiler(registered, name, formatCompiler) {\n if (registered[name] == null) {\n if (isFn(formatCompiler)) {\n registered[name] = formatCompiler;\n return true;\n }\n }\n return false;\n}\n\nexport function registerFormatCompilers(registered, formatCompilers) {\n const keys = Object.keys(formatCompilers);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n const item = formatCompilers[key];\n registerFormatCompiler(registered, key, item);\n }\n return registered;\n}\n\nexport function getSchemaFormatCompiler(registered, name) {\n if (isStringType(name))\n return registered[name];\n else\n return undefined;\n}\n\nexport function compileFormatBasic(schemaObj, jsonSchema) {\n if (!isStringType(jsonSchema.format))\n return undefined;\n const compiler = getSchemaFormatCompiler(\n schemaObj.formats,\n jsonSchema.format);\n\n if (compiler)\n return compiler(schemaObj, jsonSchema);\n else\n throw new Error(`Unknown format ${jsonSchema.format}`);\n}\n", "//@ts-check\n\nimport {\n isFn,\n isScalarType,\n isBooleanType,\n isTypedArray,\n} from './index.js';\n\nexport function equalsDeep(target, source) {\n if (target === source) return true;\n if (target == null) return false;\n if (source == null) return false;\n if (isBooleanType(target)) return false;\n if (isBooleanType(source)) return false;\n\n if (isFn(target))\n return target.toString() === source.toString();\n\n if (isScalarType(target))\n return false;\n\n if (target.constructor !== source.constructor)\n return false;\n\n if (target.constructor === Object) {\n const tks = Object.keys(target);\n const sks = Object.keys(source);\n if (tks.length !== sks.length)\n return false;\n for (let i = 0; i < tks.length; ++i) {\n const key = tks[i];\n if (!equalsDeep(target[key], source[key]))\n return false;\n }\n return true;\n }\n\n if (target.constructor === Map) {\n if (target.size !== source.size)\n return false;\n for (const [key, value] of target) {\n if (source.has(key) === false)\n return false;\n if (!equalsDeep(value, source.get(key)))\n return false;\n }\n return true;\n }\n\n if (target.constructor === Array) {\n if (target.length !== source.length)\n return false;\n for (let i = 0; i < target.length; ++i) {\n if (!equalsDeep(target[i], source[i]))\n return false;\n }\n return true;\n }\n\n if (target.constructor === Set) {\n if (target.size !== source.size)\n return false;\n for (const value of target) {\n if (source.has(value) === false)\n return false;\n }\n return true;\n }\n\n if (target.constructor === RegExp) {\n return target.toString() === source.toString();\n }\n\n if (isTypedArray(target)) {\n if (target.length !== source.length)\n return false;\n for (let i = 0; i < target.length; ++i) {\n if (target[i] !== source[i])\n return false;\n }\n return true;\n }\n\n // we could test for instance of Array, Map and Set in order\n // to differentiate between types of equality.. but we dont.\n const tkeys = Object.keys(target);\n const skeys = Object.keys(source);\n if (tkeys.length !== skeys.length) return false;\n if (tkeys.length === 0) return true;\n for (let i = 0; i < tkeys.length; ++i) {\n const key = tkeys[i];\n if (!equalsDeep(target[key], source[key]))\n return false;\n }\n return true;\n}\n\n/**\n * \n * @param {Map} map \n * @param {...Map} iterables \n */\nexport function mapMerge(map, ...iterables) {\n for (const iterable of iterables) {\n for (const item of iterable) {\n map.set(...item);\n }\n }\n}\n\n/**\n * \n * @param {Set<any>} set \n * @param {...Array<Set<any>>} iterables \n */\nexport function setMerge(set, ...iterables) {\n for (const iterable of iterables) {\n for (const item of iterable) {\n set.add(item);\n }\n }\n}\n", "//@ts-check\n\nimport {\n isScalarType,\n} from '@jarenjs/core';\n\nimport {\n equalsDeep,\n} from '@jarenjs/core/object';\n\nimport {\n getArrayClassMinItems,\n} from './tools.js';\n\nexport const exampleEnumDataStructure = {\n allOf: [\n {\n enum: {\n source: false, // jsonpath!!\n data: [\n { color: 0xFFFFFF, name: 'white', type: 'greys' },\n { color: 0x000000, name: 'black', type: 'greys' },\n null, // this null will not be included in resulting enum array.\n { color: 0xFF0000, name: 'red', type: 'reds' },\n { color: 0x00FF00, name: 'green', type: 'greens' },\n { color: 0x0000FF, name: 'blue', type: 'blues' },\n ],\n group: 'type',\n label: 'name',\n value: 'color',\n },\n },\n {\n enum: {\n source: false, // jsonpath!!\n data: [\n [0xFFFFFF, 'white', 'greys'],\n [0x000000, 'black', 'greys'],\n null, // null will be ignored\n [0xFF0000, 'red', 'reds'],\n [0x00FF00, 'green', 'greens'],\n [0x0000FF, 'blue', 'blues'],\n ],\n group: 2,\n label: 1,\n value: 0,\n },\n },\n {\n enum: {\n data: [\n { value: 0xFFFFFF, label: 'white', group: 'greys' },\n { value: 0x000000, label: 'black', group: 'greys' },\n null, // null will be ignored\n { value: 0xFF0000, label: 'red', group: 'reds' },\n { value: 0x00FF00, label: 'green', group: 'greens' },\n { value: 0x0000FF, label: 'blue', group: 'blues' },\n ],\n },\n },\n {\n enum: {\n data: [\n [0xFFFFFF, 'white', 'greys'],\n [0x000000, 'black', 'greys'],\n null, // null will be ignored\n [0xFF0000, 'red', 'reds'],\n [0x00FF00, 'green', 'greens'],\n [0x0000FF, 'blue', 'blues'],\n ],\n },\n },\n ],\n};\n\nfunction compileConst(schemaObj, jsonSchema) {\n const constant = jsonSchema.const;\n if (constant === undefined) return undefined;\n\n const addError = schemaObj.createErrorHandler(constant, 'const');\n\n if (constant === null || isScalarType(constant)) {\n return function validatePrimitiveConst(data, dataPath) {\n return constant === data\n || addError(data, dataPath);\n };\n }\n else {\n return function validateComplexConst(data, dataPath) {\n return equalsDeep(constant, data)\n || addError(data, dataPath);\n };\n }\n}\n\nfunction compileEnum(schemaObj, jsonSchema) {\n const enums = getArrayClassMinItems(jsonSchema.enum, 1);\n if (enums == null) return undefined;\n\n let hasObjects = false;\n for (let i = 0; i < enums.length; ++i) {\n const e = enums[i];\n if (e != null && typeof e === 'object') {\n hasObjects = true;\n break;\n }\n }\n\n const addError = schemaObj.createErrorHandler(enums, 'enum');\n\n if (hasObjects === false) {\n return function validateEnumSimple(data, dataPath) {\n return data === undefined\n ? true\n : enums.includes(data)\n ? true\n : addError(data, dataPath);\n };\n }\n else {\n return function validateEnumDeep(data, dataPath) {\n if (data === undefined) return true;\n if (data === null || typeof data !== 'object')\n return enums.includes(data)\n ? true\n : addError(data, dataPath);\n\n for (let i = 0; i < enums.length; ++i) {\n if (equalsDeep(enums[i], data) === true)\n return true;\n }\n return addError(data, dataPath);\n };\n }\n}\n\nexport function compileEnumBasic(schemaObj, jsonSchema) {\n return [\n compileConst(schemaObj, jsonSchema),\n compileEnum(schemaObj, jsonSchema),\n ];\n}\n", "//@ts-check\n\nimport {\n isNumberType,\n getInclusiveExclusiveBounds,\n} from '@jarenjs/core';\n\nimport {\n getNumbishType,\n} from '@jarenjs/core/number';\n\nimport {\n trueThat,\n} from '@jarenjs/core/function';\n\nfunction compileNumberMaximum(schemaObj, jsonSchema) {\n const [max, emax] = getInclusiveExclusiveBounds(\n getNumbishType,\n jsonSchema.maximum,\n jsonSchema.exclusiveMaximum,\n );\n\n if (emax != null) {\n const addError = schemaObj.createErrorHandler(emax, 'exclusiveMaximum');\n\n return function validateExclusiveMaximum(data, dataPath) {\n return data < emax\n || addError(data, dataPath);\n };\n }\n else if (max != null) {\n const addError = schemaObj.createErrorHandler(max, 'maximum');\n\n return function validateMaximum(data, dataPath) {\n return data <= max\n || addError(data, dataPath);\n };\n }\n\n return undefined;\n}\n\nfunction compileNumberMinimum(schemaObj, jsonSchema) {\n const [min, emin] = getInclusiveExclusiveBounds(\n getNumbishType,\n jsonSchema.minimum,\n jsonSchema.exclusiveMinimum,\n );\n\n if (emin != null) {\n const addError = schemaObj.createErrorHandler(emin, 'exclusiveMinimum');\n\n return function validateExclusiveMinimum(data, dataPath) {\n return data > emin\n || addError(data, dataPath);\n };\n }\n else if (min != null) {\n const addError = schemaObj.createErrorHandler(min, 'minimum');\n\n return function validateMinimum(data, dataPath) {\n return data >= min\n || addError(data, dataPath);\n };\n }\n\n return undefined;\n}\n\nfunction compileNumberMultipleOf(schemaObj, jsonSchema) {\n const mulOf = getNumbishType(jsonSchema.multipleOf);\n if (mulOf == null) return undefined;\n\n const addError = schemaObj.createErrorHandler(mulOf, 'multipleOf');\n\n return function validateMultipleOf(data, dataPath) {\n return data % mulOf === 0\n || addError(data, dataPath);\n };\n}\n\nfunction compileNumberIntern(schemaObj, jsonSchema) {\n const maximum = compileNumberMaximum(schemaObj, jsonSchema);\n const minimum = compileNumberMinimum(schemaObj, jsonSchema);\n const multipleOf = compileNumberMultipleOf(schemaObj, jsonSchema);\n if (maximum == null && minimum == null && multipleOf == null)\n return undefined;\n\n const isMax = maximum || trueThat;\n const isMin = minimum || trueThat;\n const isMul = multipleOf || trueThat;\n\n return function validateNumberIntern(data, dataPath) {\n return isMax(data, dataPath)\n && isMin(data, dataPath)\n && isMul(data, dataPath);\n };\n}\n\nexport function compileNumberBasic(schemaObj, jsonSchema) {\n const intern = compileNumberIntern(schemaObj, jsonSchema);\n if (intern == null) return undefined;\n\n return function validateNumber(data, dataPath) {\n return isNumberType(data)\n ? intern(data, dataPath)\n : true;\n };\n}\n", "//@ts-check\n\nimport {\n isBigIntType,\n getBigIntType,\n getInclusiveExclusiveBounds,\n} from '@jarenjs/core';\n\nimport {\n trueThat,\n} from '@jarenjs/core/function';\n\nfunction compileBigIntMaximum(schemaObj, jsonSchema) {\n const [max, emax] = getInclusiveExclusiveBounds(\n getBigIntType,\n jsonSchema.maximum,\n jsonSchema.exclusiveMaximum,\n );\n\n if (emax != null) {\n const addError = schemaObj.createErrorHandler(emax, 'exclusiveMaximum');\n\n return function validateExclusiveMaximumBigInt(data, dataPath) {\n return data < emax\n || addError(data, dataPath);\n };\n }\n else if (max != null) {\n const addError = schemaObj.createErrorHandler(max, 'maximum');\n\n return function validateMaximumBigInt(data, dataPath) {\n return data <= max\n || addError(data, dataPath);\n };\n }\n\n return undefined;\n}\n\nfunction compileBigIntMinimum(schemaObj, jsonSchema) {\n const [min, emin] = getInclusiveExclusiveBounds(\n getBigIntType,\n jsonSchema.minimum,\n jsonSchema.exclusiveMinimum,\n );\n\n if (emin != null) {\n const addError = schemaObj.createErrorHandler(emin, 'exclusiveMinimum');\n\n return function validateExclusiveMinimumBigInt(data, dataPath) {\n return data > emin\n || addError(data, dataPath);\n };\n }\n else if (min != null) {\n const addError = schemaObj.createErrorHandler(min, 'minimum');\n\n return function validateMinimumBigInt(data, dataPath) {\n return data >= min\n || addError(data, dataPath);\n };\n }\n\n return undefined;\n}\n\nfunction compileBigIntMultipleOf(schemaObj, jsonSchema) {\n const mulOf = getBigIntType(jsonSchema.multipleOf);\n if (mulOf == null) return undefined;\n\n const addError = schemaObj.createErrorHandler(mulOf, 'multipleOf');\n\n return function validateMultipleOfBigInt(data, dataPath) {\n return data % mulOf === BigInt(0)\n || addError(data, dataPath);\n };\n}\n\nexport function compileBigIntBasic(schemaObj, jsonSchema) {\n const maximum = compileBigIntMaximum(schemaObj, jsonSchema);\n const minimum = compileBigIntMinimum(schemaObj, jsonSchema);\n const multipleOf = compileBigIntMultipleOf(schemaObj, jsonSchema);\n if (maximum == null && minimum == null && multipleOf == null) return undefined;\n\n const isMax = maximum || trueThat;\n const isMin = minimum || trueThat;\n const isMul = multipleOf || trueThat;\n\n return function validateBigIntSchema(data, dataPath) {\n if (isBigIntType(data)) {\n return isMax(data, dataPath)\n && isMin(data, dataPath)\n && isMul(data, dataPath);\n }\n return true;\n };\n}\n", "//@ts-check\n\nimport {\n isStringType,\n} from '@jarenjs/core';\n\nimport {\n getIntishType,\n} from '@jarenjs/core/number';\n\nimport {\n createRegExp,\n} from '@jarenjs/core/string';\n\nimport {\n trueThat,\n} from '@jarenjs/core/function';\n\nfunction compileMinLength(schemaObj, jsonSchema) {\n const min = getIntishType(jsonSchema.minLength) || 0;\n if (min < 1) return undefined;\n\n const addError = schemaObj.createErrorHandler(min, 'minLength');\n\n return function validateIsMinLength(len = 0, dataPath) {\n return len >= min\n || addError(len, dataPath);\n };\n}\n\nfunction compileMaxLength(schemaObj, jsonSchema) {\n const max = getIntishType(jsonSchema.maxLength) || -1;\n if (max < 0) return undefined;\n\n const addError = schemaObj.createErrorHandler(max, 'maxlength');\n\n return function validateIsMaxLength(len = 0, dataPath) {\n return len <= max\n || addError(len, dataPath);\n };\n}\n\nfunction compilePattern(schemaObj, jsonSchema) {\n const pattern = createRegExp(jsonSchema.pattern);\n if (pattern == null) return undefined;\n\n const addError = schemaObj.createErrorHandler(pattern, 'pattern');\n\n return function validateIsMatch(str = '', dataPath) {\n return pattern.test(str)\n || addError(str, dataPath);\n };\n}\n\nfunction compileStringIntern(schemaObj, jsonSchema) {\n const minLength = compileMinLength(schemaObj, jsonSchema);\n const maxLength = compileMaxLength(schemaObj, jsonSchema);\n const pattern = compilePattern(schemaObj, jsonSchema);\n if ((minLength || maxLength || pattern) == null) return undefined;\n\n const isMinLength = minLength || trueThat;\n const isMaxLength = maxLength || trueThat;\n const isMatch = pattern || trueThat;\n\n return function validateStringIntern(data, dataPath) {\n const len = data.length;\n return isMinLength(len, dataPath)\n && isMaxLength(len, dataPath)\n && isMatch(data, dataPath);\n };\n}\n\nexport function compileStringBasic(schemaObj, jsonSchema) {\n const intern = compileStringIntern(schemaObj, jsonSchema);\n if (intern == null) return undefined;\n\n return function validateStringBasic(data, dataPath) {\n return isStringType(data)\n && intern(data, dataPath);\n };\n}\n", "//@ts-check\n\nimport {\n isObjectClass,\n isArrayClass,\n getObjectType,\n} from '@jarenjs/core';\n\nimport {\n getIntishType,\n} from '@jarenjs/core/number';\n\nimport {\n createRegExp,\n} from '@jarenjs/core/string';\n\nimport {\n trueThat,\n} from '@jarenjs/core/function';\n\nimport {\n isBoolOrObjectClass,\n getBoolOrObjectClass,\n getArrayClassMinItems,\n isOfSchemaType,\n ValidationResult,\n} from './tools.js';\n\nimport {\n includesAll,\n} from '@jarenjs/core/array';\n\n//#region Primitives\nfunction compileMinProperties(schemaObj, jsonSchema) {\n const min = getIntishType(jsonSchema.minProperties) || 0;\n if (min < 1) return undefined;\n\n const addError = schemaObj.createErrorHandler(min, 'minProperties');\n return function validateMinProperties(len = 0, dataPath = '') {\n return len >= min || addError(len, dataPath);\n };\n}\n\nfunction compileMaxProperties(schemaObj, jsonSchema) {\n const max = getIntishType(jsonSchema.maxProperties) || -1;\n if (max < 0) return undefined;\n const min = getIntishType(jsonSchema.minProperties) || 0;\n if (max < min) throw new Error('maxProperties must be greater then minProperties');\n\n const addError = schemaObj.createErrorHandler(max, 'maxProperties');\n return function validateMaxProperties(len = 0, dataPath = '') {\n return len <= max || addError(len, dataPath);\n };\n}\n\nfunction compileRequiredProperties(schemaObj, jsonSchema) {\n const required = getArrayClassMinItems(jsonSchema.required, 1);\n if (required == null) return undefined;\n\n const rlength = required.length;\n /** @type {function(string, string):boolean} */\n const addError = schemaObj.createErrorHandler(required, 'requiredProperties');\n return function validateRequiredProperties(dataKeys = [], dataPath = '') {\n let valid = true;\n for (let i = 0; i < rlength; ++i) {\n const key = required[i];\n const idx = dataKeys.indexOf(key);\n if (idx === -1)\n valid &&= addError(key, dataPath);\n }\n return valid;\n };\n}\n//#endregion\n\n//#region Constraints\nfunction compilePropertyNames(schemaObj, jsonSchema) {\n const propNames = getBoolOrObjectClass(jsonSchema.propertyNames);\n if (propNames == null) return undefined;\n\n return schemaObj.createValidator(propNames, 'propertyNames');\n}\n\nfunction compileProperties(schemaObj, jsonSchema) {\n const properties = getObjectType(jsonSchema.properties);\n if (properties == null) return undefined;\n\n const keys = Object.keys(properties);\n if (keys.length === 0) return undefined;\n\n const validators = {};\n for (let i = 0; i < keys.length; i++) {\n const key = keys[i];\n const schemas = properties[key];\n const validator = schemaObj.createValidator(schemas, 'properties', key);\n if (validator != null)\n validators[key] = validator;\n }\n if (Object.keys(validators).length === 0)\n return undefined;\n\n return function validatePropertyItem(data, dataPath, dataRoot, dataKey) {\n const result = new ValidationResult();\n const validator = validators[dataKey];\n if (validator == null)\n return result;\n else {\n return result.addMatch(\n validator(data[dataKey], dataPath, dataRoot, dataKey),\n );\n }\n };\n}\n\nfunction compilePatternProperties(schemaObj, jsonSchema) {\n const entries = getObjectType(jsonSchema.patternProperties);\n if (entries == null) return undefined;\n\n const entryKeys = Object.keys(entries);\n if (entryKeys.length === 0) return undefined;\n\n const patterns = {};\n for (let i = 0; i < entryKeys.length; ++i) {\n const key = entryKeys[i];\n const pattern = createRegExp(key);\n if (pattern != null)\n patterns[key] = pattern;\n }\n\n const patternKeys = Object.keys(patterns);\n if (patternKeys.length === 0) return undefined;\n\n const validators = {};\n for (let i = 0; i < patternKeys.length; ++i) {\n const key = patternKeys[i];\n const schema = entries[key];\n const validator = schemaObj.createValidator(schema, 'patternProperties', key);\n if (validator != null)\n validators[key] = validator;\n }\n\n const validatorKeys = Object.keys(validators);\n if (validatorKeys.length === 0) return undefined;\n\n return function validatePatternPropertiesItem(data, dataPath, dataRoot, dataKey) {\n const result = new ValidationResult();\n for (let i = 0; i < validatorKeys.length; ++i) {\n const key = validatorKeys[i];\n const pattern = patterns[key];\n if (pattern.test(dataKey)) {\n const validate = validators[key];\n result.addMatch(validate(data[dataKey], dataPath, dataRoot, dataKey));\n }\n }\n return result;\n };\n}\n\nfunction compileAdditionalProperties(schemaObj, jsonSchema) {\n const additional = getBoolOrObjectClass(jsonSchema.additionalProperties);\n if (additional == null) return undefined;\n\n if (additional === false) {\n const addError = schemaObj.createErrorHandler(false, 'additionalProperties');\n\n return function validateNoAdditionalProperties(data, dataPath, dataRoot, dataKey) {\n return addError(dataKey, data);\n };\n }\n\n const validator = schemaObj.createValidator(additional, 'additionalProperties');\n\n return function validateAdditionalPropertyItem(data, dataPath, dataRoot, dataKey) {\n return validator(data[dataKey], dataPath, dataRoot, dataKey);\n };\n}\n\nfunction compileUnevaluatedProperties(schemaObj, jsonSchema) {\n const unevaluatedProperties = getBoolOrObjectClass(jsonSchema.unevaluatedProperties);\n if (unevaluatedProperties == null) return undefined;\n \n if (unevaluatedProperties === false) {\n const addError = schemaObj.createErrorHandler(false, 'unevaluatedProperties');\n return (data, dataPath, dataRoot, dataKey) => addError(dataKey, data);\n }\n\n return schemaObj.createValidator(unevaluatedProperties, 'unevaluatedProperties');\n}\n//#endregion\n\n//#region Dependencies\nfunction compileDependentRequired(schemaObj, jsonSchema) {\n const dependentRequired = getObjectType(jsonSchema.dependentRequired);\n if (dependentRequired == null)\n return undefined;\n\n if (Object.keys(dependentRequired).length === 0)\n return undefined;\n\n const addError = schemaObj.createErrorHandler(false, 'dependentRequired');\n\n return function validateDependentRequiredItem(data, dataPath, dataRoot, dataKey) {\n if (dataKey in dependentRequired) {\n const required = dependentRequired[dataKey];\n return includesAll(Object.keys(data), required)\n || addError(data, dataKey, dataPath);\n }\n return true;\n };\n}\n\nfunction compileDependentSchemas(schemaObj, jsonSchema) {\n const dependentSchemas = getObjectType(jsonSchema.dependentSchemas);\n if (dependentSchemas == null) return undefined;\n\n const validators = {};\n for (const key in dependentSchemas) {\n if (key in dependentSchemas) {\n const schema = dependentSchemas[key];\n if (!isBoolOrObjectClass(schema) && !schemaObj.options.skipErrors)\n throw new Error(`Expected Schema at '${schemaObj.path}/${key}'`);\n\n const validator = schemaObj.createValidator(schema, 'dependentSchemas', key);\n if (validator != null)\n validators[key] = validator;\n else\n throw new Error(`Expected Validator at '${schemaObj.path}/${key}'`);\n }\n }\n\n if (Object.keys(validators).length === 0)\n return undefined;\n\n return function validateDependentSchemasItem(data, dataPath, dataRoot, dataKey) {\n if (dataKey in validators) {\n const validator = validators[dataKey];\n return validator(data, dataPath, dataRoot, dataKey);\n }\n return true;\n };\n}\n\nfunction compileDependencies(schemaObj, jsonSchema) {\n const dependencies = getObjectType(jsonSchema.dependencies);\n if (dependencies == null)\n return undefined;\n\n const validators = {};\n for (const key in dependencies) {\n if (key in dependencies) {\n const right = dependencies[key];\n if (isBoolOrObjectClass(right)) {\n const validator = schemaObj.createValidator(right, 'dependencies', key);\n if (validator != null)\n validators[key] = validator;\n else\n throw new Error(`Expected Validator at '${schemaObj.path}/${key}'`);\n }\n else if (isArrayClass(right)) {\n const addError = schemaObj.createErrorHandler(right, ['dependencies', key]);\n validators[key] = function validateRequiredDependency(data, dataPath, dataRoot, dataKey) {\n return includesAll(Object.keys(data), right)\n || addError(data, dataKey, dataPath);\n };\n }\n else if (!schemaObj.options.skipErrors)\n throw new Error(`Expected Schema or Array at '${schemaObj.path}/${key}'`);\n }\n }\n\n if (Object.keys(validators).length === 0)\n return undefined;\n\n return function validateDependenciesItem(data, dataPath, dataRoot, dataKey) {\n if (dataKey in validators) {\n const validator = validators[dataKey];\n return validator(data, dataPath, dataRoot, dataKey);\n }\n return true;\n };\n}\n//#endregion\n\n//#region Main\nexport function compileObjectPrimitives(schemaObj, jsonSchema) {\n const minProperties = compileMinProperties(schemaObj, jsonSchema);\n const maxProperties = compileMaxProperties(schemaObj, jsonSchema);\n const requiredProperties = compileRequiredProperties(schemaObj, jsonSchema);\n\n if ((minProperties\n || maxProperties\n || requiredProperties) == null)\n return undefined;\n\n const isMinProperties = minProperties || trueThat;\n const isMaxProperties = maxProperties || trueThat;\n\n const hasRequiredProperties = requiredProperties || trueThat;\n\n return function validateObjectPrimitives(data, dataPath, dataRoot, dataKeys) {\n const keys = dataKeys || Object.keys(data);\n const len = keys.length;\n return isMinProperties(len, dataPath)\n && isMaxProperties(len, dataPath)\n && hasRequiredProperties(keys, dataPath);\n };\n}\n\nfunction compileObjectProperty(schemaObj, jsonSchema) {\n const namesValidator = compilePropertyNames(schemaObj, jsonSchema);\n const propertyValidator = compileProperties(schemaObj, jsonSchema);\n const patternValidator = compilePatternProperties(schemaObj, jsonSchema);\n const additionalValidator = compileAdditionalProperties(schemaObj, jsonSchema);\n const depSchemasValidator = compileDependentSchemas(schemaObj, jsonSchema);\n const dependencyValidator = compileDependencies(schemaObj, jsonSchema);\n const depRequiredValidator = compileDependentRequired(schemaObj, jsonSchema);\n const unevaluatedValidator = compileUnevaluatedProperties(schemaObj, jsonSchema);\n\n if ((patternValidator\n || namesValidator\n || propertyValidator\n || depRequiredValidator\n || depSchemasValidator\n || dependencyValidator\n || additionalValidator\n || unevaluatedValidator) == null)\n return undefined;\n\n const validateName = namesValidator || trueThat;\n const validateProperty = propertyValidator || ValidationResult.undefThat;\n const validatePattern = patternValidator || ValidationResult.undefThat;\n\n const validateDepRequired = depRequiredValidator || trueThat;\n const validateDepSchemas = depSchemasValidator || trueThat;\n const validateDependency = dependencyValidator || trueThat;\n\n return function validateObjectProperty(data, dataPath, dataRoot, dataKey) {\n const result = new ValidationResult();\n\n result.addValid(validateName(dataKey))\n .addResult(validateProperty(data, dataPath, dataRoot, dataKey))\n .addResult(validatePattern(data, dataPath, dataRoot, dataKey))\n .addValid(validateDepRequired(data, dataPath, dataRoot, dataKey))\n .addValid(validateDepSchemas(data, dataPath, dataRoot, dataKey))\n .addValid(validateDependency(data, dataPath, dataRoot, dataKey));\n\n if (additionalValidator)\n return !result.match\n ? result.addMatch(additionalValidator(data, dataPath, dataRoot, dataKey))\n : result;\n\n if (unevaluatedValidator)\n // @ts-ignore\n result.addValid(unevaluatedValidator(data, dataPath, dataRoot, dataKey));\n\n return result;\n };\n}\n\nexport function compileObjectChildren(schemaObj, jsonSchema) {\n const propertyValidator = compileObjectProperty(schemaObj, jsonSchema);\n if (propertyValidator == null)\n return undefined;\n\n return function validateObjectChildren(data, dataPath, dataRoot, dataKeys) {\n const result = new ValidationResult();\n for (let i = 0; i < dataKeys.length; ++i) {\n const dataKey = dataKeys[i];\n\n result.addResult(propertyValidator(data, dataPath, dataRoot, dataKey));\n }\n return result.isValid();\n };\n}\n\n\nexport function compileObjectSchema(schemaObj, jsonSchema) {\n if (isOfSchemaType(jsonSchema, 'map'))\n return undefined;\n\n const objectPrimitives = compileObjectPrimitives(schemaObj, jsonSchema);\n const objectChildren = compileObjectChildren(schemaObj, jsonSchema);\n\n if ((objectPrimitives\n || objectChildren) == null)\n return undefined;\n\n const validatePrimitives = objectPrimitives || trueThat;\n const validateChildren = objectChildren || trueThat;\n\n return function validateObjectSchema(data, dataPath, dataRoot) {\n if (isObjectClass(data)) {\n const dataKeys = Object.keys(data);\n return validatePrimitives(data, dataPath, dataRoot, dataKeys)\n && validateChildren(data, dataPath, dataRoot, dataKeys);\n }\n return true;\n };\n}\n//#endregion\n", "//@ts-check\n\nimport {\n isArrayClass,\n getObjectType,\n} from '@jarenjs/core';\n\nimport {\n getBoolishType,\n getIntishType,\n} from '@jarenjs/core/number';\n\nimport {\n trueThat,\n falseThat,\n} from '@jarenjs/core/function';\n\nimport {\n isUniqueArray,\n} from '@jarenjs/core/array';\n\nimport {\n getBoolOrObjectClass,\n getArrayClassMinItems,\n isOfSchemaType,\n} from './tools.js';\n\n//#region Primitives\nfunction compileMinItems(schemaObj, jsonSchema) {\n const min = getIntishType(jsonSchema.minItems) || 0;\n if (min < 1) return undefined;\n\n const addError = schemaObj.createErrorHandler(min, 'minItems');\n return function validateMinItems(len = 0, dataPath = '') {\n return len >= min || addError(len, dataPath);\n };\n}\n\nfunction compileMaxItems(schemaObj, jsonSchema) {\n const max = getIntishType(jsonSchema.maxItems) || -1;\n if (max < 0) return undefined;\n const min = getIntishType(jsonSchema.minItems) || 0;\n if (max < min) throw new Error('maxItems must be greater then minItems');\n\n const addError = schemaObj.createErrorHandler(max, 'maxItems');\n return function validateMaxItems(len = 0, dataPath = '') {\n return len <= max || addError(len, dataPath);\n };\n}\n\nfunction createBooleanValidator(schemaObj, jsonSchema, key, validationFn) {\n const value = getBoolishType(jsonSchema[key]);\n if (value !== true) return undefined;\n\n const addError = schemaObj.createErrorHandler(value, key);\n\n return function validateBooleanComparator(data, dataPath) {\n return validationFn(data) || addError(data, dataPath);\n };\n}\n\nconst compileUniqueItems = (schemaObj, jsonSchema) =>\n createBooleanValidator(schemaObj, jsonSchema, 'uniqueItems', isUniqueArray);\n//#endregion\n\n//#region Tuple\n\nfunction compileTupleInternal(schemaObj, jsonSchema, itemsKey, additionalKey) {\n const tuple = getArrayClassMinItems(jsonSchema[itemsKey], 1);\n if (tuple == null)\n return undefined;\n\n const validators = tuple.map((item, i) => {\n if (item === true) return trueThat;\n if (item === false) return falseThat;\n return schemaObj.createValidator(item, itemsKey, i);\n });\n const vlength = validators.length;\n\n const additional = getBoolOrObjectClass(jsonSchema[additionalKey], true);\n if (typeof additional === 'boolean') {\n return function validateTupleBool(data, dataPath, dataRoot, i) {\n return i >= vlength\n ? additional\n : validators[i](data, dataPath, dataRoot);\n };\n }\n\n const validateAdditional = schemaObj.createValidator(additional, additionalKey);\n return function validateTupleSchema(data, dataPath, dataRoot, i) {\n return i < vlength\n ? validators[i](data, dataPath, dataRoot)\n : validateAdditional(data, dataPath, dataRoot);\n };\n}\n\nfunction compilePrefixItems(schemaObj, jsonSchema) {\n return compileTupleInternal(schemaObj, jsonSchema, 'prefixItems', 'items');\n}\n\nfunction compileTupleItems(schemaObj, jsonSchema) {\n return compileTupleInternal(schemaObj, jsonSchema, 'items', 'additionalItems');\n}\n\n//#endregion\n\n//#region Contains\nfunction compileArrayContains(schemaObj, jsonSchema) {\n const contains = getObjectType(jsonSchema.contains);\n if (contains == null) return undefined;\n\n return schemaObj.createValidator(contains, 'contains');\n}\n\nfunction compileContainsMinMax(schemaObj, jsonSchema) {\n const contains = getObjectType(jsonSchema.contains);\n if (contains == null) return undefined;\n\n const minContains = getIntishType(jsonSchema.minContains);\n const maxContains = getIntishType(jsonSchema.maxContains);\n\n const addNonError = schemaObj.createErrorHandler(0, 'contains');\n const addMinError = schemaObj.createErrorHandler(minContains, 'minContains');\n const addMaxError = schemaObj.createErrorHandler(maxContains, 'maxContains');\n\n if (minContains == null && maxContains == null) {\n return function validateContainsAtLeastOne(count, dataPath) {\n return count > 0 || addNonError(count, dataPath);\n };\n }\n\n if (maxContains == null) {\n return function validateMinContains(count, dataPath) {\n return count >= (minContains || 0)\n || addMinError(count, dataPath);\n };\n }\n\n if (minContains == null) {\n return function validateMaxContains(count, dataPath) {\n return count === 0\n ? addNonError(count, dataPath)\n : count <= maxContains\n || addMaxError(count, dataPath);\n };\n }\n\n return function validateMinMaxContains(count, dataPath) {\n return (count >= minContains || addMinError(count, dataPath))\n && (count <= maxContains || addMaxError(count, dataPath));\n };\n}\n\nfunction compileArrayContainsBoolean(schemaObj, jsonSchema) {\n const contains = getBoolishType(jsonSchema.contains);\n if (contains === true) {\n const addError = schemaObj.createErrorHandler(true, 'contains');\n return function validateArrayContainsTrue(data, dataPath) {\n return data.length > 0\n || addError(data, dataPath);\n };\n }\n if (contains === false) {\n const addError = schemaObj.createErrorHandler(false, 'contains');\n return function validateArrayContainsFalse(data, dataPath) {\n return addError(data, dataPath);\n };\n }\n return undefined;\n}\n//#endregion\n\n//#region Items\nfunction compileArrayItemsBoolean(schemaObj, jsonSchema) {\n const items = getBoolishType(jsonSchema.items);\n if (items === true) return trueThat;\n if (items !== false) return undefined;\n\n const addError = schemaObj.createErrorHandler(false, 'items');\n return function validateArrayItemsFalse(data, dataPath) {\n return data.length === 0\n || addError(data, dataPath);\n };\n}\n\nfunction compileArrayItems(schemaObj, jsonSchema) {\n const items = getObjectType(jsonSchema.items);\n if (items == null) return undefined;\n\n return schemaObj.createValidator(items, 'items');\n}\n\nfunction compileUnevaluatedItems(schemaObj, jsonSchema) {\n const unevaluatedItems = getObjectType(jsonSchema.unevaluatedItems);\n if (unevaluatedItems == null) return undefined;\n\n return schemaObj.createValidator(unevaluatedItems, 'unevaluatedItems');\n}\n//#endregion\n\n//#region Main\nexport function compileArrayPrimitives(schemaObj, jsonSchema) {\n const minItems = compileMinItems(schemaObj, jsonSchema);\n const maxItems = compileMaxItems(schemaObj, jsonSchema);\n const uniqueItems = compileUniqueItems(schemaObj, jsonSchema);\n\n if ((minItems\n || maxItems\n || uniqueItems) == null)\n return undefined;\n\n const isMinItems = minItems || trueThat;\n const isMaxItems = maxItems || trueThat;\n const isUniqueItems = uniqueItems || trueThat;\n\n return function validateArrayPrimitives(data, dataPath) {\n const len = data.length;\n return isMinItems(len, dataPath)\n && isMaxItems(len, dataPath)\n && isUniqueItems(data, dataPath);\n };\n}\n\nfunction compileArrayChildren(schemaObj, jsonSchema) {\n const validateItem = compilePrefixItems(schemaObj, jsonSchema)\n || compileTupleItems(schemaObj, jsonSchema)\n || compileArrayItems(schemaObj, jsonSchema);\n\n const validateContains = compileArrayContains(schemaObj, jsonSchema);\n const validateUnevaluated = compileUnevaluatedItems(schemaObj, jsonSchema); // TODO\n if ((validateItem || validateContains || validateUnevaluated) == null)\n return undefined;\n\n const validateMinMax = compileContainsMinMax(schemaObj, jsonSchema) || trueThat;\n\n const maxItems = getIntishType(jsonSchema.maxItems) || 0;\n\n const resolveLength = len => (maxItems > 0\n ? Math.min(maxItems, len)\n : len);\n\n if (validateContains == null) {\n const addError = schemaObj.createErrorHandler(0, 'items');\n\n return function validateArrayItemsOnly(data, dataPath, dataRoot) {\n const len = resolveLength(data.length);\n\n let invalid = 0;\n for (let i = 0; i < len; ++i) {\n const obj = data[i];\n if (validateItem(obj, dataPath, dataRoot, i) === false) {\n invalid++;\n }\n }\n return invalid === 0\n || addError(invalid, dataPath);\n };\n }\n\n if (validateItem == null) {\n return function validateArrayContainsOnly(data, dataPath) {\n const len = resolveLength(data.length);\n\n let contains = 0;\n for (let i = 0; i < len; ++i) {\n const obj = data[i];\n if (validateContains(obj, dataPath) === true) {\n contains++;\n }\n }\n return validateMinMax(contains, dataPath);\n };\n }\n\n return function validateArrayChildren(data, dataPath, dataRoot) {\n const len = resolveLength(data.length);\n\n let invalid = 0;\n let contains = 0;\n for (let i = 0; i < len; ++i) {\n const obj = data[i];\n if (validateItem(obj, dataPath, dataRoot, i) !== true) {\n invalid++;\n }\n if (validateContains(obj, dataPath, dataRoot) === true) {\n contains++;\n }\n }\n return invalid === 0\n && validateMinMax(contains, dataPath);\n };\n}\n\nexport function compileArraySchema(schemaObj, jsonSchema) {\n if (isOfSchemaType(jsonSchema, 'set'))\n return undefined;\n\n const compiledPrimitives = compileArrayPrimitives(schemaObj, jsonSchema);\n const compiledItemsBoolean = compileArrayItemsBoolean(schemaObj, jsonSchema);\n const compiledContainsBoolean = compileArrayContainsBoolean(schemaObj, jsonSchema);\n const compiledArrayChildren = compileArrayChildren(schemaObj, jsonSchema);\n\n if ((compiledPrimitives\n || compiledItemsBoolean\n || compiledContainsBoolean\n || compiledArrayChildren) === undefined)\n return undefined;\n\n const validatePrimitives = compiledPrimitives || trueThat;\n const hasBooleanItems = compiledItemsBoolean || trueThat;\n const hasBooleanContains = compiledContainsBoolean || trueThat;\n const validateItems = compiledArrayChildren || trueThat;\n\n return function validateArraySchema(data, dataPath, dataRoot) {\n if (isArrayClass(data)) {\n return validatePrimitives(data, dataPath)\n && hasBooleanItems(data, dataPath, dataRoot)\n && hasBooleanContains(data, dataPath, dataRoot)\n && validateItems(data, dataPath, dataRoot);\n }\n return true;\n };\n}\n//#endregion\n", "//@ts-check\n\nimport {\n isFn,\n} from '@jarenjs/core';\n\nimport {\n falseThat,\n trueThat,\n} from '@jarenjs/core/function';\n\nimport {\n getBoolOrObjectClass,\n getArrayClassMinItems,\n} from './tools.js';\n\nfunction compileAllOf(schemaObj, jsonSchema) {\n const allOf = getArrayClassMinItems(jsonSchema.allOf, 1);\n if (allOf == null) return undefined;\n\n const validators = [];\n for (let i = 0; i < allOf.length; ++i) {\n const child = allOf[i];\n if (child === true)\n validators.push(trueThat);\n else if (child === false)\n validators.push(falseThat);\n else {\n const validator = schemaObj.createValidator(child, 'allOf', i);\n validators.push(validator);\n }\n }\n if (validators.length === 0) return undefined;\n\n const addError = schemaObj.createErrorHandler(allOf, 'allOf');\n\n return function validateAllOf(data, dataPath, dataRoot, dataKey) {\n if (data !== undefined) {\n for (let i = 0; i < validators.length; ++i) {\n const validator = validators[i];\n if (validator(data, dataPath, dataRoot, dataKey) === false) {\n return addError(data, dataPath);\n }\n }\n }\n return true;\n };\n}\n\nfunction compileAnyOf(schemaObj, jsonSchema) {\n const anyOf = getArrayClassMinItems(jsonSchema.anyOf, 1);\n if (anyOf == null) return undefined;\n\n const validators = [];\n for (let i = 0; i < anyOf.length; ++i) {\n const child = anyOf[i];\n if (child === true)\n validators.push(trueThat);\n else if (child === false)\n validators.push(falseThat);\n else {\n const validator = schemaObj.createValidator(child, 'anyOf', i);\n validators.push(validator);\n }\n }\n if (validators.length === 0) return undefined;\n\n const addError = schemaObj.createErrorHandler(anyOf, 'anyOf');\n\n return function validateAnyOf(data, dataPath, dataRoot, dataKey) {\n if (data !== undefined) {\n for (let i = 0; i < validators.length; ++i) {\n const validator = validators[i]; // TODO: how to silence errors of children?\n if (validator(data, dataPath, dataRoot, dataKey) === true) return true;\n }\n return addError(data, dataPath);\n }\n return true;\n };\n}\n\nfunction compileOneOf(schemaObj, jsonSchema) {\n const oneOf = getArrayClassMinItems(jsonSchema.oneOf, 1);\n if (oneOf == null)\n return undefined;\n\n const validators = [];\n for (let i = 0; i < oneOf.length; ++i) {\n const child = oneOf[i];\n if (child === true)\n validators.push(trueThat);\n else if (child === false)\n validators.push(falseThat);\n else {\n const validator = schemaObj.createValidator(child, 'oneOf', i);\n validators.push(validator);\n }\n }\n if (validators.length === 0)\n return undefined;\n\n const addError = schemaObj.createErrorHandler(oneOf, 'oneOf');\n\n return function validateOneOf(data, dataPath, dataRoot, dataKey) {\n let found = false;\n for (let i = 0; i < validators.length; ++i) {\n const validator = validators[i];\n if (validator(data, dataPath, dataRoot, dataKey) === true) {\n if (found === true)\n return addError(data, dataPath);\n found = true;\n }\n }\n return found;\n };\n}\n\nfunction compileNotOf(schemaObj, jsonSchema) {\n const notOf = getBoolOrObjectClass(jsonSchema.not);\n if (notOf == null) return undefined;\n if (notOf === true) return falseThat;\n if (notOf === false) return trueThat;\n\n const validate = schemaObj.createValidator(notOf, 'not');\n\n const addError = schemaObj.createErrorHandler(notOf, 'not');\n\n return function validateNotOf(data, dataPath, dataRoot, dataKey) {\n if (data === undefined) return true;\n return validate(data, dataPath, dataRoot, dataKey) === false\n ? true\n : addError(data, dataPath);\n };\n}\n\nexport function compileCombineSchema(schemaObj, jsonSchema) {\n const validators = [];\n function addValidator(compiler) {\n if (isFn(compiler))\n validators.push(compiler);\n }\n\n addValidator(compileAllOf(schemaObj, jsonSchema));\n addValidator(compileAnyOf(schemaObj, jsonSchema));\n addValidator(compileOneOf(schemaObj, jsonSchema));\n addValidator(compileNotOf(schemaObj, jsonSchema));\n\n if (validators.length === 0)\n return undefined;\n if (validators.length === 1)\n return validators[0];\n if (validators.length === 2) {\n const first = validators[0];\n const second = validators[1];\n return function validateCombinaSchemaPair(data, dataPath, dataRoot, dataKey) {\n return first(data, dataPath, dataRoot, dataKey)\n && second(data, dataPath, dataRoot, dataKey);\n };\n }\n else {\n return function validateCombineSchema(data, dataPath, dataRoot, dataKey) {\n for (let i = 0; i < validators.length; ++i) {\n const validator = validators[i];\n if (validator(data, dataPath, dataRoot, dataKey) === false)\n return false;\n }\n return true;\n };\n }\n}\n", "//@ts-check\n\nimport {\n fallbackFn,\n} from '@jarenjs/core/function';\n\nexport function compileConditionSchema(schemaObj, jsonSchema) {\n const validateIf = schemaObj.createValidator(jsonSchema.if, 'if');\n const tmpThen = schemaObj.createValidator(jsonSchema.then, 'then');\n const tmpElse = schemaObj.createValidator(jsonSchema.else, 'else');\n\n if (validateIf == null) return undefined;\n if (tmpThen == null && tmpElse == null) return undefined;\n\n const validateThen = fallbackFn(tmpThen);\n const validateElse = fallbackFn(tmpElse);\n return function validateCondition(data, dataRoot) {\n if (validateIf(data))\n return validateThen(data, dataRoot);\n else\n return validateElse(data, dataRoot);\n };\n}\n", "//@ts-check\n\nimport {\n isObjectType,\n getStringType,\n} from '@jarenjs/core';\n\nimport {\n getUniqueArray,\n} from '@jarenjs/core/array';\n\nimport {\n getBoolishType,\n} from '@jarenjs/core/number';\n\nimport {\n falseThat,\n trueThat,\n addFunctionToArray,\n} from '@jarenjs/core/function';\n\nimport {\n createIsSchemaTypeHandler,\n} from './tools.js';\n\nimport { compileFormatBasic } from './format.js';\nimport { compileEnumBasic } from './enum.js';\nimport { compileNumberBasic } from './number.js';\nimport { compileBigIntBasic } from './bigint.js';\nimport { compileStringBasic } from './string.js';\nimport { compileObjectSchema } from './object.js';\nimport { compileArraySchema } from './array.js';\nimport { compileCombineSchema } from './combine.js';\nimport { compileConditionSchema } from './condition.js';\n\nfunction compileRequired(schemaObj, jsonSchema) {\n // if required is not true, we have nothing.\n const required = getBoolishType(jsonSchema.required);\n if (required !== true) return undefined;\n\n const addError = schemaObj.createErrorHandler(required, 'required');\n\n // the compiled named function.\n return function validateRequiredType(data, dataPath) {\n return data === undefined\n ? addError(data, dataPath)\n : true;\n };\n}\n\nfunction compileTypeSimple(schemaObj, jsonSchema) {\n const type = getStringType(jsonSchema.type);\n if (type == null) return undefined;\n\n const isDataType = createIsSchemaTypeHandler(type);\n if (!isDataType) throw new Error(`The explicit schema type '${type}' is unknown. (TODO: add trace)`);\n\n const addError = schemaObj.createErrorHandler(type, 'type');\n\n return function validateTypeSimple(data, dataPath) {\n return isDataType(data)\n ? true\n : addError(data, dataPath);\n };\n}\n\nfunction compileTypeArray(schemaObj, jsonSchema) {\n const schemaTypes = getUniqueArray(jsonSchema.type);\n if (schemaTypes == null) return undefined;\n if (schemaTypes.length === 0)\n throw new Error('The schema type property can not be an empty array.');\n\n // collect all testable data types\n const types = [];\n const names = [];\n for (let i = 0; i < schemaTypes.length; ++i) {\n const type = schemaTypes[i];\n const callback = createIsSchemaTypeHandler(type);\n if (!callback)\n throw new Error(`The explicit schema type '${type}' of '${types} is unknown. (TODO: add trace)`);\n\n types.push(callback);\n names.push(type);\n }\n\n const addError = schemaObj.createErrorHandler(names, 'type');\n\n // if one has been found create a validator\n if (types.length === 1) {\n const one = types[0];\n return function validateSingleType(data, dataPath) {\n return one(data)\n ? true\n : addError(data, dataPath);\n };\n }\n else if (types.length === 2) {\n const one = types[0];\n const two = types[1];\n return function validateDoubleTypes(data, dataPath) {\n return one(data) || two(data)\n ? true\n : addError(data, dataPath);\n };\n }\n else if (types.length === 3) {\n const one = types[0];\n const two = types[1];\n const three = types[2];\n return function validateTripleTypes(data, dataPath) {\n return one(data) || two(data) || three(data)\n ? true\n : addError(data, dataPath);\n };\n }\n else {\n return function validateAllTypes(data, dataPath) {\n for (let i = 0; i < types.length; ++i) {\n if (types[i](data) === true) return true;\n }\n return addError(data, dataPath);\n };\n }\n}\n\nfunction compileTypeBasic(schemaObj, jsonSchema) {\n const validator = compileTypeSimple(schemaObj, jsonSchema)\n || compileTypeArray(schemaObj, jsonSchema);\n\n const nullable = getBoolishType(jsonSchema.nullable);\n if (validator == null) {\n if (nullable !== false) return undefined;\n\n const addError = schemaObj.createErrorHandler(nullable, 'nullable');\n\n return function validateNotIsNull(data, dataPath) {\n return data === undefined\n || data !== null\n || addError(data, dataPath);\n };\n }\n\n if (nullable === true) {\n return function validateNullableType(data, dataPath) {\n return data === undefined\n || data === null\n || validator(data, dataPath);\n };\n }\n\n return function validateType(data, dataPath) {\n return data === undefined\n || validator(data, dataPath);\n };\n}\n\nexport function compileSchemaObject(schemaObj, jsonSchema) {\n if (jsonSchema === true) return trueThat;\n if (jsonSchema === false) return falseThat;\n if (!isObjectType(jsonSchema))\n throw new Error('JSON Schema MUST be a boolean or Object Type');\n\n if (Object.keys(jsonSchema).length === 0)\n return trueThat;\n\n const validators = [];\n addFunctionToArray(validators, compileRequired(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileTypeBasic(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileEnumBasic(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileNumberBasic(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileBigIntBasic(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileStringBasic(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileFormatBasic(schemaObj, jsonSchema));\n\n addFunctionToArray(validators, compileArraySchema(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileObjectSchema(schemaObj, jsonSchema));\n\n addFunctionToArray(validators, compileCombineSchema(schemaObj, jsonSchema));\n addFunctionToArray(validators, compileConditionSchema(schemaObj, jsonSchema));\n\n // same as empty schema\n if (validators.length === 0)\n return trueThat;\n\n if (validators.length === 1)\n return validators[0];\n\n if (validators.length === 2) {\n const first = validators[0];\n const second = validators[1];\n return function validateDoubleSchemaObject(data, dataPath, dataRoot) {\n return first(data, dataPath, dataRoot)\n && second(data, dataPath, dataRoot);\n };\n }\n\n if (validators.length === 3) {\n const first = validators[0];\n const second = validators[1];\n const thirth = validators[2];\n return function validateTripleSchemaObject(data, dataPath, dataRoot) {\n return first(data, dataPath, dataRoot)\n && second(data, dataPath, dataRoot)\n && thirth(data, dataPath, dataRoot);\n };\n }\n\n return function validateAllSchemaObject(data, dataPath, dataRoot) {\n for (let i = 0; i < validators.length; ++i) {\n const validator = validators[i];\n if (validator(data, dataPath, dataRoot) === false) {\n return false;\n }\n }\n return true;\n };\n}\n", "// @ts-nocheck\n// Copyright Mathias Bynens <https://mathiasbynens.be/>\n// https://github.com/bestiejs/punycode.js/blob/master/punycode.js\n\nexport const punycodeVersion = '2.1.0';\n\n/** Highest positive signed 32-bit float value */\nconst maxInt = 2147483647; // aka. 0x7FFFFFFF or 2^31-1\n\n/** Bootstring parameters */\nconst base = 36;\nconst tMin = 1;\nconst tMax = 26;\nconst skew = 38;\nconst damp = 700;\nconst initialBias = 72;\nconst initialN = 128; // 0x80\nconst delimiter = '-'; // '\\x2D'\n\n/** Regular expressions */\nconst regexPunycode = /^xn--/;\nconst regexNonASCII = /[^\\0-\\x7E]/; // non-ASCII chars\nconst regexSeparators = /[\\x2E\\u3002\\uFF0E\\uFF61]/g; // RFC 3490 separators\n\n/** Error messages */\nconst errors = {\n 'overflow': 'Overflow: input needs wider integers to process',\n 'not-basic': 'Illegal input >= 0x80 (not a basic code point)',\n 'invalid-input': 'Invalid input',\n};\n\n/** Convenience shortcuts */\nconst baseMinusTMin = base - tMin;\nconst floor = Math.floor;\nconst stringFromCharCode = String.fromCharCode;\n\n/*--------------------------------------------------------------------------*/\n\n/**\n * A generic error utility function.\n * @private\n * @param {String} type The error type.\n * @returns {Error} Throws a `RangeError` with the applicable error message.\n */\nfunction error(type) {\n throw new RangeError(errors[type]);\n}\n\n/**\n * A generic `Array#map` utility function.\n * @private\n * @param {Array} array The array to iterate over.\n * @param {Function} fn The function that gets called for every array\n * item.\n * @returns {Array} A new array of values returned by the callback function.\n */\nfunction map(array, fn) {\n const result = [];\n let length = array.length;\n while (length--) {\n result[length] = fn(array[length]);\n }\n return result;\n}\n\n/**\n * A simple `Array#map`-like wrapper to work with domain name strings or email\n * addresses.\n * @private\n * @param {String} domain The domain name or email address.\n * @param {Function} fn The function that gets called for every\n * character.\n * @returns {String} A new string of characters returned by the callback\n * function.\n */\nfunction mapDomain(domain, fn) {\n const parts = domain.split('@');\n let result = '';\n if (parts.length > 1) {\n // In email addresses, only the domain name should be punycoded. Leave\n // the local part (i.e. everything up to `@`) intact.\n result = parts[0] + '@';\n domain = parts[1];\n }\n // Avoid `split(regex)` for IE8 compatibility. See #17.\n domain = domain.replace(regexSeparators, '\\x2E');\n const labels = domain.split('.');\n const encoded = map(labels, fn).join('.');\n return result + encoded;\n}\n\n/**\n * Creates an array containing the numeric code points of each Unicode\n * character in the string. While JavaScript uses UCS-2 internally,\n * this function will convert a pair of surrogate halves (each of which\n * UCS-2 exposes as separate characters) into a single code point,\n * matching UTF-16.\n * @see `punycode.ucs2.encode`\n * @see <https://mathiasbynens.be/notes/javascript-encoding>\n * @memberOf punycode.ucs2\n * @name decode\n * @param {String} string The Unicode input string (UCS-2).\n * @returns {Array} The new array of code points.\n */\nexport function ucs2decode(string) {\n const output = [];\n let counter = 0;\n const length = string.length;\n while (counter < length) {\n const value = string.charCodeAt(counter++);\n if (value >= 0xD800 && value <= 0xDBFF && counter < length) {\n // It's a high surrogate, and there is a next character.\n const extra = string.charCodeAt(counter++);\n if ((extra & 0xFC00) === 0xDC00) { // Low surrogate.\n output.push(((value & 0x3FF) << 10) + (extra & 0x3FF) + 0x10000);\n } else {\n // It's an unmatched surrogate; only append this code unit, in case the\n // next code unit is the high surrogate of a surrogate pair.\n output.push(value);\n counter--;\n }\n } else {\n output.push(value);\n }\n }\n return output;\n}\n\n/**\n * Creates a string based on an array of numeric code points.\n * @see `punycode.ucs2.decode`\n * @memberOf punycode.ucs2\n * @name encode\n * @param {Array} codePoints The array of numeric code points.\n * @returns {String} The new Unicode string (UCS-2).\n */\nexport const ucs2encode = array => String.fromCodePoint(...array);\n\n/**\n * Converts a basic code point into a digit/integer.\n * @see `digitToBasic()`\n * @private\n * @param {Number} codePoint The basic numeric code point value.\n * @returns {Number} The numeric value of a basic code point (for use in\n * representing integers) in the range `0` to `base - 1`, or `base` if\n * the code point does not represent a value.\n */\nexport function basicToDigit(codePoint) {\n if (codePoint - 0x30 < 0x0A) {\n return codePoint - 0x16;\n }\n if (codePoint - 0x41 < 0x1A) {\n return codePoint - 0x41;\n }\n if (codePoint - 0x61 < 0x1A) {\n return codePoint - 0x61;\n }\n return base;\n}\n\n/**\n * Converts a digit/integer into a basic code point.\n * @see `basicToDigit()`\n * @private\n * @param {Number} digit The numeric value of a basic code point.\n * @returns {Number} The basic code point whose value (when used for\n * representing integers) is `digit`, which needs to be in the range\n * `0` to `base - 1`. If `flag` is non-zero, the uppercase form is\n * used; else, the lowercase form is used. The behavior is undefined\n * if `flag` is non-zero and `digit` has no uppercase form.\n */\nexport function digitToBasic(digit, flag) {\n // 0..25 map to ASCII a..z or A..Z\n // 26..35 map to ASCII 0..9\n return digit + 22 + 75 * (digit < 26) - ((flag !== 0) << 5);\n}\n\n/**\n * Bias adaptation function as per section 3.4 of RFC 3492.\n * https://tools.ietf.org/html/rfc3492#section-3.4\n * @private\n */\nfunction adapt(delta, numPoints, firstTime) {\n let k = 0;\n delta = firstTime ? floor(delta / damp) : delta >> 1;\n delta += floor(delta / numPoints);\n for (/* no initialization */; delta > baseMinusTMin * tMax >> 1; k += base) {\n delta = floor(delta / baseMinusTMin);\n }\n return floor(k + (baseMinusTMin + 1) * delta / (delta + skew));\n}\n\n/**\n * Converts a Punycode string of ASCII-only symbols to a string of Unicode\n * symbols.\n * @memberOf punycode\n * @param {String} input The Punycode string of ASCII-only symbols.\n * @returns {String} The resulting string of Unicode symbols.\n */\nexport function decode(input) {\n // Don't use UCS-2.\n const output = [];\n const inputLength = input.length;\n let i = 0;\n let n = initialN;\n let bias = initialBias;\n\n // Handle the basic code points: let `basic` be the number of input code\n // points before the last delimiter, or `0` if there is none, then copy\n // the first basic code points to the output.\n\n let basic = input.lastIndexOf(delimiter);\n if (basic < 0) {\n basic = 0;\n }\n\n for (let j = 0; j < basic; ++j) {\n // if it's not a basic code point\n if (input.charCodeAt(j) >= 0x80) {\n error('not-basic');\n }\n output.push(input.charCodeAt(j));\n }\n\n // Main decoding loop: start just after the last delimiter if any basic code\n // points were copied; start at the beginning otherwise.\n\n for (let index = basic > 0 ? basic + 1 : 0; index < inputLength; /* no final expression */) {\n // `index` is the index of the next character to be consumed.\n // Decode a generalized variable-length integer into `delta`,\n // which gets added to `i`. The overflow checking is easier\n // if we increase `i` as we go, then subtract off its starting\n // value at the end to obtain `delta`.\n const oldi = i;\n for (let w = 1, k = base; /* no condition */; k += base) {\n if (index >= inputLength) {\n error('invalid-input');\n }\n\n const digit = basicToDigit(input.charCodeAt(index++));\n if (digit >= base || digit > floor((maxInt - i) / w)) {\n error('overflow');\n }\n\n i += digit * w;\n const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (digit < t) {\n break;\n }\n\n const baseMinusT = base - t;\n if (w > floor(maxInt / baseMinusT)) {\n error('overflow');\n }\n\n w *= baseMinusT;\n }\n\n const out = output.length + 1;\n bias = adapt(i - oldi, out, oldi === 0);\n\n // `i` was supposed to wrap around from `out` to `0`,\n // incrementing `n` each time, so we'll fix that now:\n if (floor(i / out) > maxInt - n) {\n error('overflow');\n }\n\n n += floor(i / out);\n i %= out;\n\n // Insert `n` at position `i` of the output.\n output.splice(i++, 0, n);\n }\n\n return String.fromCodePoint(...output);\n}\n\n/**\n * Converts a string of Unicode symbols (e.g. a domain name label) to a\n * Punycode string of ASCII-only symbols.\n * @memberOf punycode\n * @param {String} input The string of Unicode symbols.\n * @returns {String} The resulting Punycode string of ASCII-only symbols.\n */\nexport function encode(str) {\n const output = [];\n\n // Convert the input in UCS-2 to an array of Unicode code points.\n const input = ucs2decode(str);\n\n // Cache the length.\n const inputLength = input.length;\n\n // Initialize the state.\n let n = initialN;\n let delta = 0;\n let bias = initialBias;\n\n // Handle the basic code points.\n for (const currentValue of input) {\n if (currentValue < 0x80) {\n output.push(stringFromCharCode(currentValue));\n }\n }\n\n const basicLength = output.length;\n let handledCPCount = basicLength;\n\n // `handledCPCount` is the number of code points that have been handled;\n // `basicLength` is the number of basic code points.\n\n // Finish the basic string with a delimiter unless it's empty.\n if (basicLength) {\n output.push(delimiter);\n }\n\n // Main encoding loop:\n while (handledCPCount < inputLength) {\n // All non-basic code points < n have been handled already. Find the next\n // larger one:\n let m = maxInt;\n for (const currentValue of input) {\n if (currentValue >= n && currentValue < m) {\n m = currentValue;\n }\n }\n\n // Increase `delta` enough to advance the decoder's <n,i> state to <m,0>,\n // but guard against overflow.\n const handledCPCountPlusOne = handledCPCount + 1;\n if (m - n > floor((maxInt - delta) / handledCPCountPlusOne)) {\n error('overflow');\n }\n\n delta += (m - n) * handledCPCountPlusOne;\n n = m;\n\n for (const currentValue of input) {\n if (currentValue < n && ++delta > maxInt) {\n error('overflow');\n }\n if (currentValue === n) {\n // Represent delta as a generalized variable-length integer.\n let q = delta;\n for (let k = base; /* no condition */; k += base) {\n const t = k <= bias ? tMin : (k >= bias + tMax ? tMax : k - bias);\n if (q < t) {\n break;\n }\n const qMinusT = q - t;\n const baseMinusT = base - t;\n output.push(\n stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT, 0)),\n );\n q = floor(qMinusT / baseMinusT);\n }\n\n output.push(stringFromCharCode(digitToBasic(q, 0)));\n bias = adapt(delta, handledCPCountPlusOne, handledCPCount === basicLength);\n delta = 0;\n ++handledCPCount;\n }\n }\n\n ++delta;\n ++n;\n }\n return output.join('');\n}\n\n/**\n * Converts a Punycode string representing a domain name or an email address\n * to Unicode. Only the Punycoded parts of the input will be converted, i.e.\n * it doesn't matter if you call it on a string that has already been\n * converted to Unicode.\n * @memberOf punycode\n * @param {String} input The Punycoded domain name or email address to\n * convert to Unicode.\n * @returns {String} The Unicode representation of the given Punycode\n * string.\n */\nexport function toUnicode(input) {\n return mapDomain(input, function iterateMapDomain(string) {\n return regexPunycode.test(string)\n ? decode(string.slice(4).toLowerCase())\n : string;\n });\n}\n\n/**\n * Converts a Unicode string representing a domain name or an email address to\n * Punycode. Only the non-ASCII parts of the domain name will be converted,\n * i.e. it doesn't matter if you call it with a domain that's already in\n * ASCII.\n * @memberOf punycode\n * @param {String} input The domain name or email address to convert, as a\n * Unicode string.\n * @returns {String} The Punycode representation of the given domain name or\n * email address.\n */\nexport function toASCII(input) {\n return mapDomain(input, function iterateMapDomain(string) {\n return regexNonASCII.test(string)\n ? 'xn--' + encode(string)\n : string;\n });\n}\n", "/* eslint no-unused-vars: \"off\" */\n/* eslint no-useless-escape: \"off\" */\n\n//@ts-check\nimport {\n toASCII,\n} from './punycode.js';\n\n//#region Common Tests\nconst CONST_REGEXP_ALPHA = /^[a-zA-Z]+$/;\nexport function isValidAlpha(str) {\n return CONST_REGEXP_ALPHA.test(str);\n}\nconst CONST_REGEXP_ALPHANUMERIC = /^[a-zA-Z0-9]+$/;\nexport function isValidAlphaNumeric(str) {\n return CONST_REGEXP_ALPHANUMERIC.test(str);\n}\n\nconst CONST_REGEXP_NUMERIC = /^[0-9]+$/;\nexport function isValidNumeric(str) {\n return CONST_REGEXP_NUMERIC.test(str);\n}\n\nconst CONST_REGEXP_HEXADECIMAL = /^[a-fA-F0-9]+$/;\nexport function isValidHexaDecimal(str) {\n return CONST_REGEXP_HEXADECIMAL.test(str);\n}\n\nconst CONST_REGEXP_HEXCOLOR = /^#(?:[0-9a-f]{3}){1,2}\\b$/i;\nexport function isValidHexColor(str) {\n return CONST_REGEXP_HEXCOLOR.test(str);\n}\n//#endregion\n\n//#region Identifier Tests\nconst CONST_REGEXP_UUID = /^(?:urn:uuid:)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nexport function isValidUUID(str) {\n // uuid: http://tools.ietf.org/html/rfc4122\n return CONST_REGEXP_UUID.test(str);\n}\n\nconst CONST_REGEXP_GUID = /^({)?[0-9a-f]{8}-(?:[0-9a-f]{4}-){3}[0-9a-f]{12}$/i;\nexport function isValidGUID(str) {\n return CONST_REGEXP_GUID.test(str);\n}\n\nconst CONST_REGEXP_IDENTIFIER = /^[_a-zA-Z]+\\w{0,30}$/;\nexport function isValidIdentifier(str) {\n return /* str != null && */ CONST_REGEXP_IDENTIFIER.test(str);\n}\n\nconst CONST_REGEXP_HTML_IDENTIFIER = /^[A-Za-z]+[\\w\\-\\:\\.]{0,30}$/;\nexport function isValidHtmlIdentifier(str) {\n return /* str != null && */ CONST_REGEXP_HTML_IDENTIFIER.test(str);\n}\n\nconst CONST_REGEXP_CSS_IDENTIFIER = /^-?[_a-zA-Z]+[\\w-]{0,30}$/;\nexport function isValidCssIdentifier(str) {\n return /* str != null && */ CONST_REGEXP_CSS_IDENTIFIER.test(str);\n}\n//#endregion\n\n//#region Host Tests\nconst CONST_REGEXP_MAC_ADDR = /^(?:[0-9A-Fa-f]{2}([:-]?)[0-9A-Fa-f]{2})(?:(?:\\1|\\.)(?:[0-9A-Fa-f]{2}([:-]?)[0-9A-Fa-f]{2})){2}$/;\nexport function isValidMACAddr(str) {\n return CONST_REGEXP_MAC_ADDR.test(str);\n}\n\nconst CONST_REGEXP_IPV4 = /^(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)$/;\nexport function isValidIPv4(str) {\n // optimized https://www.safaribooksonline.com/library/view/regular-expressions-cookbook/9780596802837/ch07s16.html\n return CONST_REGEXP_IPV4.test(str);\n}\n\nconst CONST_REGEXP_IPV6 = /^\\s*(?:(?:(?:[0-9a-f]{1,4}:){7}(?:[0-9a-f]{1,4}|:))|(?:(?:[0-9a-f]{1,4}:){6}(?::[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){5}(?:(?:(?::[0-9a-f]{1,4}){1,2})|:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3})|:))|(?:(?:[0-9a-f]{1,4}:){4}(?:(?:(?::[0-9a-f]{1,4}){1,3})|(?:(?::[0-9a-f]{1,4})?:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){3}(?:(?:(?::[0-9a-f]{1,4}){1,4})|(?:(?::[0-9a-f]{1,4}){0,2}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){2}(?:(?:(?::[0-9a-f]{1,4}){1,5})|(?:(?::[0-9a-f]{1,4}){0,3}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?:(?:[0-9a-f]{1,4}:){1}(?:(?:(?::[0-9a-f]{1,4}){1,6})|(?:(?::[0-9a-f]{1,4}){0,4}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:))|(?::(?:(?:(?::[0-9a-f]{1,4}){1,7})|(?:(?::[0-9a-f]{1,4}){0,5}:(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}))|:)))(?:%.+)?\\s*$/i;\nexport function isValidIPv6(str) {\n // optimized http://stackoverflow.com/questions/53497/regular-expression-that-matches-valid-ipv6-addresses\n return CONST_REGEXP_IPV6.test(str);\n}\n\nconst CONST_REGEXP_HOSTNAME = /^[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[-0-9a-z]{0,61}[0-9a-z])?)*$/i;\nexport function isValidHostname(str) {\n // https://tools.ietf.org/html/rfc1034#section-3.5\n // https://tools.ietf.org/html/rfc1123#section-2\n return str.length <= 255 && CONST_REGEXP_HOSTNAME.test(str);\n}\n\nconst CONST_REGEXP_ACEHOSTNAME = /^(?!-)(xn--)?[a-zA-Z0-9][a-zA-Z0-9-_]{0,61}[a-zA-Z0-9]{0,1}\\.(?!-)(xn--)?([a-zA-Z0-9\\-]{1,50}|[a-zA-Z0-9-]{1,30}\\.[a-zA-Z]{2,})$/;\nexport function isValidIdnHostname(str) {\n // https://stackoverflow.com/questions/47514123/domain-name-regex-including-idn-characters-c-sharp\n const punycode = toASCII(str);\n return CONST_REGEXP_ACEHOSTNAME.test(punycode);\n}\n//#endregion\n\n//#region URL Tests\nconst CONST_REGEXP_URL = /^[(http(s)?):\\/\\/(www\\.)?\\w-/=#%&\\.\\?]{2,}\\.[a-z]{2,}([\\w-/=#%&\\.\\?]*)$/i;\nexport function isValidUrl(str) {\n return CONST_REGEXP_URL.test(str);\n}\n\n// For the source: https://gist.github.com/dperini/729294\n// For test cases: https://mathiasbynens.be/demo/url-regex\n// @todo Delete current URL in favour of the commented out URL rule when this issue is fixed https://github.com/eslint/eslint/issues/7983.\n// URL = /^(?:(?:https?|ftp):\\/\\/)(?:\\S+(?::\\S*)?@)?(?:(?!10(?:\\.\\d{1,3}){3})(?!127(?:\\.\\d{1,3}){3})(?!169\\.254(?:\\.\\d{1,3}){2})(?!192\\.168(?:\\.\\d{1,3}){2})(?!172\\.(?:1[6-9]|2\\d|3[0-1])(?:\\.\\d{1,3}){2})(?:[1-9]\\d?|1\\d\\d|2[01]\\d|22[0-3])(?:\\.(?:1?\\d{1,2}|2[0-4]\\d|25[0-5])){2}(?:\\.(?:[1-9]\\d?|1\\d\\d|2[0-4]\\d|25[0-4]))|(?:(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}0-9]+-?)*[a-z\\u{00a1}-\\u{ffff}0-9]+)*(?:\\.(?:[a-z\\u{00a1}-\\u{ffff}]{2,})))(?::\\d{2,5})?(?:\\/[^\\s]*)?$/iu;\n// eslint-disable-next-line no-control-regex\nconst CONST_REGEXP_URL_FULL = /^(?:(?:http[s\\u017F]?|ftp):\\/\\/)(?:(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+(?::(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?@)?(?:(?!10(?:\\.[0-9]{1,3}){3})(?!127(?:\\.[0-9]{1,3}){3})(?!169\\.254(?:\\.[0-9]{1,3}){2})(?!192\\.168(?:\\.[0-9]{1,3}){2})(?!172\\.(?:1[6-9]|2[0-9]|3[01])(?:\\.[0-9]{1,3}){2})(?:[1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(?:\\.(?:1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(?:\\.(?:[1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(?:(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)(?:\\.(?:(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+-?)*(?:[0-9KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])+)*(?:\\.(?:(?:[KSa-z\\xA1-\\uD7FF\\uE000-\\uFFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF]){2,})))(?::[0-9]{2,5})?(?:\\/(?:[\\0-\\x08\\x0E-\\x1F!-\\x9F\\xA1-\\u167F\\u1681-\\u1FFF\\u200B-\\u2027\\u202A-\\u202E\\u2030-\\u205E\\u2060-\\u2FFF\\u3001-\\uD7FF\\uE000-\\uFEFE\\uFF00-\\uFFFF]|[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])*)?$/i;\nexport function isValidUrlFull(str) {\n return CONST_REGEXP_URL_FULL.test(str);\n}\n//#endregion\n\n//#region URI Tests\nconst CONST_REGEXP_NOT_URI_FRAGMENT = /\\/|:/;\n// uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\nconst CONST_REGEXP_URI_FAST = /^(?:[a-z][a-z0-9+-.]*:)(?:\\/?\\/)?[^\\s]*$/i;\nexport function isValidUri(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return CONST_REGEXP_NOT_URI_FRAGMENT.test(str)\n && CONST_REGEXP_URI_FAST.test(str);\n}\n\n// uri: https://github.com/mafintosh/is-my-json-valid/blob/master/formats.js\nconst CONST_REGEXP_URI_FULL = /^(?:[a-z][a-z0-9+\\-.]*:)(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\\?(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nexport function isValidUriFull(str) {\n // http://jmrware.com/articles/2009/uri_regexp/URI_regex.html + optional protocol + required \".\"\n return CONST_REGEXP_NOT_URI_FRAGMENT.test(str)\n && CONST_REGEXP_URI_FULL.test(str);\n}\n\nconst CONST_REGEXP_URIREF_FAST = /^(?:(?:[a-z][a-z0-9+-.]*:)?\\/?\\/)?(?:[^\\\\\\s#][^\\s#]*)?(?:#[^\\\\\\s]*)?$/i;\nexport function isValidUriRef(str) {\n return CONST_REGEXP_URIREF_FAST.test(str);\n}\n\nconst CONST_REGEXP_URIREF_FULL = /^(?:[a-z][a-z0-9+\\-.]*:)?(?:\\/?\\/(?:(?:[a-z0-9\\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\\.[a-z0-9\\-._~!$&'()*+,;=:]+)\\]|(?:(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d\\d?)|(?:[a-z0-9\\-._~!$&'\"()*+,;=]|%[0-9a-f]{2})*)(?::\\d*)?(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*|\\/(?:(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?|(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})+(?:\\/(?:[a-z0-9\\-._~!$&'\"()*+,;=:@]|%[0-9a-f]{2})*)*)?(?:\\?(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\\-._~!$&'\"()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;\nexport function isValidUriRefFull(str) {\n return CONST_REGEXP_URIREF_FULL.test(str);\n}\n\n// uri-template: https://tools.ietf.org/html/rfc6570\n// eslint-disable-next-line no-control-regex\nconst CONST_REGEXP_URITEMPLATE = /^(?:(?:[^\\x00-\\x20\"'<>%\\\\^`{|}]|%[0-9a-f]{2})|\\{[+#./;?&=,!@|]?(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?(?:,(?:[a-z0-9_]|%[0-9a-f]{2})+(?::[1-9][0-9]{0,3}|\\*)?)*\\})*$/i;\nexport function isValidUriTemplate(str) {\n return CONST_REGEXP_URITEMPLATE.test(str);\n}\n//#endregion\n\n//#region IRI Tests\nconst CONST_REGEXP_ABSOLUTE_IRI = /^([a-z]([a-z]|\\d|\\+|-|\\.)*):(\\/\\/(((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:)*@)?((\\[(|(v[\\da-f]{1,}\\.(([a-z]|\\d|-|\\.|_|~)|[!\\$&'\\(\\)\\*\\+,;=]|:)+))\\])|((\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5])\\.(\\d|[1-9]\\d|1\\d\\d|2[0-4]\\d|25[0-5]))|(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=])*)(:\\d*)?)(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*|(\\/((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)?)|((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)+(\\/(([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)*)*)|((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)){0})(\\?((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|[\\uE000-\\uF8FF]|\\/|\\?)*)?(\\#((([a-z]|\\d|-|\\.|_|~|[\\u00A0-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFEF])|(%[\\da-f]{2})|[!\\$&'\\(\\)\\*\\+,;=]|:|@)|\\/|\\?)*)?$/i;\nexport function isValidIRI(str) {\n return CONST_REGEXP_ABSOLUTE_IRI.test(str);\n}\n\nexport function isValidIRIRef(str) {\n return isValidUriRef(str);\n}\n//#endregion\n\n//#region JPtr Tests\n// JSON-pointer: https://tools.ietf.org/html/rfc6901\nconst CONST_REGEXP_JSON_POINTER = /^(?:\\/(?:[^~/]|~0|~1)*)*$/;\nexport function isValidJSONPointer(str) {\n return CONST_REGEXP_JSON_POINTER.test(str);\n}\n\n// uri fragment: https://tools.ietf.org/html/rfc3986#appendix-A\nconst CONST_REGEXP_JSON_POINTER_URI_FRAGMENT = /^#(?:\\/(?:[a-z0-9_\\-.!$&'()*+,;:=@]|%[0-9a-f]{2}|~0|~1)*)*$/i;\nexport function isValidJSONPointerUriFragment(str) {\n return CONST_REGEXP_JSON_POINTER_URI_FRAGMENT.test(str);\n}\n\n// relative JSON-pointer: http://tools.ietf.org/html/draft-luff-relative-json-pointer-00\nconst CONST_REGEXP_RELATIVE_JSON_POINTER = /^(?:0|[1-9][0-9]*)(?:#|(?:\\/(?:[^~/]|~0|~1)*)*)$/;\nexport function isValidRelativeJSONPointer(str) {\n return CONST_REGEXP_RELATIVE_JSON_POINTER.test(str);\n}\n//#endregion\n\n//#region Email Tests\n// email (sources from jsen validator):\n// http://stackoverflow.com/questions/201323/using-a-regular-expression-to-validate-an-email-address#answer-8829363\n// http://www.w3.org/TR/html5/forms.html#valid-e-mail-address (search for 'willful violation')\nconst CONST_REGEXP_EMAIL_FAST = /^[a-z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*$/i;\nexport function isValidEmail(str) {\n return CONST_REGEXP_EMAIL_FAST.test(str);\n}\n\nconst CONST_REGEXP_EMAIL_FULL = /^[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/i;\nexport function isValidEmailFull(str) {\n return CONST_REGEXP_EMAIL_FULL.test(str);\n}\n\nconst CONST_REGEXP_IDNEMAIL = /^[^@]+@[^@]+\\.[^@]+$/;\nexport function isValidIdnEmail(str) {\n return CONST_REGEXP_IDNEMAIL.test(str);\n}\n//#endregion\n\n//#region Common Tests\nconst CONST_REGPEXP_ISBN10 = /^(?:ISBN(?:-10)?:?\\ *((?=\\d{1,5}([ -]?)\\d{1,7}\\2?\\d{1,6}\\2?\\d)(?:\\d\\2*){9}[\\dX]))$/i;\nexport function isValidISBN10(str) {\n return CONST_REGPEXP_ISBN10.test(str);\n}\n\nconst CONST_REGEXP_ISBN13 = /^(?:ISBN(?:-13)?:?\\ *(97(?:8|9)([ -]?)(?=\\d{1,5}\\2?\\d{1,7}\\2?\\d{1,6}\\2?\\d)(?:\\d\\2*){9}\\d))$/i;\nexport function isValidISBN13(str) {\n return CONST_REGEXP_ISBN13.test(str);\n}\n\nconst CONST_REGEXP_BASE64 = /^(?:[a-zA-Z0-9+\\/]{4})*(?:|(?:[a-zA-Z0-9+\\/]{3}=)|(?:[a-zA-Z0-9+\\/]{2}==)|(?:[a-zA-Z0-9+\\/]{1}===))$/;\nexport function isValidBase64(str) {\n return CONST_REGEXP_BASE64.test(str);\n}\n\nconst CONST_REGEXP_COUNTRY_ALPHA2 = /^(AF|AX|AL|DZ|AS|AD|AO|AI|AQ|AG|AR|AM|AW|AU|AT|AZ|BS|BH|BD|BB|BY|BE|BZ|BJ|BM|BT|BO|BQ|BA|BW|BV|BR|IO|BN|BG|BF|BI|KH|CM|CA|CV|KY|CF|TD|CL|CN|CX|CC|CO|KM|CG|CD|CK|CR|CI|HR|CU|CW|CY|CZ|DK|DJ|DM|DO|EC|EG|SV|GQ|ER|EE|ET|FK|FO|FJ|FI|FR|GF|PF|TF|GA|GM|GE|DE|GH|GI|GR|GL|GD|GP|GU|GT|GG|GN|GW|GY|HT|HM|VA|HN|HK|HU|IS|IN|ID|IR|IQ|IE|IM|IL|IT|JM|JP|JE|JO|KZ|KE|KI|KP|KR|KW|KG|LA|LV|LB|LS|LR|LY|LI|LT|LU|MO|MK|MG|MW|MY|MV|ML|MT|MH|MQ|MR|MU|YT|MX|FM|MD|MC|MN|ME|MS|MA|MZ|MM|NA|NR|NP|NL|NC|NZ|NI|NE|NG|NU|NF|MP|NO|OM|PK|PW|PS|PA|PG|PY|PE|PH|PN|PL|PT|PR|QA|RE|RO|RU|RW|BL|SH|KN|LC|MF|PM|VC|WS|SM|ST|SA|SN|RS|SC|SL|SG|SX|SK|SI|SB|SO|ZA|GS|SS|ES|LK|SD|SR|SJ|SZ|SE|CH|SY|TW|TJ|TZ|TH|TL|TG|TK|TO|TT|TN|TR|TM|TC|TV|UG|UA|AE|GB|US|UM|UY|UZ|VU|VE|VN|VG|VI|WF|EH|YE|ZM|ZW|XK)/i;\nexport function isValidCountryAlpha2(str) {\n return CONST_REGEXP_COUNTRY_ALPHA2.test(str);\n}\n\nconst CONST_REGEXP_IBAN = /^([A-Z]{2}[ '+'\\\\\\\\'+'-]?[0-9]{2})(?=(?:[ '+'\\\\\\\\'+'-]?[A-Z0-9]){9,30}\\$)((?:[ '+'\\\\\\\\'+'-]?[A-Z0-9]{3,5}){2,7})([ '+'\\\\\\\\'+'-]?[A-Z0-9]{1,3})?\\$/i;\nexport function isValidIBAN(str) {\n return CONST_REGEXP_IBAN.test(str);\n}\n//#endregion\n", "import {\n isBoolOrObjectClass,\n hasSchemaRef,\n} from './tools.js';\n\nimport {\n isBoolishType,\n} from '@jarenjs/core/number';\n\nimport {\n isObjectClass,\n isStringType,\n} from '@jarenjs/core';\n\nimport {\n isStringWhiteSpace,\n} from '@jarenjs/core/string';\n\nimport {\n isValidHtmlIdentifier,\n} from '@jarenjs/core/text';\n\n\nfunction encodeJsonPointerKey(key) {\n return encodeURIComponent(key.replace('~', '~0').replace('/', '~1'));\n}\n\nexport function encodeJsonPointerPath(path, key, index) {\n return index == null\n ? `${path}/${encodeJsonPointerKey(key)}`\n : `${path}/${encodeJsonPointerKey(key)}/${encodeJsonPointerKey(index)}`;\n}\n\nfunction decodeJsonPointerKey(key) {\n return decodeURIComponent(key.replace('~0', '~').replace('~1', '/'));\n}\n\nexport function decodeJsonPointerPath(path) {\n // split and remove the leading empty string\n return path.split('/').map(decodeJsonPointerKey).splice(1);\n}\n\nexport function encodeJsonPointerArray(path, array) {\n return `${path}/${array.map(item => encodeJsonPointerKey(item)).join('/')}`;\n}\n\nclass JsonPointerOptions {\n constructor(anchorsGlobal = true, anchorsAllowed = true, skipErrors = true) {\n this.anchorsGlobal = anchorsGlobal;\n this.anchorsAllowed = anchorsAllowed;\n this.skipErrors = skipErrors;\n }\n}\n\nclass JsonPointer {\n constructor(id, search, leftUri, fragment) {\n this.id = id;\n this.search = search;\n this.leftUri = leftUri;\n this.fragment = fragment;\n }\n}\n\nexport function createJsonPointer(refUri, baseUri, opts = new JsonPointerOptions()) {\n const url = !isStringType(refUri) || isStringWhiteSpace(refUri)\n ? new URL(baseUri)\n : !isStringType(baseUri) || isStringWhiteSpace(baseUri)\n ? new URL(refUri)\n : new URL(refUri, baseUri);\n\n const [uri, fragment] = url.href.split('#');\n const [leftUri, search] = uri.split('?');\n\n if (!isStringWhiteSpace(fragment)) {\n // this is a sort of $anchor and we are karen about it and thus not use isStringAnchor().\n if (opts.anchorsAllowed == true && isValidHtmlIdentifier(fragment)) {\n return opts.anchorsGlobal == true\n ? new JsonPointer(`#${fragment}`, search, `${leftUri}#`, fragment)\n : new JsonPointer(`${leftUri}#${fragment}`, search, `${leftUri}#`, fragment);\n }\n // or a json pointer\n else if (fragment.startsWith('/')) {\n return new JsonPointer(`${leftUri}#${fragment}`, search, `${leftUri}#`, fragment);\n }\n }\n return new JsonPointer(`${leftUri}#`, search, `${leftUri}#`, null);\n}\n\nconst TRAVERSE_SCHEMA_OBJECTS = [\n 'items', 'prefixItems', 'additionalItems', 'contains', 'unevaluatedItems',\n 'additionalProperties', 'propertyNames', 'unevaluatedProperties',\n 'not', 'oneOf', 'anyOf', 'allOf', 'if', 'then', 'else',\n];\nconst TRAVERSE_SCHEMA_MAPS = [\n 'properties', 'patternProperties',\n 'dependencies', 'dependentSchemas', 'dependentRequired',\n 'definitions', '$defs', 'components',\n];\n\nexport function storeSchemaIdsInMap(schemas, baseUri, schema, opts = new JsonPointerOptions()) {\n if (!isObjectClass(schema)) {\n const { id } = createJsonPointer(baseUri, undefined, opts);\n schemas.set(id, schema);\n return id;\n }\n\n const { id: rootUri } = createJsonPointer(schema.$id, baseUri, opts);\n if (!isStringType(schema.$id) || isStringWhiteSpace(schema.$id)) {\n if (schemas.has(rootUri))\n throw new Error(`Schema '${rootUri}' already exists`);\n\n schemas.set(rootUri, schema);\n }\n\n baseUri = rootUri;\n\n const queue = [{ obj: schema, base: rootUri, path: '#' }];\n while (queue.length > 0) {\n // @ts-ignore\n const { obj, base, path } = queue.shift();\n\n if (isStringType(obj.$id) && !isStringWhiteSpace(obj.$id)) {\n const { id } = createJsonPointer(obj.$id, base, opts);\n if (!schemas.has(id))\n schemas.set(id, obj);\n else if (schemas.get(id) == null)\n schemas.set(id, obj);\n else\n throw new Error(`Schema '${id}' for path '${path}' in '${base}' already exists`);\n\n // we reset the baseUri when the $id property is set.\n baseUri = id;\n }\n else\n baseUri = base;\n\n if (isStringType(obj.$anchor) && !isStringWhiteSpace(obj.$anchor)) {\n const { id } = createJsonPointer(`#${obj.$anchor}`, baseUri, opts);\n if (!schemas.has(id))\n schemas.set(id, obj);\n else if (schemas.get(id) == null)\n schemas.set(id, obj);\n else\n throw new Error(`Schema '${id}' for path '${path}' in '${base}' already exists`);\n\n // we reset the baseUri when the $anchor property is set.\n if (!id.startsWith('#')) // except when anchors are global\n baseUri = id;\n }\n\n if (isStringType(obj.$ref) && !isStringWhiteSpace(obj.$ref)) {\n const { id: ref } = createJsonPointer(obj.$ref, baseUri, opts);\n if (!schemas.has(ref))\n schemas.set(ref, null);\n\n continue;\n }\n\n // iterate through all properties\n for (const [key, value] of Object.entries(obj)) {\n if (!isObjectClass(value))\n continue;\n\n // is the property a schema object to traverse in?\n if (TRAVERSE_SCHEMA_OBJECTS.includes(key)) {\n if (Array.isArray(value)) {\n const len = value.length;\n for (let index = 0; index < len; index++) {\n const item = value[index];\n const nextpath = encodeJsonPointerPath(path, key, index);\n\n if (isBoolishType(item))\n continue;\n if (!isObjectClass(item)) {\n if (opts.skipErrors === true)\n continue;\n else\n throw new Error(`${nextpath} is not a schema`);\n }\n\n queue.push({ obj: item, base: baseUri, path: nextpath });\n }\n }\n else {\n const nextpath = encodeJsonPointerPath(path, key);\n\n queue.push({ obj: value, base: baseUri, path: nextpath });\n }\n }\n // or is the property a map of key and schema objects?\n else if (TRAVERSE_SCHEMA_MAPS.includes(key)) {\n if (Array.isArray(value))\n continue;\n\n for (const [index, item] of Object.entries(value)) {\n const nextpath = encodeJsonPointerPath(path, key, index);\n if (isBoolishType(item))\n continue;\n if (!isObjectClass(item)) {\n if (opts.skipErrors === true)\n continue;\n else\n throw new Error(`${nextpath} is not a schema`);\n }\n\n queue.push({ obj: item, base: baseUri, path: nextpath });\n }\n }\n }\n }\n\n return rootUri;\n}\n\nexport function resolveRefSchemaShallow(schemas, refUri, baseUri, opts = new JsonPointerOptions()) {\n const { id: base, leftUri, fragment } = createJsonPointer(refUri, baseUri, opts);\n if (!schemas.has(leftUri))\n throw new Error(`The root of reference: '$ref': '${base}', is not found in init-cache`);\n\n // get the document from cache\n let schema = schemas.get(leftUri);\n\n // If there is no fragment, return the whole schema\n if (isStringWhiteSpace(fragment)) {\n return { id: base, schema };\n }\n\n // Decode and resolve the JSON pointer\n const fragments = decodeJsonPointerPath(fragment);\n\n // Traverse the schema based on the JSON pointer\n let current = '';\n for (const part of fragments) {\n current = current + '/' + part;\n if (!isBoolOrObjectClass(schema[part]))\n throw new Error(`The '${current}' is not is not a valid schema in '${leftUri}'`);\n\n schema = schema[part];\n }\n\n return { id: base, schema };\n}\n\nexport function restoreSchemaRefsInMap(schemas, opts = new JsonPointerOptions()) {\n for (const [id, item] of schemas.entries()) {\n if (item != null)\n continue;\n\n const { schema } = resolveRefSchemaShallow(schemas, id, null, opts);\n if (schema == null)\n throw new Error(`Can not resolve schema for '${id}'`);\n\n schemas.set(id, schema);\n }\n}\n\nexport class TraverseOptions extends JsonPointerOptions {\n constructor(\n origin = 'https://github.com/jklarenbeek/jaren',\n mergeSchemas = true,\n anchorsGlobal = true,\n anchorsAllowed = true,\n skipErrors = true\n ) {\n super(anchorsGlobal, anchorsAllowed, skipErrors);\n this.origin = origin,\n this.mergeSchemas = mergeSchemas;\n }\n}\n\nexport function resolveRefSchemaDeep(schemas, baseUri, refschema, opts = new TraverseOptions()) {\n if (!isObjectClass(refschema))\n return { id: baseUri, schema: refschema };\n\n if (!hasSchemaRef(refschema))\n return { id: baseUri, schema: refschema };\n\n const queue = [{ item: refschema, base: baseUri }];\n const seen = new Set();\n let result = {};\n\n while (queue.length > 0) {\n // @ts-ignore\n const { item, base } = queue.shift();\n if (!isObjectClass(item))\n return { id: base, schema: item };\n\n result = opts.mergeSchemas == true\n ? { ...item, ...result }\n : { ...item };\n\n if (!hasSchemaRef(item))\n return { id: base, schema: result };\n\n delete result.$ref;\n\n const ref = item.$ref;\n\n const { id, schema } = resolveRefSchemaShallow(schemas, ref, base, opts);\n\n if (seen.has(id))\n return { id: base, schema: result };\n\n seen.add(id);\n\n queue.push({ item: schema, base: id });\n }\n\n throw new Error(`The json schema '${baseUri}' can not be resolved!`);\n}\n", "//@ts-check\n\nimport {\n isObjectClass,\n} from '@jarenjs/core';\n\nimport {\n compileSchemaObject,\n} from './schema.js';\n\nimport {\n storeSchemaIdsInMap,\n restoreSchemaRefsInMap,\n resolveRefSchemaDeep,\n encodeJsonPointerPath,\n TraverseOptions,\n createJsonPointer,\n} from './traverse.js';\n\nimport {\n isBoolOrObjectClass,\n hasSchemaRef,\n} from './tools.js';\nimport { registerFormatCompiler, registerFormatCompilers } from './format.js';\nimport { mapMerge } from '@jarenjs/core/object';\n\nexport {\n registerFormatCompilers\n} from './format.js';\n\nexport { TraverseOptions };\n \nexport const DEFAULT_SCHEMA_DRAFT = 'http://json-schema.org/draft-06/schema#'\n\nconst isBrowser = typeof window !== 'undefined';\n\nconst performance = (() => isBrowser\n // eslint-disable-next-line no-undef\n ? window.performance\n : {\n now: function performanceNow(start) {\n // @ts-ignore\n const ps = process;\n if (!start) return ps.hrtime();\n const end = ps.hrtime(start);\n return Math.round((end[0] * 1000) + (end[1] / 1000000));\n },\n })();\n\nclass ValidationError {\n constructor(obj, key, expected, dataKey, value, rest) {\n this.timeStamp = performance.now();\n this.object = obj;\n this.key = key;\n this.expected = expected;\n this.dataKey = dataKey;\n this.value = value;\n this.rest = rest;\n }\n}\n\nclass ValidationOptions {\n constructor(\n skipErrors = true\n ) {\n this.skipErrors = skipErrors\n }\n}\n\nclass ValidationRoot {\n static _createObject(self, path, schema) {\n const objects = self._objects;\n if (objects.has(path)) {\n const p = objects.get(path);\n if (p != null)\n throw new Error(`Object at '${path}' is already created`);\n }\n\n const obj = new ValidationObject(self, path, schema);\n objects.set(path, obj);\n return obj;\n }\n\n constructor(origin, schemas, formats, opts = new ValidationOptions(), traverse = new TraverseOptions) {\n const schema = schemas.get(origin);\n this._rootOrigin = origin;\n this._schemas = schemas;\n this._formats = formats;\n\n this._options = opts;\n this._traverse = traverse;\n\n this._objects = new Map();\n this._errors = [];\n\n this._firstSchema = ValidationRoot._createObject(this, origin, schema);\n }\n\n get options() { return this._options; }\n\n get formats() { return this._formats; }\n\n get errors() { return this._errors; }\n\n createObject(path, schema) {\n return ValidationRoot._createObject(this, path, schema);\n }\n\n unresolvedObject(path) {\n const objects = this._objects;\n if (objects.has(path))\n return objects.get(path);\n\n objects.set(path, null);\n return null;\n }\n\n resolveObject(ref, path, schema) {\n // return a validator if compiled\n const objects = this._objects;\n if (objects.has(ref)) {\n const obj = objects.get(ref);\n if (obj != null)\n return objects.get(ref);\n }\n\n const schemas = this._schemas;\n const traverse = this._traverse;\n const { id, schema: root } = resolveRefSchemaDeep(schemas, path, schema, traverse);\n return ValidationRoot._createObject(this, id, root);\n }\n\n addError(error /*:JarenError*/) {\n this._errors.push(error);\n return false;\n }\n\n validate(data /*:unknown*/) {\n // clear all errors\n this._errors = [];\n // call compiled validator\n return this._firstSchema.validate(data, data);\n }\n}\n\nclass ValidationObject {\n /**\n * Compiles a schema validation error handler\n * @param {ValidationObject} self The validation object that is compiling this validator\n * @param {string} path The path to this schema object\n * @param {any} schema The schema object to compile\n * @returns {function(any, any):boolean} A function that validates data against the compiled schema and returns a boolean.\n */\n static _compileValidator(self, path, schema) {\n if (!hasSchemaRef(schema))\n return compileSchemaObject(self, schema);\n\n const root = self._root;\n\n const { id: ref } = createJsonPointer(schema.$ref, path, root.options);\n\n const resolved = root.unresolvedObject(ref);\n if (resolved != null) {\n const validator = resolved.validate;\n self._validator = function validateRefSchemaOnTime(data, dataRoot) {\n return validator(data, dataRoot);\n };\n return self._validator;\n }\n\n return function resolveSchemaCompiler(data, dataRoot) {\n const obj = root.resolveObject(ref, path, schema);\n const validator = obj.validate;\n self._validator = function validateRefSchemaLate(_data, _dataRoot) {\n return validator(_data, _dataRoot);\n };\n return self._validator(data, dataRoot);\n };\n }\n\n constructor(root, path, schema) {\n this._root = root;\n this._path = path;\n this._members = [];\n this._schema = schema;\n this._validator = null;\n\n this._validator = ValidationObject._compileValidator(this, path, schema);\n }\n\n get path() {\n return this._path;\n }\n\n get errors() {\n return this._root.errors;\n }\n\n get validate() {\n return this._validator;\n }\n\n get options() {\n return this._root.options;\n }\n\n get formats() {\n return this._root.formats;\n }\n \n/**\n * Compiles a schema validation error handler\n * @param {any} expected - anything that is expected by this handler\n * @param {string | string[]} key - the key or keys that is expected\n * @returns {function(unknown): boolean} A function that validates data against the compiled schema and returns a boolean.\n */\n createErrorHandler(expected, key) {\n const self = this;\n\n if (!Array.isArray(key)) {\n return function addNormalError(data, ...meta) {\n const error = new ValidationError(self, key, expected, null, data, meta);\n return self._root.addError(error);\n };\n }\n else {\n return function addKeyedError(dataKey, data, ...meta) {\n const error = new ValidationError(self, key, expected, dataKey, data, meta);\n return self._root.addError(error);\n };\n }\n }\n\n createValidator(schema, key, index) {\n if (!isBoolOrObjectClass(schema))\n return undefined;\n\n const id = isObjectClass(schema)\n ? createJsonPointer(schema.$id, this._path).id\n : this._path;\n\n const root = this._root;\n const path = index == null\n ? encodeJsonPointerPath(id, key)\n : encodeJsonPointerPath(id, key, String(index));\n\n const child = root.createObject(path, schema);\n this._members.push(child);\n\n return child._validator;\n }\n}\n\nexport class ValidatorOptions {\n constructor(\n formats = {},\n schemas = [],\n validation = new ValidationOptions(),\n traverse = new TraverseOptions(),\n ) {\n this.formats = formats;\n this.schemas = schemas;\n this.validation = validation;\n this.traverse = traverse;\n }\n}\n\nexport function compileSchemaValidator(schema, opts = new ValidatorOptions()) {\n // initialize schema map for all ids and refs\n const schemas = new Map();\n const origin = storeSchemaIdsInMap(\n schemas,\n opts.traverse.origin,\n schema,\n opts.traverse);\n\n // Then add the other reference schemas\n opts.schemas.forEach(ref => storeSchemaIdsInMap(\n schemas,\n origin,\n ref,\n opts.traverse));\n\n restoreSchemaRefsInMap(schemas, opts.traverse);\n\n // create a new schema root\n const root = new ValidationRoot(\n origin,\n schemas,\n opts.formats,\n opts.validation,\n opts.traverse);\n\n return {\n validate: (data) => root.validate(data),\n };\n}\n\nexport class JarenValidator {\n\n #formats = {}\n #schemas = new Map();\n #metaSchemas = new Map();\n #options = new ValidatorOptions();\n\n /**\n * Create a new JarenValidator instance\n * @param {ValidatorOptions} [options] - Validator options\n */\n constructor(options = new ValidatorOptions()) {\n this.#formats = options.formats || {};\n this.#schemas = new Map();\n this.#metaSchemas = new Map();\n this.#options = options;\n }\n\n /**\n * Add format to validate strings or numbers.\n * @param {string} name \n * @param {Function} formatCompiler \n * @returns {JarenValidator}\n */\n addFormat(name, formatCompiler) {\n registerFormatCompiler(\n this.#formats,\n name,\n formatCompiler);\n return this;\n }\n\n addFormats(formatCompilers) {\n registerFormatCompilers(\n this.#formats,\n formatCompilers);\n return this;\n }\n\n /**\n * \n * @param {boolean | object} schema \n * @param {object[] | undefined} schemas \n * @param {TraverseOptions} opts\n * @returns {{origin:string, map: Map}}\n */\n static #traverseSchema(schema, schemas = undefined, fromMap = undefined, opts = new TraverseOptions()) {\n // initialize schema map for all ids and refs\n const schemaMap = new Map(fromMap);\n const origin = storeSchemaIdsInMap(\n schemaMap,\n opts.origin,\n schema,\n opts);\n \n // Then add the other reference schemas\n if (Array.isArray(schemas) && schemas.length > 0) {\n schemas.forEach(ref => storeSchemaIdsInMap(\n schemaMap,\n origin,\n ref,\n opts));\n }\n \n // make sure all schemas are connected\n restoreSchemaRefsInMap(schemaMap, opts);\n \n return { origin: origin, map: schemaMap };\n }\n \n /**\n * Add schema(s) to validator instance. \n * This method does not compile schemas (but it still validates them). \n * Because of that dependencies can be added in any order and \n * circular dependencies are supported. \n * It also prevents unnecessary compilation of schemas that are \n * containers for other schemas but not used as a whole.\n * @param {boolean | object | object[]} schema \n * @param {string | undefined} key\n * @returns {JarenValidator}\n */\n addSchema(schema, key = undefined) {\n if (Array.isArray(schema)) {\n schema.forEach((s, index) => this.addSchema(s, key ? `${key}[${index}]` : undefined));\n }\n else if (typeof schema === 'object') {\n const schemaKey = key || schema.$id;\n if (schemaKey) {\n this.#schemas.set(schemaKey, schema);\n }\n }\n return this;\n }\n\n /**\n * \n * @param {JarenValidator} self \n * @param {string} origin \n * @param {Map} schemas \n * @returns {(data) => boolean}\n */\n static #compileSchema(self, origin, schemas) {\n const root = new ValidationRoot(\n origin,\n schemas,\n self.#formats,\n self.#options.validation,\n self.#options.traverse);\n \n function jarenValidateSchema(data) {\n return root.validate(data)\n }\n\n Object.defineProperty(jarenValidateSchema, \"errors\", {\n get: function () { return root._errors }\n })\n \n return jarenValidateSchema;\n }\n\n static normalizeUriKey(key) {\n return key;\n }\n\n /**\n * Adds meta schema(s) that can be used to validate other schemas.\n * @param {boolean | object | object[]} schema \n * @param {string | undefined} key\n * @returns {JarenValidator}\n */\n addMetaSchema(schema, key = undefined) {\n key = JarenValidator.normalizeUriKey(key)\n if (Array.isArray(schema)) {\n const first = schema.shift();\n const { origin, map } = JarenValidator.#traverseSchema(first, schema, undefined, new TraverseOptions(key));\n const compiled = JarenValidator.#compileSchema(this, origin, map);\n this.#metaSchemas.set(origin, compiled);\n mapMerge(this.#schemas, map);\n }\n else if (isBoolOrObjectClass(schema)) {\n const { origin, map } = JarenValidator.#traverseSchema(schema, undefined, undefined, new TraverseOptions(key));\n const compiled = JarenValidator.#compileSchema(this, origin, map);\n this.#metaSchemas.set(origin, compiled);\n mapMerge(this.#schemas, map);\n }\n return this;\n }\n\n /**\n * \n * @param {string} key \n * @returns {object}\n */\n getSchema(key) {\n key = JarenValidator.normalizeUriKey(key)\n return this.#schemas.get(key) || null;\n }\n\n /**\n * Validates schema. This method should be used to validate schemas rather than validate due to the inconsistency of uri format in JSON Schema standard.\n * By default this method is called automatically when the schema is added, so you rarely need to use it directly.\n * If schema doesn't have $schema property, it is validated against draft 6 meta-schema (option meta should not be false).\n * If schema has $schema property, then the schema with this id (that should be previously added) is used to validate passed schema.\n * Errors will be available at ajv.errors\n * @param {boolean | object} schema \n * @returns {boolean}\n */\n validateSchema(schema) {\n // if no meta schema is present, just return true;\n if (this.#metaSchemas.size == 0)\n return true;\n\n const schemaId = JarenValidator.normalizeUriKey(schema.$schema || DEFAULT_SCHEMA_DRAFT);\n const metaSchema = this.#metaSchemas.get(schemaId);\n // if the metaSchema is not present, we fail the validation\n if (!metaSchema)\n return false;\n\n // otherwise, validate the schema\n return metaSchema(schema);\n }\n\n /**\n * Generate validating function and cache the compiled schema for future use.\n * Note: This function does NOT return a promise. Use compileAsync instead!\n * @param {boolean | object} schema\n * @param {object[] | undefined} [schemas=undefined] \n * @returns {(data: any) => boolean}\n */\n compile(schema, schemas = undefined) {\n const { origin, map } = JarenValidator.#traverseSchema(schema, schemas, this.#schemas, this.#options.traverse);\n return JarenValidator.#compileSchema(this, origin, map);\n }\n\n /**\n * Generate validating function and cache the compiled schema for future use.\n * Note: This function returns a promise.\n * @param {boolean | object} schema\n * @returns {Promise<any>}\n */\n compileAsync(schema) {\n throw new Error('compileAsync is not implemented');\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["isFn", "data", "isScalarTypeEx", "typeName", "isScalarType", "isStringType", "isBooleanType", "isNumberType", "isIntegerType", "isBigIntType", "getStringType", "obj", "def", "getBigIntType", "obj", "def", "isBigIntType", "isNullValue", "data", "isObjectOfClass", "type", "isObjectClass", "isMapClass", "isObjectType", "isArrayClass", "isSetClass", "TypedArray", "isTypedArray", "proto", "getObjectType", "getInclusiveExclusiveBounds", "getType", "inclusive", "exclusive", "includes", "excludes", "isArrayish", "data", "TypedArray", "getUniqueArray", "arr", "def", "el", "index", "a", "isUniqueArray", "unique", "includesAll", "values", "v", "isBoolishType", "data", "getBoolishType", "obj", "def", "isNumbishType", "isIntishType", "getNumbishType", "getIntishType", "trueThat", "whatever", "_path", "_root", "_key", "falseThat", "fallbackFn", "compiled", "fallback", "isFn", "addFunctionToArray", "arr", "fn", "i", "isStringWhiteSpace", "data", "isRegExpType", "data", "isObjectOfClass", "createRegExp", "pattern", "isRegExpType", "isStringType", "e", "g", "isBoolOrObjectClass", "obj", "isBooleanType", "isObjectClass", "getBoolOrObjectClass", "def", "getArrayClassMinItems", "len", "isArrayClass", "isOfSchemaType", "schema", "type", "stype", "hasSchemaRef", "isStringType", "isStringWhiteSpace", "createIsSchemaTypeHandler", "isStrict", "isNullValue", "isIntegerType", "isBigIntType", "isNumberType", "isObjectType", "isArrayish", "isSetClass", "isMapClass", "isRegExpType", "ValidationResult", "_ValidationResult", "match", "errors", "valid", "result", "registerFormatCompiler", "registered", "name", "formatCompiler", "isFn", "registerFormatCompilers", "formatCompilers", "keys", "i", "key", "item", "getSchemaFormatCompiler", "isStringType", "compileFormatBasic", "schemaObj", "jsonSchema", "compiler", "equalsDeep", "target", "source", "isBooleanType", "isFn", "isScalarType", "tks", "sks", "key", "value", "i", "isTypedArray", "tkeys", "skeys", "mapMerge", "map", "iterables", "iterable", "item", "compileConst", "schemaObj", "jsonSchema", "constant", "addError", "isScalarType", "data", "dataPath", "equalsDeep", "compileEnum", "enums", "getArrayClassMinItems", "hasObjects", "i", "e", "compileEnumBasic", "compileNumberMaximum", "schemaObj", "jsonSchema", "max", "emax", "getInclusiveExclusiveBounds", "getNumbishType", "addError", "data", "dataPath", "compileNumberMinimum", "min", "emin", "compileNumberMultipleOf", "mulOf", "compileNumberIntern", "maximum", "minimum", "multipleOf", "isMax", "trueThat", "isMin", "isMul", "compileNumberBasic", "intern", "isNumberType", "compileBigIntMaximum", "schemaObj", "jsonSchema", "max", "emax", "getInclusiveExclusiveBounds", "getBigIntType", "addError", "data", "dataPath", "compileBigIntMinimum", "min", "emin", "compileBigIntMultipleOf", "mulOf", "compileBigIntBasic", "maximum", "minimum", "multipleOf", "isMax", "trueThat", "isMin", "isMul", "isBigIntType", "compileMinLength", "schemaObj", "jsonSchema", "min", "getIntishType", "addError", "len", "dataPath", "compileMaxLength", "max", "compilePattern", "pattern", "createRegExp", "str", "compileStringIntern", "minLength", "maxLength", "isMinLength", "trueThat", "isMaxLength", "isMatch", "data", "compileStringBasic", "intern", "isStringType", "compileMinProperties", "schemaObj", "jsonSchema", "min", "getIntishType", "addError", "len", "dataPath", "compileMaxProperties", "max", "compileRequiredProperties", "required", "getArrayClassMinItems", "rlength", "dataKeys", "valid", "i", "key", "compilePropertyNames", "propNames", "getBoolOrObjectClass", "compileProperties", "properties", "getObjectType", "keys", "validators", "schemas", "validator", "data", "dataRoot", "dataKey", "result", "ValidationResult", "compilePatternProperties", "entries", "entryKeys", "patterns", "pattern", "createRegExp", "patternKeys", "schema", "validatorKeys", "validate", "compileAdditionalProperties", "additional", "compileUnevaluatedProperties", "unevaluatedProperties", "compileDependentRequired", "dependentRequired", "includesAll", "compileDependentSchemas", "dependentSchemas", "isBoolOrObjectClass", "compileDependencies", "dependencies", "right", "isArrayClass", "compileObjectPrimitives", "minProperties", "maxProperties", "requiredProperties", "isMinProperties", "trueThat", "isMaxProperties", "hasRequiredProperties", "compileObjectProperty", "namesValidator", "propertyValidator", "patternValidator", "additionalValidator", "depSchemasValidator", "dependencyValidator", "depRequiredValidator", "unevaluatedValidator", "validateName", "validateProperty", "validatePattern", "validateDepRequired", "validateDepSchemas", "validateDependency", "compileObjectChildren", "compileObjectSchema", "isOfSchemaType", "objectPrimitives", "objectChildren", "validatePrimitives", "validateChildren", "isObjectClass", "compileMinItems", "schemaObj", "jsonSchema", "min", "getIntishType", "addError", "len", "dataPath", "compileMaxItems", "max", "createBooleanValidator", "key", "validationFn", "value", "getBoolishType", "data", "compileUniqueItems", "isUniqueArray", "compileTupleInternal", "itemsKey", "additionalKey", "tuple", "getArrayClassMinItems", "validators", "item", "i", "trueThat", "falseThat", "vlength", "additional", "getBoolOrObjectClass", "dataRoot", "validateAdditional", "compilePrefixItems", "compileTupleItems", "compileArrayContains", "contains", "getObjectType", "compileContainsMinMax", "minContains", "maxContains", "addNonError", "addMinError", "addMaxError", "count", "compileArrayContainsBoolean", "compileArrayItemsBoolean", "items", "compileArrayItems", "compileUnevaluatedItems", "unevaluatedItems", "compileArrayPrimitives", "minItems", "maxItems", "uniqueItems", "isMinItems", "isMaxItems", "isUniqueItems", "compileArrayChildren", "validateItem", "validateContains", "validateUnevaluated", "validateMinMax", "resolveLength", "invalid", "obj", "compileArraySchema", "isOfSchemaType", "compiledPrimitives", "compiledItemsBoolean", "compiledContainsBoolean", "compiledArrayChildren", "validatePrimitives", "hasBooleanItems", "hasBooleanContains", "validateItems", "isArrayClass", "compileAllOf", "schemaObj", "jsonSchema", "allOf", "getArrayClassMinItems", "validators", "i", "child", "trueThat", "falseThat", "validator", "addError", "data", "dataPath", "dataRoot", "dataKey", "compileAnyOf", "anyOf", "compileOneOf", "oneOf", "found", "compileNotOf", "notOf", "getBoolOrObjectClass", "validate", "compileCombineSchema", "addValidator", "compiler", "isFn", "first", "second", "compileConditionSchema", "schemaObj", "jsonSchema", "validateIf", "tmpThen", "tmpElse", "validateThen", "fallbackFn", "validateElse", "data", "dataRoot", "compileRequired", "schemaObj", "jsonSchema", "required", "getBoolishType", "addError", "data", "dataPath", "compileTypeSimple", "type", "getStringType", "isDataType", "createIsSchemaTypeHandler", "compileTypeArray", "schemaTypes", "getUniqueArray", "types", "names", "callback", "one", "two", "three", "i", "compileTypeBasic", "validator", "nullable", "compileSchemaObject", "trueThat", "falseThat", "isObjectType", "validators", "addFunctionToArray", "compileEnumBasic", "compileNumberBasic", "compileBigIntBasic", "compileStringBasic", "compileFormatBasic", "compileArraySchema", "compileObjectSchema", "compileCombineSchema", "compileConditionSchema", "first", "second", "dataRoot", "thirth", "stringFromCharCode", "CONST_REGEXP_HTML_IDENTIFIER", "isValidHtmlIdentifier", "str", "encodeJsonPointerKey", "key", "encodeJsonPointerPath", "path", "index", "decodeJsonPointerKey", "decodeJsonPointerPath", "JsonPointerOptions", "anchorsGlobal", "anchorsAllowed", "skipErrors", "JsonPointer", "id", "search", "leftUri", "fragment", "createJsonPointer", "refUri", "baseUri", "opts", "url", "isStringType", "isStringWhiteSpace", "uri", "isValidHtmlIdentifier", "TRAVERSE_SCHEMA_OBJECTS", "TRAVERSE_SCHEMA_MAPS", "storeSchemaIdsInMap", "schemas", "schema", "isObjectClass", "rootUri", "queue", "obj", "base", "path", "ref", "key", "value", "len", "index", "item", "nextpath", "encodeJsonPointerPath", "isBoolishType", "resolveRefSchemaShallow", "fragments", "decodeJsonPointerPath", "current", "part", "isBoolOrObjectClass", "restoreSchemaRefsInMap", "TraverseOptions", "origin", "mergeSchemas", "resolveRefSchemaDeep", "refschema", "hasSchemaRef", "seen", "result", "DEFAULT_SCHEMA_DRAFT", "isBrowser", "performance", "start", "ps", "end", "ValidationError", "obj", "key", "expected", "dataKey", "value", "rest", "ValidationOptions", "skipErrors", "ValidationRoot", "_ValidationRoot", "self", "path", "schema", "objects", "ValidationObject", "origin", "schemas", "formats", "opts", "traverse", "TraverseOptions", "ref", "id", "root", "resolveRefSchemaDeep", "error", "data", "_ValidationObject", "hasSchemaRef", "compileSchemaObject", "createJsonPointer", "resolved", "validator", "dataRoot", "_data", "_dataRoot", "meta", "index", "isBoolOrObjectClass", "isObjectClass", "encodeJsonPointerPath", "child", "ValidatorOptions", "validation", "compileSchemaValidator", "storeSchemaIdsInMap", "restoreSchemaRefsInMap", "JarenValidator", "_JarenValidator", "#formats", "#schemas", "#metaSchemas", "#options", "options", "name", "formatCompiler", "registerFormatCompiler", "formatCompilers", "registerFormatCompilers", "#traverseSchema", "fromMap", "schemaMap", "s", "schemaKey", "#compileSchema", "jarenValidateSchema", "first", "map", "compiled", "mapMerge", "schemaId", "metaSchema"]
7
- }