joi 18.2.1 → 18.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"joi-browser.min.mjs","names":["NON_ASCII_RX","Url","Util"],"sources":["../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/assertError.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/stringify.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/assert.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/reach.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/types.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/utils.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/clone.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/merge.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/applyToDefaults.js","../browser/stubs/empty.cjs","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/deepEqual.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/escapeHtml.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/escapeRegex.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/ignore.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/index.js","../lib/schemas.js","../node_modules/.pnpm/@hapi+formula@3.0.2/node_modules/@hapi/formula/lib/index.js","../lib/errors.js","../lib/ref.js","../lib/template.js","../lib/messages.js","../lib/common.js","../lib/cache.js","../lib/compile.js","../lib/extend.js","../lib/modify.js","../lib/state.js","../lib/validator.js","../lib/values.js","../lib/base.js","../lib/types/any.js","../lib/types/alternatives.js","../lib/types/array.js","../lib/types/boolean.js","../lib/types/date.js","../node_modules/.pnpm/@hapi+topo@6.0.2/node_modules/@hapi/topo/lib/index.js","../lib/types/keys.js","../lib/types/function.js","../lib/types/link.js","../lib/types/number.js","../lib/types/object.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/errors.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/domain.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/email.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/index.mjs","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/uri.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/ip.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/index.js","../lib/types/string.js","../lib/types/symbol.js","../lib/index.js"],"sourcesContent":["'use strict';\n\nconst internals = {};\n\n\nmodule.exports = class AssertError extends Error {\n\n name = 'AssertError';\n\n constructor(message, ctor) {\n\n super(message || 'Unknown error');\n\n if (typeof Error.captureStackTrace === 'function') { // $lab:coverage:ignore$\n Error.captureStackTrace(this, ctor);\n }\n }\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function (...args) {\n\n try {\n return JSON.stringify(...args);\n }\n catch (err) {\n return '[Cannot display object: ' + err.message + ']';\n }\n};\n","'use strict';\n\nconst AssertError = require('./assertError');\nconst Stringify = require('./stringify');\n\n\nconst internals = {};\n\n\nconst assert = module.exports = function (condition, ...args) {\n\n if (condition) {\n return;\n }\n\n if (args.length === 1 &&\n args[0] instanceof Error) {\n\n throw args[0];\n }\n\n const msgs = args\n .filter((arg) => arg !== '')\n .map((arg) => {\n\n return typeof arg === 'string' ? arg : arg instanceof Error ? arg.message : Stringify(arg);\n });\n\n throw new AssertError(msgs.join(' '), assert);\n};\n","'use strict';\n\nconst Assert = require('./assert');\n\n\nconst internals = {};\n\n\nmodule.exports = function (obj, chain, options) {\n\n if (chain === false ||\n chain === null ||\n chain === undefined) {\n\n return obj;\n }\n\n options = options || {};\n if (typeof options === 'string') {\n options = { separator: options };\n }\n\n const isChainArray = Array.isArray(chain);\n\n Assert(!isChainArray || !options.separator, 'Separator option is not valid for array-based chain');\n\n const path = isChainArray ? chain : chain.split(options.separator || '.');\n let ref = obj;\n for (let i = 0; i < path.length; ++i) {\n let key = path[i];\n const type = options.iterables && internals.iterables(ref);\n\n if (Array.isArray(ref) ||\n type === 'set') {\n\n const number = Number(key);\n if (Number.isInteger(number)) {\n key = number < 0 ? ref.length + number : number;\n }\n }\n\n if (!ref ||\n typeof ref === 'function' && options.functions === false || // Defaults to true\n !type && ref[key] === undefined) {\n\n Assert(!options.strict || i + 1 === path.length, 'Missing segment', key, 'in reach path ', chain);\n Assert(typeof ref === 'object' || options.functions === true || typeof ref !== 'function', 'Invalid segment', key, 'in reach path ', chain);\n ref = options.default;\n break;\n }\n\n if (!type) {\n ref = ref[key];\n }\n else if (type === 'set') {\n ref = [...ref][key];\n }\n else { // type === 'map'\n ref = ref.get(key);\n }\n }\n\n return ref;\n};\n\n\ninternals.iterables = function (ref) {\n\n if (ref instanceof Set) {\n return 'set';\n }\n\n if (ref instanceof Map) {\n return 'map';\n }\n};\n","'use strict';\n\nconst internals = {};\n\n\nexports = module.exports = {\n array: Array.prototype,\n buffer: Buffer && Buffer.prototype, // $lab:coverage:ignore$\n date: Date.prototype,\n error: Error.prototype,\n generic: Object.prototype,\n map: Map.prototype,\n promise: Promise.prototype,\n regex: RegExp.prototype,\n set: Set.prototype,\n url: URL.prototype,\n weakMap: WeakMap.prototype,\n weakSet: WeakSet.prototype\n};\n\n\ninternals.typeMap = new Map([\n ['[object Error]', exports.error],\n ['[object Map]', exports.map],\n ['[object Promise]', exports.promise],\n ['[object Set]', exports.set],\n ['[object URL]', exports.url],\n ['[object WeakMap]', exports.weakMap],\n ['[object WeakSet]', exports.weakSet]\n]);\n\n\nexports.getInternalProto = function (obj) {\n\n if (Array.isArray(obj)) {\n return exports.array;\n }\n\n if (Buffer && obj instanceof Buffer) { // $lab:coverage:ignore$\n return exports.buffer;\n }\n\n if (obj instanceof Date) {\n return exports.date;\n }\n\n if (obj instanceof RegExp) {\n return exports.regex;\n }\n\n if (obj instanceof Error) {\n return exports.error;\n }\n\n const objName = Object.prototype.toString.call(obj);\n return internals.typeMap.get(objName) || exports.generic;\n};\n","'use strict';\n\nconst internals = {};\n\n\nexports.keys = function (obj, options = {}) {\n\n return options.symbols !== false ? Reflect.ownKeys(obj) : Object.getOwnPropertyNames(obj); // Defaults to true\n};\n","'use strict';\n\nconst Reach = require('./reach');\nconst Types = require('./types');\nconst Utils = require('./utils');\n\n\nconst internals = {\n needsProtoHack: new Set([Types.set, Types.map, Types.weakSet, Types.weakMap]),\n structuredCloneExists: typeof structuredClone === 'function'\n};\n\n\nmodule.exports = internals.clone = function (obj, options = {}, _seen = null) {\n\n if (typeof obj !== 'object' ||\n obj === null) {\n\n return obj;\n }\n\n let clone = internals.clone;\n let seen = _seen;\n\n if (options.shallow) {\n if (options.shallow !== true) {\n return internals.cloneWithShallow(obj, options);\n }\n\n clone = (value) => value;\n }\n else if (seen) {\n const lookup = seen.get(obj);\n if (lookup) {\n return lookup;\n }\n }\n else {\n seen = new Map();\n }\n\n // Built-in object types\n\n const baseProto = Types.getInternalProto(obj);\n switch (baseProto) {\n case Types.buffer:\n return Buffer?.from(obj);\n case Types.date:\n return new Date(obj.getTime());\n case Types.regex:\n case Types.url:\n return new baseProto.constructor(obj);\n }\n\n // Generic objects\n\n const newObj = internals.base(obj, baseProto, options);\n if (newObj === obj) {\n return obj;\n }\n\n if (seen) {\n seen.set(obj, newObj); // Set seen, since obj could recurse\n }\n\n if (baseProto === Types.set) {\n for (const value of obj) {\n newObj.add(clone(value, options, seen));\n }\n }\n else if (baseProto === Types.map) {\n for (const [key, value] of obj) {\n newObj.set(key, clone(value, options, seen));\n }\n }\n\n const keys = Utils.keys(obj, options);\n for (const key of keys) {\n if (key === '__proto__') {\n continue;\n }\n\n if (baseProto === Types.array &&\n key === 'length') {\n\n newObj.length = obj.length;\n continue;\n }\n\n // Can only be covered in node 21+\n /* $lab:coverage:off$ */\n if (internals.structuredCloneExists &&\n baseProto === Types.error &&\n key === 'stack') {\n\n continue; // Already a part of the base object\n }\n /* $lab:coverage:on$ */\n\n const descriptor = Object.getOwnPropertyDescriptor(obj, key);\n if (descriptor) {\n if (descriptor.get ||\n descriptor.set) {\n\n Object.defineProperty(newObj, key, descriptor);\n }\n else if (descriptor.enumerable) {\n newObj[key] = clone(obj[key], options, seen);\n }\n else {\n Object.defineProperty(newObj, key, { enumerable: false, writable: true, configurable: true, value: clone(obj[key], options, seen) });\n }\n }\n else {\n Object.defineProperty(newObj, key, {\n enumerable: true,\n writable: true,\n configurable: true,\n value: clone(obj[key], options, seen)\n });\n }\n }\n\n return newObj;\n};\n\n\ninternals.cloneWithShallow = function (source, options) {\n\n const keys = options.shallow;\n options = Object.assign({}, options);\n options.shallow = false;\n\n const seen = new Map();\n\n for (const key of keys) {\n const ref = Reach(source, key);\n if (typeof ref === 'object' ||\n typeof ref === 'function') {\n\n seen.set(ref, ref);\n }\n }\n\n return internals.clone(source, options, seen);\n};\n\n\ninternals.base = function (obj, baseProto, options) {\n\n if (options.prototype === false) { // Defaults to true\n if (internals.needsProtoHack.has(baseProto)) {\n return new baseProto.constructor();\n }\n\n return baseProto === Types.array ? [] : {};\n }\n\n const proto = Object.getPrototypeOf(obj);\n if (proto &&\n proto.isImmutable) {\n\n return obj;\n }\n\n if (baseProto === Types.array) {\n const newObj = [];\n if (proto !== baseProto) {\n Object.setPrototypeOf(newObj, proto);\n }\n\n return newObj;\n }\n // Can only be covered in node 21+\n /* $lab:coverage:off$ */\n else if (baseProto === Types.error && internals.structuredCloneExists &&\n (proto === baseProto || Error.isPrototypeOf(proto.constructor))) { // Don't match Util.inherit() subclassed errors\n\n const err = structuredClone(obj); // Needed to copy internal stack state\n if (Object.getPrototypeOf(err) !== proto) {\n Object.setPrototypeOf(err, proto); // Fix prototype\n }\n\n return err;\n }\n /* $lab:coverage:on$ */\n\n if (internals.needsProtoHack.has(baseProto)) {\n const newObj = new proto.constructor();\n if (proto !== baseProto) {\n Object.setPrototypeOf(newObj, proto);\n }\n\n return newObj;\n }\n\n return Object.create(proto);\n};\n","'use strict';\n\nconst Assert = require('./assert');\nconst Clone = require('./clone');\nconst Utils = require('./utils');\n\n\nconst internals = {};\n\n\nmodule.exports = internals.merge = function (target, source, options) {\n\n Assert(target && typeof target === 'object', 'Invalid target value: must be an object');\n Assert(source === null || source === undefined || typeof source === 'object', 'Invalid source value: must be null, undefined, or an object');\n\n if (!source) {\n return target;\n }\n\n options = Object.assign({ nullOverride: true, mergeArrays: true }, options);\n\n if (Array.isArray(source)) {\n Assert(Array.isArray(target), 'Cannot merge array onto an object');\n if (!options.mergeArrays) {\n target.length = 0; // Must not change target assignment\n }\n\n for (let i = 0; i < source.length; ++i) {\n target.push(Clone(source[i], { symbols: options.symbols }));\n }\n\n return target;\n }\n\n const keys = Utils.keys(source, options);\n for (let i = 0; i < keys.length; ++i) {\n const key = keys[i];\n if (key === '__proto__' ||\n !Object.prototype.propertyIsEnumerable.call(source, key)) {\n\n continue;\n }\n\n const value = source[key];\n if (value &&\n typeof value === 'object') {\n\n if (target[key] === value) {\n continue; // Can occur for shallow merges\n }\n\n if (!target[key] ||\n typeof target[key] !== 'object' ||\n (Array.isArray(target[key]) !== Array.isArray(value)) ||\n value instanceof Date ||\n (Buffer && Buffer.isBuffer(value)) || // $lab:coverage:ignore$\n value instanceof RegExp) {\n\n target[key] = Clone(value, { symbols: options.symbols });\n }\n else {\n internals.merge(target[key], value, options);\n }\n }\n else {\n if (value !== null &&\n value !== undefined) { // Explicit to preserve empty strings\n\n target[key] = value;\n }\n else if (options.nullOverride) {\n target[key] = value;\n }\n }\n }\n\n return target;\n};\n","'use strict';\n\nconst Assert = require('./assert');\nconst Clone = require('./clone');\nconst Merge = require('./merge');\nconst Reach = require('./reach');\n\n\nconst internals = {};\n\n\nmodule.exports = function (defaults, source, options = {}) {\n\n Assert(defaults && typeof defaults === 'object', 'Invalid defaults value: must be an object');\n Assert(!source || source === true || typeof source === 'object', 'Invalid source value: must be true, falsy or an object');\n Assert(typeof options === 'object', 'Invalid options: must be an object');\n\n if (!source) { // If no source, return null\n return null;\n }\n\n if (options.shallow) {\n return internals.applyToDefaultsWithShallow(defaults, source, options);\n }\n\n const copy = Clone(defaults);\n\n if (source === true) { // If source is set to true, use defaults\n return copy;\n }\n\n const nullOverride = options.nullOverride !== undefined ? options.nullOverride : false;\n return Merge(copy, source, { nullOverride, mergeArrays: false });\n};\n\n\ninternals.applyToDefaultsWithShallow = function (defaults, source, options) {\n\n const keys = options.shallow;\n Assert(Array.isArray(keys), 'Invalid keys');\n\n const seen = new Map();\n const merge = source === true ? null : new Set();\n\n for (let key of keys) {\n key = Array.isArray(key) ? key : key.split('.'); // Pre-split optimization\n\n const ref = Reach(defaults, key);\n if (ref &&\n typeof ref === 'object') {\n\n seen.set(ref, merge && Reach(source, key) || ref);\n }\n else if (merge) {\n merge.add(key);\n }\n }\n\n const copy = Clone(defaults, {}, seen);\n\n if (!merge) {\n return copy;\n }\n\n for (const key of merge) {\n internals.reachCopy(copy, source, key);\n }\n\n const nullOverride = options.nullOverride !== undefined ? options.nullOverride : false;\n return Merge(copy, source, { nullOverride, mergeArrays: false });\n};\n\n\ninternals.reachCopy = function (dst, src, path) {\n\n for (const segment of path) {\n if (!(segment in src)) {\n return;\n }\n\n const val = src[segment];\n\n if (typeof val !== 'object' || val === null) {\n return;\n }\n\n src = val;\n }\n\n const value = src;\n let ref = dst;\n for (let i = 0; i < path.length - 1; ++i) {\n const segment = path[i];\n if (typeof ref[segment] !== 'object') {\n ref[segment] = {};\n }\n\n ref = ref[segment];\n }\n\n ref[path[path.length - 1]] = value;\n};\n","module.exports = {};\n","'use strict';\n\nconst Types = require('./types');\n\n\nconst internals = {\n mismatched: null\n};\n\n\nmodule.exports = function (obj, ref, options) {\n\n options = Object.assign({ prototype: true }, options);\n\n return !!internals.isDeepEqual(obj, ref, options, []);\n};\n\n\ninternals.isDeepEqual = function (obj, ref, options, seen) {\n\n if (obj === ref) { // Copied from Deep-eql, copyright(c) 2013 Jake Luer, jake@alogicalparadox.com, MIT Licensed, https://github.com/chaijs/deep-eql\n return obj !== 0 || 1 / obj === 1 / ref;\n }\n\n const type = typeof obj;\n\n if (type !== typeof ref) {\n return false;\n }\n\n if (obj === null ||\n ref === null) {\n\n return false;\n }\n\n if (type === 'function') {\n if (!options.deepFunction ||\n obj.toString() !== ref.toString()) {\n\n return false;\n }\n\n // Continue as object\n }\n else if (type !== 'object') {\n return obj !== obj && ref !== ref; // NaN\n }\n\n const instanceType = internals.getSharedType(obj, ref, !!options.prototype);\n switch (instanceType) {\n case Types.buffer:\n return Buffer && Buffer.prototype.equals.call(obj, ref); // $lab:coverage:ignore$\n case Types.promise:\n return obj === ref;\n case Types.regex:\n case Types.url:\n return obj.toString() === ref.toString();\n case internals.mismatched:\n return false;\n }\n\n for (let i = seen.length - 1; i >= 0; --i) {\n if (seen[i].isSame(obj, ref)) {\n return true; // If previous comparison failed, it would have stopped execution\n }\n }\n\n seen.push(new internals.SeenEntry(obj, ref));\n\n try {\n return !!internals.isDeepEqualObj(instanceType, obj, ref, options, seen);\n }\n finally {\n seen.pop();\n }\n};\n\n\ninternals.getSharedType = function (obj, ref, checkPrototype) {\n\n if (checkPrototype) {\n if (Object.getPrototypeOf(obj) !== Object.getPrototypeOf(ref)) {\n return internals.mismatched;\n }\n\n return Types.getInternalProto(obj);\n }\n\n const type = Types.getInternalProto(obj);\n if (type !== Types.getInternalProto(ref)) {\n return internals.mismatched;\n }\n\n return type;\n};\n\n\ninternals.valueOf = function (obj) {\n\n const objValueOf = obj.valueOf;\n if (objValueOf === undefined) {\n return obj;\n }\n\n try {\n return objValueOf.call(obj);\n }\n catch (err) {\n return err;\n }\n};\n\n\ninternals.hasOwnEnumerableProperty = function (obj, key) {\n\n return Object.prototype.propertyIsEnumerable.call(obj, key);\n};\n\n\ninternals.isSetSimpleEqual = function (obj, ref) {\n\n for (const entry of Set.prototype.values.call(obj)) {\n if (!Set.prototype.has.call(ref, entry)) {\n return false;\n }\n }\n\n return true;\n};\n\n\ninternals.isDeepEqualObj = function (instanceType, obj, ref, options, seen) {\n\n const { isDeepEqual, valueOf, hasOwnEnumerableProperty } = internals;\n const { keys, getOwnPropertySymbols } = Object;\n\n if (instanceType === Types.array) {\n if (options.part) {\n\n // Check if any index match any other index\n\n for (const objValue of obj) {\n for (const refValue of ref) {\n if (isDeepEqual(objValue, refValue, options, seen)) {\n return true;\n }\n }\n }\n }\n else {\n if (obj.length !== ref.length) {\n return false;\n }\n\n for (let i = 0; i < obj.length; ++i) {\n if (!isDeepEqual(obj[i], ref[i], options, seen)) {\n return false;\n }\n }\n\n return true;\n }\n }\n else if (instanceType === Types.set) {\n if (obj.size !== ref.size) {\n return false;\n }\n\n if (!internals.isSetSimpleEqual(obj, ref)) {\n\n // Check for deep equality\n\n const ref2 = new Set(Set.prototype.values.call(ref));\n for (const objEntry of Set.prototype.values.call(obj)) {\n if (ref2.delete(objEntry)) {\n continue;\n }\n\n let found = false;\n for (const refEntry of ref2) {\n if (isDeepEqual(objEntry, refEntry, options, seen)) {\n ref2.delete(refEntry);\n found = true;\n break;\n }\n }\n\n if (!found) {\n return false;\n }\n }\n }\n }\n else if (instanceType === Types.map) {\n if (obj.size !== ref.size) {\n return false;\n }\n\n for (const [key, value] of Map.prototype.entries.call(obj)) {\n if (value === undefined && !Map.prototype.has.call(ref, key)) {\n return false;\n }\n\n if (!isDeepEqual(value, Map.prototype.get.call(ref, key), options, seen)) {\n return false;\n }\n }\n }\n else if (instanceType === Types.error) {\n\n // Always check name and message\n\n if (obj.name !== ref.name ||\n obj.message !== ref.message) {\n\n return false;\n }\n }\n\n // Check .valueOf()\n\n const valueOfObj = valueOf(obj);\n const valueOfRef = valueOf(ref);\n if ((obj !== valueOfObj || ref !== valueOfRef) &&\n !isDeepEqual(valueOfObj, valueOfRef, options, seen)) {\n\n return false;\n }\n\n // Check properties\n\n const objKeys = keys(obj);\n if (!options.part &&\n objKeys.length !== keys(ref).length &&\n !options.skip) {\n\n return false;\n }\n\n let skipped = 0;\n for (const key of objKeys) {\n if (options.skip &&\n options.skip.includes(key)) {\n\n if (ref[key] === undefined) {\n ++skipped;\n }\n\n continue;\n }\n\n if (!hasOwnEnumerableProperty(ref, key)) {\n return false;\n }\n\n if (!isDeepEqual(obj[key], ref[key], options, seen)) {\n return false;\n }\n }\n\n if (!options.part &&\n objKeys.length - skipped !== keys(ref).length) {\n\n return false;\n }\n\n // Check symbols\n\n if (options.symbols !== false) { // Defaults to true\n const objSymbols = getOwnPropertySymbols(obj);\n const refSymbols = new Set(getOwnPropertySymbols(ref));\n\n for (const key of objSymbols) {\n if (!options.skip?.includes(key)) {\n\n if (hasOwnEnumerableProperty(obj, key)) {\n if (!hasOwnEnumerableProperty(ref, key)) {\n return false;\n }\n\n if (!isDeepEqual(obj[key], ref[key], options, seen)) {\n return false;\n }\n }\n else if (hasOwnEnumerableProperty(ref, key)) {\n return false;\n }\n }\n\n refSymbols.delete(key);\n }\n\n for (const key of refSymbols) {\n if (hasOwnEnumerableProperty(ref, key)) {\n return false;\n }\n }\n }\n\n return true;\n};\n\n\ninternals.SeenEntry = class {\n\n constructor(obj, ref) {\n\n this.obj = obj;\n this.ref = ref;\n }\n\n isSame(obj, ref) {\n\n return this.obj === obj && this.ref === ref;\n }\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function (input) {\n\n if (!input) {\n return '';\n }\n\n let escaped = '';\n\n for (let i = 0; i < input.length; ++i) {\n\n const charCode = input.charCodeAt(i);\n\n if (internals.isSafe(charCode)) {\n escaped += input[i];\n }\n else {\n escaped += internals.escapeHtmlChar(charCode);\n }\n }\n\n return escaped;\n};\n\n\ninternals.escapeHtmlChar = function (charCode) {\n\n const namedEscape = internals.namedHtml.get(charCode);\n if (namedEscape) {\n return namedEscape;\n }\n\n if (charCode >= 256) {\n return '&#' + charCode + ';';\n }\n\n const hexValue = charCode.toString(16).padStart(2, '0');\n return `&#x${hexValue};`;\n};\n\n\ninternals.isSafe = function (charCode) {\n\n return internals.safeCharCodes.has(charCode);\n};\n\n\ninternals.namedHtml = new Map([\n [38, '&amp;'],\n [60, '&lt;'],\n [62, '&gt;'],\n [34, '&quot;'],\n [160, '&nbsp;'],\n [162, '&cent;'],\n [163, '&pound;'],\n [164, '&curren;'],\n [169, '&copy;'],\n [174, '&reg;']\n]);\n\n\ninternals.safeCharCodes = (function () {\n\n const safe = new Set();\n\n for (let i = 32; i < 123; ++i) {\n\n if ((i >= 97) || // a-z\n (i >= 65 && i <= 90) || // A-Z\n (i >= 48 && i <= 57) || // 0-9\n i === 32 || // space\n i === 46 || // .\n i === 44 || // ,\n i === 45 || // -\n i === 58 || // :\n i === 95) { // _\n\n safe.add(i);\n }\n }\n\n return safe;\n}());\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function (string) {\n\n // Escape ^$.*+-?=!:|\\/()[]{},\n\n return string.replace(/[\\^\\$\\.\\*\\+\\-\\?\\=\\!\\:\\|\\\\\\/\\(\\)\\[\\]\\{\\}\\,]/g, '\\\\$&');\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function () { };\n","'use strict';\n\nexports.applyToDefaults = require('./applyToDefaults');\n\nexports.assert = require('./assert');\n\nexports.AssertError = require('./assertError');\n\nexports.Bench = require('./bench');\n\nexports.block = require('./block');\n\nexports.clone = require('./clone');\n\nexports.contain = require('./contain');\n\nexports.deepEqual = require('./deepEqual');\n\nexports.escapeHeaderAttribute = require('./escapeHeaderAttribute');\n\nexports.escapeHtml = require('./escapeHtml');\n\nexports.escapeJson = require('./escapeJson');\n\nexports.escapeRegex = require('./escapeRegex');\n\nexports.flatten = require('./flatten');\n\nexports.ignore = require('./ignore');\n\nexports.intersect = require('./intersect');\n\nexports.isPromise = require('./isPromise');\n\nexports.merge = require('./merge');\n\nexports.once = require('./once');\n\nexports.reach = require('./reach');\n\nexports.reachTemplate = require('./reachTemplate');\n\nexports.stringify = require('./stringify');\n\nexports.wait = require('./wait');\n","'use strict';\n\nconst Joi = require('./index');\n\n\nconst internals = {};\n\n\n// Preferences\n\ninternals.wrap = Joi.string()\n .min(1)\n .max(2)\n .allow(false);\n\n\nexports.preferences = Joi.object({\n allowUnknown: Joi.boolean(),\n abortEarly: Joi.boolean(),\n artifacts: Joi.boolean(),\n cache: Joi.boolean(),\n context: Joi.object(),\n convert: Joi.boolean(),\n dateFormat: Joi.valid('date', 'iso', 'string', 'time', 'utc'),\n debug: Joi.boolean(),\n errors: {\n escapeHtml: Joi.boolean(),\n label: Joi.valid('path', 'key', false),\n language: [\n Joi.string(),\n Joi.object().ref()\n ],\n render: Joi.boolean(),\n stack: Joi.boolean(),\n wrap: {\n label: internals.wrap,\n array: internals.wrap,\n string: internals.wrap\n }\n },\n externals: Joi.boolean(),\n messages: Joi.object(),\n noDefaults: Joi.boolean(),\n nonEnumerables: Joi.boolean(),\n presence: Joi.valid('required', 'optional', 'forbidden'),\n skipFunctions: Joi.boolean(),\n stripUnknown: Joi.object({\n arrays: Joi.boolean(),\n objects: Joi.boolean()\n })\n .or('arrays', 'objects')\n .allow(true, false),\n warnings: Joi.boolean()\n})\n .strict();\n\n\n// Extensions\n\ninternals.nameRx = /^[a-zA-Z0-9]\\w*$/;\n\n\ninternals.rule = Joi.object({\n alias: Joi.array().items(Joi.string().pattern(internals.nameRx)).single(),\n args: Joi.array().items(\n Joi.string(),\n Joi.object({\n name: Joi.string().pattern(internals.nameRx).required(),\n ref: Joi.boolean(),\n assert: Joi.alternatives([\n Joi.function(),\n Joi.object().schema()\n ])\n .conditional('ref', { is: true, then: Joi.required() }),\n normalize: Joi.function(),\n message: Joi.string().when('assert', { is: Joi.function(), then: Joi.required() })\n })\n ),\n convert: Joi.boolean(),\n manifest: Joi.boolean(),\n method: Joi.function().allow(false),\n multi: Joi.boolean(),\n validate: Joi.function(),\n jsonSchema: Joi.function()\n});\n\n\nexports.extension = Joi.object({\n type: Joi.alternatives([\n Joi.string(),\n Joi.object().regex()\n ])\n .required(),\n args: Joi.function(),\n cast: Joi.object().pattern(internals.nameRx, Joi.object({\n from: Joi.function().maxArity(1).required(),\n to: Joi.function().minArity(1).maxArity(2).required()\n })),\n base: Joi.object().schema()\n .when('type', { is: Joi.object().regex(), then: Joi.forbidden() }),\n coerce: [\n Joi.function().maxArity(3),\n Joi.object({ method: Joi.function().maxArity(3).required(), from: Joi.array().items(Joi.string()).single() })\n ],\n flags: Joi.object().pattern(internals.nameRx, Joi.object({\n setter: Joi.string(),\n default: Joi.any()\n })),\n manifest: {\n build: Joi.function().arity(2)\n },\n messages: [Joi.object(), Joi.string()],\n modifiers: Joi.object().pattern(internals.nameRx, Joi.function().minArity(1).maxArity(2)),\n overrides: Joi.object().pattern(internals.nameRx, Joi.function()),\n prepare: Joi.function().maxArity(3),\n rebuild: Joi.function().arity(1),\n rules: Joi.object().pattern(internals.nameRx, internals.rule),\n jsonSchema: Joi.function(),\n terms: Joi.object().pattern(internals.nameRx, Joi.object({\n init: Joi.array().allow(null).required(),\n manifest: Joi.object().pattern(/.+/, [\n Joi.valid('schema', 'single'),\n Joi.object({\n mapped: Joi.object({\n from: Joi.string().required(),\n to: Joi.string().required()\n })\n .required()\n })\n ])\n })),\n validate: Joi.function().maxArity(3)\n})\n .strict();\n\n\nexports.extensions = Joi.array().items(Joi.object(), Joi.function().arity(1)).strict();\n\n\n// Manifest\n\ninternals.desc = {\n\n buffer: Joi.object({\n buffer: Joi.string()\n }),\n\n func: Joi.object({\n function: Joi.function().required(),\n options: {\n literal: true\n }\n }),\n\n override: Joi.object({\n override: true\n }),\n\n ref: Joi.object({\n ref: Joi.object({\n type: Joi.valid('value', 'global', 'local'),\n path: Joi.array().required(),\n separator: Joi.string().length(1).allow(false),\n ancestor: Joi.number().min(0).integer().allow('root'),\n map: Joi.array().items(Joi.array().length(2)).min(1),\n adjust: Joi.function(),\n iterables: Joi.boolean(),\n in: Joi.boolean(),\n render: Joi.boolean()\n })\n .required()\n }),\n\n regex: Joi.object({\n regex: Joi.string().min(3)\n }),\n\n special: Joi.object({\n special: Joi.valid('deep').required()\n }),\n\n template: Joi.object({\n template: Joi.string().required(),\n options: Joi.object()\n }),\n\n value: Joi.object({\n value: Joi.alternatives([Joi.object(), Joi.array()]).required()\n })\n};\n\n\ninternals.desc.entity = Joi.alternatives([\n Joi.array().items(Joi.link('...')),\n Joi.boolean(),\n Joi.function(),\n Joi.number(),\n Joi.string(),\n internals.desc.buffer,\n internals.desc.func,\n internals.desc.ref,\n internals.desc.regex,\n internals.desc.special,\n internals.desc.template,\n internals.desc.value,\n Joi.link('/')\n]);\n\n\ninternals.desc.values = Joi.array()\n .items(\n null,\n Joi.boolean(),\n Joi.function(),\n Joi.number().allow(Infinity, -Infinity, NaN),\n Joi.string().allow(''),\n Joi.symbol(),\n internals.desc.buffer,\n internals.desc.func,\n internals.desc.override,\n internals.desc.ref,\n internals.desc.regex,\n internals.desc.template,\n internals.desc.value\n );\n\n\ninternals.desc.messages = Joi.object()\n .pattern(/.+/, [\n Joi.string(),\n internals.desc.template,\n Joi.object().pattern(/.+/, [Joi.string(), internals.desc.template])\n ]);\n\n\nexports.description = Joi.object({\n type: Joi.string().required(),\n flags: Joi.object({\n cast: Joi.string(),\n default: Joi.any(),\n description: Joi.string(),\n empty: Joi.link('/'),\n failover: internals.desc.entity,\n id: Joi.string(),\n label: Joi.string(),\n only: true,\n presence: ['optional', 'required', 'forbidden'],\n result: ['raw', 'strip'],\n strip: Joi.boolean(),\n unit: Joi.string()\n })\n .unknown(),\n preferences: {\n allowUnknown: Joi.boolean(),\n abortEarly: Joi.boolean(),\n artifacts: Joi.boolean(),\n cache: Joi.boolean(),\n convert: Joi.boolean(),\n dateFormat: ['date', 'iso', 'string', 'time', 'utc'],\n errors: {\n escapeHtml: Joi.boolean(),\n label: ['path', 'key'],\n language: [\n Joi.string(),\n internals.desc.ref\n ],\n wrap: {\n label: internals.wrap,\n array: internals.wrap\n }\n },\n externals: Joi.boolean(),\n messages: internals.desc.messages,\n noDefaults: Joi.boolean(),\n nonEnumerables: Joi.boolean(),\n presence: ['required', 'optional', 'forbidden'],\n skipFunctions: Joi.boolean(),\n stripUnknown: Joi.object({\n arrays: Joi.boolean(),\n objects: Joi.boolean()\n })\n .or('arrays', 'objects')\n .allow(true, false),\n warnings: Joi.boolean()\n },\n allow: internals.desc.values,\n invalid: internals.desc.values,\n rules: Joi.array().min(1).items({\n name: Joi.string().required(),\n args: Joi.object().min(1),\n keep: Joi.boolean(),\n message: [\n Joi.string(),\n internals.desc.messages\n ],\n warn: Joi.boolean()\n }),\n\n // Terms\n\n keys: Joi.object().pattern(/.*/, Joi.link('/')),\n link: internals.desc.ref\n})\n .pattern(/^[a-z]\\w*$/, Joi.any());\n","'use strict';\n\nconst internals = {\n operators: ['!', '^', '*', '/', '%', '+', '-', '<', '<=', '>', '>=', '==', '!=', '&&', '||', '??'],\n operatorCharacters: ['!', '^', '*', '/', '%', '+', '-', '<', '=', '>', '&', '|', '?'],\n operatorsOrder: [['^'], ['*', '/', '%'], ['+', '-'], ['<', '<=', '>', '>='], ['==', '!='], ['&&'], ['||', '??']],\n operatorsPrefix: ['!', 'n'],\n\n literals: {\n '\"': '\"',\n '`': '`',\n '\\'': '\\'',\n '[': ']'\n },\n\n numberRx: /^(?:[0-9]*(\\.[0-9]*)?){1}$/,\n tokenRx: /^[\\w\\$\\#\\.\\@\\:\\{\\}]+$/,\n\n symbol: Symbol('formula'),\n settings: Symbol('settings')\n};\n\n\nexports.Parser = class {\n\n constructor(string, options = {}) {\n\n if (!options[internals.settings] &&\n options.constants) {\n\n for (const constant in options.constants) {\n const value = options.constants[constant];\n if (value !== null &&\n !['boolean', 'number', 'string'].includes(typeof value)) {\n\n throw new Error(`Formula constant ${constant} contains invalid ${typeof value} value type`);\n }\n }\n }\n\n this.settings = options[internals.settings] ? options : Object.assign({ [internals.settings]: true, constants: {}, functions: {} }, options);\n this.single = null;\n\n this._parts = null;\n this._parse(string);\n }\n\n _parse(string) {\n\n let parts = [];\n let current = '';\n let parenthesis = 0;\n let literal = false;\n\n const flush = (inner) => {\n\n if (parenthesis) {\n throw new Error('Formula missing closing parenthesis');\n }\n\n const last = parts.length ? parts[parts.length - 1] : null;\n\n if (!literal &&\n !current &&\n !inner) {\n\n return;\n }\n\n if (last &&\n last.type === 'reference' &&\n inner === ')') { // Function\n\n last.type = 'function';\n last.value = this._subFormula(current, last.value);\n current = '';\n return;\n }\n\n if (inner === ')') { // Segment\n const sub = new exports.Parser(current, this.settings);\n parts.push({ type: 'segment', value: sub });\n }\n else if (literal) {\n if (literal === ']') { // Reference\n parts.push({ type: 'reference', value: current });\n current = '';\n return;\n }\n\n parts.push({ type: 'literal', value: current }); // Literal\n }\n else if (internals.operatorCharacters.includes(current)) { // Operator\n if (last &&\n last.type === 'operator' &&\n internals.operators.includes(last.value + current)) { // 2 characters operator\n\n last.value += current;\n }\n else {\n parts.push({ type: 'operator', value: current });\n }\n }\n else if (current.match(internals.numberRx)) { // Number\n parts.push({ type: 'constant', value: parseFloat(current) });\n }\n else if (this.settings.constants[current] !== undefined) { // Constant\n parts.push({ type: 'constant', value: this.settings.constants[current] });\n }\n else { // Reference\n if (!current.match(internals.tokenRx)) {\n throw new Error(`Formula contains invalid token: ${current}`);\n }\n\n parts.push({ type: 'reference', value: current });\n }\n\n current = '';\n };\n\n for (const c of string) {\n if (literal) {\n if (c === literal) {\n flush();\n literal = false;\n }\n else {\n current += c;\n }\n }\n else if (parenthesis) {\n if (c === '(') {\n current += c;\n ++parenthesis;\n }\n else if (c === ')') {\n --parenthesis;\n if (!parenthesis) {\n flush(c);\n }\n else {\n current += c;\n }\n }\n else {\n current += c;\n }\n }\n else if (c in internals.literals) {\n literal = internals.literals[c];\n }\n else if (c === '(') {\n flush();\n ++parenthesis;\n }\n else if (internals.operatorCharacters.includes(c)) {\n flush();\n current = c;\n flush();\n }\n else if (c !== ' ') {\n current += c;\n }\n else {\n flush();\n }\n }\n\n flush();\n\n // Replace prefix - to internal negative operator\n\n parts = parts.map((part, i) => {\n\n if (part.type !== 'operator' ||\n part.value !== '-' ||\n i && parts[i - 1].type !== 'operator') {\n\n return part;\n }\n\n return { type: 'operator', value: 'n' };\n });\n\n // Validate tokens order\n\n let operator = false;\n for (const part of parts) {\n if (part.type === 'operator') {\n if (internals.operatorsPrefix.includes(part.value)) {\n continue;\n }\n\n if (!operator) {\n throw new Error('Formula contains an operator in invalid position');\n }\n\n if (!internals.operators.includes(part.value)) {\n throw new Error(`Formula contains an unknown operator ${part.value}`);\n }\n }\n else if (operator) {\n throw new Error('Formula missing expected operator');\n }\n\n operator = !operator;\n }\n\n if (!operator) {\n throw new Error('Formula contains invalid trailing operator');\n }\n\n // Identify single part\n\n if (parts.length === 1 &&\n ['reference', 'literal', 'constant'].includes(parts[0].type)) {\n\n this.single = { type: parts[0].type === 'reference' ? 'reference' : 'value', value: parts[0].value };\n }\n\n // Process parts\n\n this._parts = parts.map((part) => {\n\n // Operators\n\n if (part.type === 'operator') {\n return internals.operatorsPrefix.includes(part.value) ? part : part.value;\n }\n\n // Literals, constants, segments\n\n if (part.type !== 'reference') {\n return part.value;\n }\n\n // References\n\n if (this.settings.tokenRx &&\n !this.settings.tokenRx.test(part.value)) {\n\n throw new Error(`Formula contains invalid reference ${part.value}`);\n }\n\n if (this.settings.reference) {\n return this.settings.reference(part.value);\n }\n\n return internals.reference(part.value);\n });\n }\n\n _subFormula(string, name) {\n\n const method = this.settings.functions[name];\n if (typeof method !== 'function') {\n throw new Error(`Formula contains unknown function ${name}`);\n }\n\n let args = [];\n if (string) {\n let current = '';\n let parenthesis = 0;\n let literal = false;\n\n const flush = () => {\n\n if (!current) {\n throw new Error(`Formula contains function ${name} with invalid arguments ${string}`);\n }\n\n args.push(current);\n current = '';\n };\n\n for (let i = 0; i < string.length; ++i) {\n const c = string[i];\n if (literal) {\n current += c;\n if (c === literal) {\n literal = false;\n }\n }\n else if (c in internals.literals &&\n !parenthesis) {\n\n current += c;\n literal = internals.literals[c];\n }\n else if (c === ',' &&\n !parenthesis) {\n\n flush();\n }\n else {\n current += c;\n if (c === '(') {\n ++parenthesis;\n }\n else if (c === ')') {\n --parenthesis;\n }\n }\n }\n\n flush();\n }\n\n args = args.map((arg) => new exports.Parser(arg, this.settings));\n\n return function (context) {\n\n const innerValues = [];\n for (const arg of args) {\n innerValues.push(arg.evaluate(context));\n }\n\n return method.call(context, ...innerValues);\n };\n }\n\n evaluate(context) {\n\n const parts = this._parts.slice();\n\n // Prefix operators\n\n for (let i = parts.length - 2; i >= 0; --i) {\n const part = parts[i];\n if (part &&\n part.type === 'operator') {\n\n const current = parts[i + 1];\n parts.splice(i + 1, 1);\n const value = internals.evaluate(current, context);\n parts[i] = internals.single(part.value, value);\n }\n }\n\n // Left-right operators\n\n internals.operatorsOrder.forEach((set) => {\n\n for (let i = 1; i < parts.length - 1;) {\n if (set.includes(parts[i])) {\n const operator = parts[i];\n const left = internals.evaluate(parts[i - 1], context);\n const right = internals.evaluate(parts[i + 1], context);\n\n parts.splice(i, 2);\n const result = internals.calculate(operator, left, right);\n parts[i - 1] = result === 0 ? 0 : result; // Convert -0\n }\n else {\n i += 2;\n }\n }\n });\n\n return internals.evaluate(parts[0], context);\n }\n};\n\n\nexports.Parser.prototype[internals.symbol] = true;\n\n\ninternals.reference = function (name) {\n\n return function (context) {\n\n return context && context[name] !== undefined ? context[name] : null;\n };\n};\n\n\ninternals.evaluate = function (part, context) {\n\n if (part === null) {\n return null;\n }\n\n if (typeof part === 'function') {\n return part(context);\n }\n\n if (part[internals.symbol]) {\n return part.evaluate(context);\n }\n\n return part;\n};\n\n\ninternals.single = function (operator, value) {\n\n if (operator === '!') {\n return value ? false : true;\n }\n\n // operator === 'n'\n\n const negative = -value;\n if (negative === 0) { // Override -0\n return 0;\n }\n\n return negative;\n};\n\n\ninternals.calculate = function (operator, left, right) {\n\n if (operator === '??') {\n return internals.exists(left) ? left : right;\n }\n\n if (typeof left === 'string' ||\n typeof right === 'string') {\n\n if (operator === '+') {\n left = internals.exists(left) ? left : '';\n right = internals.exists(right) ? right : '';\n return left + right;\n }\n }\n else {\n switch (operator) {\n case '^': return Math.pow(left, right);\n case '*': return left * right;\n case '/': return left / right;\n case '%': return left % right;\n case '+': return left + right;\n case '-': return left - right;\n }\n }\n\n switch (operator) {\n case '<': return left < right;\n case '<=': return left <= right;\n case '>': return left > right;\n case '>=': return left >= right;\n case '==': return left === right;\n case '!=': return left !== right;\n case '&&': return left && right;\n case '||': return left || right;\n }\n\n return null;\n};\n\n\ninternals.exists = function (value) {\n\n return value !== null && value !== undefined;\n};\n","'use strict';\n\nconst Annotate = require('./annotate');\nconst Common = require('./common');\nconst Template = require('./template');\n\n\nconst internals = {};\n\n\nexports.Report = class {\n\n constructor(code, value, local, flags, messages, state, prefs) {\n\n this.code = code;\n this.flags = flags;\n this.messages = messages;\n this.path = state.path;\n this.prefs = prefs;\n this.state = state;\n this.value = value;\n\n this.message = null;\n this.template = null;\n\n this.local = local || {};\n this.local.label = exports.label(this.flags, this.state, this.prefs, this.messages);\n\n if (this.value !== undefined &&\n !this.local.hasOwnProperty('value')) {\n\n this.local.value = this.value;\n }\n\n if (this.path.length) {\n const key = this.path[this.path.length - 1];\n if (typeof key !== 'object') {\n this.local.key = key;\n }\n }\n }\n\n _setTemplate(template) {\n\n this.template = template;\n\n if (!this.flags.label &&\n this.path.length === 0) {\n\n const localized = this._template(this.template, 'root');\n if (localized) {\n this.local.label = localized;\n }\n }\n }\n\n toString() {\n\n if (this.message) {\n return this.message;\n }\n\n const code = this.code;\n\n if (!this.prefs.errors.render) {\n return this.code;\n }\n\n const template = this._template(this.template) ||\n this._template(this.prefs.messages) ||\n this._template(this.messages);\n\n if (template === undefined) {\n return `Error code \"${code}\" is not defined, your custom type is missing the correct messages definition`;\n }\n\n // Render and cache result\n\n this.message = template.render(this.value, this.state, this.prefs, this.local, { errors: this.prefs.errors, messages: [this.prefs.messages, this.messages] });\n if (!this.prefs.errors.label) {\n this.message = this.message.replace(/^\"\" /, '').trim();\n }\n\n return this.message;\n }\n\n _template(messages, code) {\n\n return exports.template(this.value, messages, code || this.code, this.state, this.prefs);\n }\n};\n\n\nexports.path = function (path) {\n\n let label = '';\n for (const segment of path) {\n if (typeof segment === 'object') { // Exclude array single path segment\n continue;\n }\n\n if (typeof segment === 'string') {\n if (label) {\n label += '.';\n }\n\n label += segment;\n }\n else {\n label += `[${segment}]`;\n }\n }\n\n return label;\n};\n\n\nexports.template = function (value, messages, code, state, prefs) {\n\n if (!messages) {\n return;\n }\n\n if (Template.isTemplate(messages)) {\n return code !== 'root' ? messages : null;\n }\n\n let lang = prefs.errors.language;\n if (Common.isResolvable(lang)) {\n lang = lang.resolve(value, state, prefs);\n }\n\n if (lang &&\n messages[lang]) {\n\n if (messages[lang][code] !== undefined) {\n return messages[lang][code];\n }\n\n if (messages[lang]['*'] !== undefined) {\n return messages[lang]['*'];\n }\n }\n\n if (!messages[code]) {\n return messages['*'];\n }\n\n return messages[code];\n};\n\n\nexports.label = function (flags, state, prefs, messages) {\n\n if (!prefs.errors.label) {\n return '';\n }\n\n if (flags.label) {\n return flags.label;\n }\n\n let path = state.path;\n if (prefs.errors.label === 'key' &&\n state.path.length > 1) {\n\n path = state.path.slice(-1);\n }\n\n const normalized = exports.path(path);\n if (normalized) {\n return normalized;\n }\n\n return exports.template(null, prefs.messages, 'root', state, prefs) ||\n messages && exports.template(null, messages, 'root', state, prefs) ||\n 'value';\n};\n\n\nexports.process = function (errors, original, prefs) {\n\n if (!errors) {\n return null;\n }\n\n const { override, message, details } = exports.details(errors);\n if (override) {\n return override;\n }\n\n if (prefs.errors.stack) {\n return new exports.ValidationError(message, details, original);\n }\n\n const limit = Error.stackTraceLimit;\n Error.stackTraceLimit = 0;\n const validationError = new exports.ValidationError(message, details, original);\n Error.stackTraceLimit = limit;\n return validationError;\n};\n\n\nexports.details = function (errors, options = {}) {\n\n let messages = [];\n const details = [];\n\n for (const item of errors) {\n\n // Override\n\n if (item instanceof Error) {\n if (options.override !== false) {\n return { override: item };\n }\n\n const message = item.toString();\n messages.push(message);\n\n details.push({\n message,\n type: 'override',\n context: { error: item }\n });\n\n continue;\n }\n\n // Report\n\n const message = item.toString();\n messages.push(message);\n\n details.push({\n message,\n path: item.path.filter((v) => typeof v !== 'object'),\n type: item.code,\n context: item.local\n });\n }\n\n if (messages.length > 1) {\n messages = [...new Set(messages)];\n }\n\n return { message: messages.join('. '), details };\n};\n\n\nexports.ValidationError = class extends Error {\n\n constructor(message, details, original) {\n\n super(message);\n this._original = original;\n this.details = details;\n }\n\n static isError(err) {\n\n return err instanceof exports.ValidationError;\n }\n};\n\n\nexports.ValidationError.prototype.isJoi = true;\n\nexports.ValidationError.prototype.name = 'ValidationError';\n\nexports.ValidationError.prototype.annotate = Annotate.error;\n","'use strict';\n\nconst { assert, clone, reach } = require('@hapi/hoek');\n\nconst Common = require('./common');\n\nlet Template;\n\n\nconst internals = {\n symbol: Symbol('ref'), // Used to internally identify references (shared with other joi versions)\n defaults: {\n adjust: null,\n in: false,\n iterables: null,\n map: null,\n separator: '.',\n type: 'value'\n }\n};\n\n\nexports.create = function (key, options = {}) {\n\n assert(typeof key === 'string', 'Invalid reference key:', key);\n Common.assertOptions(options, ['adjust', 'ancestor', 'in', 'iterables', 'map', 'prefix', 'render', 'separator']);\n assert(!options.prefix || typeof options.prefix === 'object', 'options.prefix must be of type object');\n\n const ref = Object.assign({}, internals.defaults, options);\n delete ref.prefix;\n\n const separator = ref.separator;\n const context = internals.context(key, separator, options.prefix);\n ref.type = context.type;\n key = context.key;\n\n if (ref.type === 'value') {\n if (context.root) {\n assert(!separator || key[0] !== separator, 'Cannot specify relative path with root prefix');\n ref.ancestor = 'root';\n if (!key) {\n key = null;\n }\n }\n\n if (separator &&\n separator === key) {\n\n key = null;\n ref.ancestor = 0;\n }\n else {\n if (ref.ancestor !== undefined) {\n assert(!separator || !key || key[0] !== separator, 'Cannot combine prefix with ancestor option');\n }\n else {\n const [ancestor, slice] = internals.ancestor(key, separator);\n if (slice) {\n key = key.slice(slice);\n if (key === '') {\n key = null;\n }\n }\n\n ref.ancestor = ancestor;\n }\n }\n }\n\n ref.path = separator ? (key === null ? [] : key.split(separator)) : [key];\n\n return new internals.Ref(ref);\n};\n\n\nexports.in = function (key, options = {}) {\n\n return exports.create(key, { ...options, in: true });\n};\n\n\nexports.isRef = function (ref) {\n\n return ref ? !!ref[Common.symbols.ref] : false;\n};\n\n\ninternals.Ref = class {\n\n constructor(options) {\n\n assert(typeof options === 'object', 'Invalid reference construction');\n Common.assertOptions(options, [\n 'adjust', 'ancestor', 'in', 'iterables', 'map', 'path', 'render', 'separator', 'type', // Copied\n 'depth', 'key', 'root', 'display' // Overridden\n ]);\n\n assert([false, undefined].includes(options.separator) || typeof options.separator === 'string' && options.separator.length === 1, 'Invalid separator');\n assert(!options.adjust || typeof options.adjust === 'function', 'options.adjust must be a function');\n assert(!options.map || Array.isArray(options.map), 'options.map must be an array');\n assert(!options.map || !options.adjust, 'Cannot set both map and adjust options');\n\n Object.assign(this, internals.defaults, options);\n\n assert(this.type === 'value' || this.ancestor === undefined, 'Non-value references cannot reference ancestors');\n\n if (Array.isArray(this.map)) {\n this.map = new Map(this.map);\n }\n\n this.depth = this.path.length;\n this.key = this.path.length ? this.path.join(this.separator) : null;\n this.root = this.path[0];\n\n this.updateDisplay();\n }\n\n resolve(value, state, prefs, local, options = {}) {\n\n assert(!this.in || options.in, 'Invalid in() reference usage');\n\n if (this.type === 'global') {\n return this._resolve(prefs.context, state, options);\n }\n\n if (this.type === 'local') {\n return this._resolve(local, state, options);\n }\n\n if (!this.ancestor) {\n return this._resolve(value, state, options);\n }\n\n if (this.ancestor === 'root') {\n return this._resolve(state.ancestors[state.ancestors.length - 1], state, options);\n }\n\n assert(this.ancestor <= state.ancestors.length, 'Invalid reference exceeds the schema root:', this.display);\n return this._resolve(state.ancestors[this.ancestor - 1], state, options);\n }\n\n _resolve(target, state, options) {\n\n let resolved;\n\n if (this.type === 'value' &&\n state.mainstay.shadow &&\n options.shadow !== false) {\n\n resolved = state.mainstay.shadow.get(this.absolute(state));\n }\n\n if (resolved === undefined) {\n resolved = reach(target, this.path, { iterables: this.iterables, functions: true });\n }\n\n if (this.adjust) {\n resolved = this.adjust(resolved);\n }\n\n if (this.map) {\n const mapped = this.map.get(resolved);\n if (mapped !== undefined) {\n resolved = mapped;\n }\n }\n\n if (state.mainstay) {\n state.mainstay.tracer.resolve(state, this, resolved);\n }\n\n return resolved;\n }\n\n toString() {\n\n return this.display;\n }\n\n absolute(state) {\n\n return [...state.path.slice(0, -this.ancestor), ...this.path];\n }\n\n clone() {\n\n return new internals.Ref(this);\n }\n\n describe() {\n\n const ref = { path: this.path };\n\n if (this.type !== 'value') {\n ref.type = this.type;\n }\n\n if (this.separator !== '.') {\n ref.separator = this.separator;\n }\n\n if (this.type === 'value' &&\n this.ancestor !== 1) {\n\n ref.ancestor = this.ancestor;\n }\n\n if (this.map) {\n ref.map = [...this.map];\n }\n\n for (const key of ['adjust', 'iterables', 'render']) {\n if (this[key] !== null &&\n this[key] !== undefined) {\n\n ref[key] = this[key];\n }\n }\n\n if (this.in !== false) {\n ref.in = true;\n }\n\n return { ref };\n }\n\n updateDisplay() {\n\n const key = this.key !== null ? this.key : '';\n if (this.type !== 'value') {\n this.display = `ref:${this.type}:${key}`;\n return;\n }\n\n if (!this.separator) {\n this.display = `ref:${key}`;\n return;\n }\n\n if (!this.ancestor) {\n this.display = `ref:${this.separator}${key}`;\n return;\n }\n\n if (this.ancestor === 'root') {\n this.display = `ref:root:${key}`;\n return;\n }\n\n if (this.ancestor === 1) {\n this.display = `ref:${key || '..'}`;\n return;\n }\n\n const lead = new Array(this.ancestor + 1).fill(this.separator).join('');\n this.display = `ref:${lead}${key || ''}`;\n }\n};\n\n\ninternals.Ref.prototype[Common.symbols.ref] = true;\n\n\nexports.build = function (desc) {\n\n desc = Object.assign({}, internals.defaults, desc);\n if (desc.type === 'value' &&\n desc.ancestor === undefined) {\n\n desc.ancestor = 1;\n }\n\n return new internals.Ref(desc);\n};\n\n\ninternals.context = function (key, separator, prefix = {}) {\n\n key = key.trim();\n\n if (prefix) {\n const globalp = prefix.global === undefined ? '$' : prefix.global;\n if (globalp !== separator &&\n key.startsWith(globalp)) {\n\n return { key: key.slice(globalp.length), type: 'global' };\n }\n\n const local = prefix.local === undefined ? '#' : prefix.local;\n if (local !== separator &&\n key.startsWith(local)) {\n\n return { key: key.slice(local.length), type: 'local' };\n }\n\n const root = prefix.root === undefined ? '/' : prefix.root;\n if (root !== separator &&\n key.startsWith(root)) {\n\n return { key: key.slice(root.length), type: 'value', root: true };\n }\n }\n\n return { key, type: 'value' };\n};\n\n\ninternals.ancestor = function (key, separator) {\n\n if (!separator) {\n return [1, 0]; // 'a_b' -> 1 (parent)\n }\n\n if (key[0] !== separator) { // 'a.b' -> 1 (parent)\n return [1, 0];\n }\n\n if (key[1] !== separator) { // '.a.b' -> 0 (self)\n return [0, 1];\n }\n\n let i = 2;\n while (key[i] === separator) {\n ++i;\n }\n\n return [i - 1, i]; // '...a.b.' -> 2 (grandparent)\n};\n\n\nexports.toSibling = 0;\n\nexports.toParent = 1;\n\n\nexports.Manager = class {\n\n constructor() {\n\n this.refs = []; // 0: [self refs], 1: [parent refs], 2: [grandparent refs], ...\n }\n\n register(source, target) {\n\n if (!source) {\n return;\n }\n\n target = target === undefined ? exports.toParent : target;\n\n // Array\n\n if (Array.isArray(source)) {\n for (const ref of source) {\n this.register(ref, target);\n }\n\n return;\n }\n\n // Schema\n\n if (Common.isSchema(source)) {\n for (const item of source._refs.refs) {\n if (item.ancestor - target >= 0) {\n this.refs.push({ ancestor: item.ancestor - target, root: item.root });\n }\n }\n\n return;\n }\n\n // Reference\n\n if (exports.isRef(source) &&\n source.type === 'value' &&\n source.ancestor - target >= 0) {\n\n this.refs.push({ ancestor: source.ancestor - target, root: source.root });\n }\n\n // Template\n\n Template = Template || require('./template');\n\n if (Template.isTemplate(source)) {\n this.register(source.refs(), target);\n }\n }\n\n get length() {\n\n return this.refs.length;\n }\n\n clone() {\n\n const copy = new exports.Manager();\n copy.refs = clone(this.refs);\n return copy;\n }\n\n reset() {\n\n this.refs = [];\n }\n\n roots() {\n\n return this.refs.filter((ref) => !ref.ancestor).map((ref) => ref.root);\n }\n};\n","'use strict';\n\nconst { assert, clone, escapeHtml } = require('@hapi/hoek');\nconst Formula = require('@hapi/formula');\n\nconst Common = require('./common');\nconst Errors = require('./errors');\nconst Ref = require('./ref');\n\n\nconst internals = {\n symbol: Symbol('template'),\n\n opens: new Array(1000).join('\\u0000'),\n closes: new Array(1000).join('\\u0001'),\n\n dateFormat: {\n date: Date.prototype.toDateString,\n iso: Date.prototype.toISOString,\n string: Date.prototype.toString,\n time: Date.prototype.toTimeString,\n utc: Date.prototype.toUTCString\n }\n};\n\n\nmodule.exports = exports = internals.Template = class {\n\n constructor(source, options) {\n\n assert(typeof source === 'string', 'Template source must be a string');\n assert(!source.includes('\\u0000') && !source.includes('\\u0001'), 'Template source cannot contain reserved control characters');\n\n this.source = source;\n this.rendered = source;\n\n this._template = null;\n\n if (options) {\n const { functions, ...opts } = options;\n this._settings = Object.keys(opts).length ? clone(opts) : undefined;\n this._functions = functions;\n if (this._functions) {\n assert(Object.keys(this._functions).every((key) => typeof key === 'string'), 'Functions keys must be strings');\n assert(Object.values(this._functions).every((key) => typeof key === 'function'), 'Functions values must be functions');\n }\n }\n else {\n this._settings = undefined;\n this._functions = undefined;\n }\n\n this._parse();\n }\n\n _parse() {\n\n // 'text {raw} {{ref}} \\\\{{ignore}} {{ignore\\\\}} {{ignore {{ignore}'\n\n if (!this.source.includes('{')) {\n return;\n }\n\n // Encode escaped \\\\{{{{{\n\n const encoded = internals.encode(this.source);\n\n // Split on first { in each set\n\n const parts = internals.split(encoded);\n\n // Process parts\n\n let refs = false;\n const processed = [];\n const head = parts.shift();\n if (head) {\n processed.push(internals.decode(head));\n }\n\n for (const part of parts) {\n const raw = part[0] !== '{';\n const ender = raw ? '}' : '}}';\n const end = part.indexOf(ender);\n if (end === -1 || // Ignore non-matching closing\n part[1] === '{') { // Ignore more than two {\n\n processed.push(`{${internals.decode(part)}`);\n continue;\n }\n\n let variable = part.slice(raw ? 0 : 1, end);\n const wrapped = variable[0] === ':';\n if (wrapped) {\n variable = variable.slice(1);\n }\n\n const dynamic = this._ref(internals.decode(variable), { raw, wrapped });\n processed.push(dynamic);\n if (typeof dynamic !== 'string') {\n refs = true;\n }\n\n const rest = part.slice(end + ender.length);\n if (rest) {\n processed.push(internals.decode(rest));\n }\n }\n\n if (!refs) {\n this.rendered = processed.join('');\n return;\n }\n\n this._template = processed;\n }\n\n static date(date, prefs) {\n\n return internals.dateFormat[prefs.dateFormat].call(date);\n }\n\n describe(options = {}) {\n\n if (!this._settings &&\n options.compact) {\n\n return this.source;\n }\n\n const desc = { template: this.source };\n if (this._settings) {\n desc.options = this._settings;\n }\n\n if (this._functions) {\n desc.functions = this._functions;\n }\n\n return desc;\n }\n\n static build(desc) {\n\n return new internals.Template(desc.template, desc.options || desc.functions ? { ...desc.options, functions: desc.functions } : undefined);\n }\n\n isDynamic() {\n\n return !!this._template;\n }\n\n static isTemplate(template) {\n\n return template ? !!template[Common.symbols.template] : false;\n }\n\n refs() {\n\n if (!this._template) {\n return;\n }\n\n const refs = [];\n for (const part of this._template) {\n if (typeof part !== 'string') {\n refs.push(...part.refs);\n }\n }\n\n return refs;\n }\n\n resolve(value, state, prefs, local) {\n\n if (this._template &&\n this._template.length === 1) {\n\n return this._part(this._template[0], /* context -> [*/ value, state, prefs, local, {} /*] */);\n }\n\n return this.render(value, state, prefs, local);\n }\n\n _part(part, ...args) {\n\n if (part.ref) {\n return part.ref.resolve(...args);\n }\n\n return part.formula.evaluate(args);\n }\n\n render(value, state, prefs, local, options = {}) {\n\n if (!this.isDynamic()) {\n return this.rendered;\n }\n\n const parts = [];\n for (const part of this._template) {\n if (typeof part === 'string') {\n parts.push(part);\n }\n else {\n const rendered = this._part(part, /* context -> [*/ value, state, prefs, local, options /*] */);\n const string = internals.stringify(rendered, value, state, prefs, local, options);\n if (string !== undefined) {\n const result = part.raw || (options.errors && options.errors.escapeHtml) === false ? string : escapeHtml(string);\n parts.push(internals.wrap(result, part.wrapped && prefs.errors.wrap.label));\n }\n }\n }\n\n return parts.join('');\n }\n\n _ref(content, { raw, wrapped }) {\n\n const refs = [];\n const reference = (variable) => {\n\n const ref = Ref.create(variable, this._settings);\n refs.push(ref);\n return (context) => {\n\n const resolved = ref.resolve(...context);\n return resolved !== undefined ? resolved : null;\n };\n };\n\n try {\n const functions = this._functions ? { ...internals.functions, ...this._functions } : internals.functions;\n var formula = new Formula.Parser(content, { reference, functions, constants: internals.constants });\n }\n catch (err) {\n err.message = `Invalid template variable \"${content}\" fails due to: ${err.message}`;\n throw err;\n }\n\n if (formula.single) {\n if (formula.single.type === 'reference') {\n const ref = refs[0];\n return { ref, raw, refs, wrapped: wrapped || ref.type === 'local' && ref.key === 'label' };\n }\n\n return internals.stringify(formula.single.value);\n }\n\n return { formula, raw, refs };\n }\n\n toString() {\n\n return this.source;\n }\n};\n\n\ninternals.Template.prototype[Common.symbols.template] = true;\ninternals.Template.prototype.isImmutable = true; // Prevents Hoek from deep cloning schema objects\n\n\ninternals.encode = function (string) {\n\n return string\n .replace(/\\\\(\\{+)/g, ($0, $1) => {\n\n return internals.opens.slice(0, $1.length);\n })\n .replace(/\\\\(\\}+)/g, ($0, $1) => {\n\n return internals.closes.slice(0, $1.length);\n });\n};\n\n\ninternals.decode = function (string) {\n\n return string\n .replace(/\\u0000/g, '{')\n .replace(/\\u0001/g, '}');\n};\n\n\ninternals.split = function (string) {\n\n const parts = [];\n let current = '';\n\n for (let i = 0; i < string.length; ++i) {\n const char = string[i];\n\n if (char === '{') {\n let next = '';\n while (i + 1 < string.length &&\n string[i + 1] === '{') {\n\n next += '{';\n ++i;\n }\n\n parts.push(current);\n current = next;\n }\n else {\n current += char;\n }\n }\n\n parts.push(current);\n return parts;\n};\n\n\ninternals.wrap = function (value, ends) {\n\n if (!ends) {\n return value;\n }\n\n if (ends.length === 1) {\n return `${ends}${value}${ends}`;\n }\n\n return `${ends[0]}${value}${ends[1]}`;\n};\n\n\ninternals.stringify = function (value, original, state, prefs, local, options = {}) {\n\n const type = typeof value;\n const wrap = prefs && prefs.errors && prefs.errors.wrap || {};\n\n let skipWrap = false;\n if (Ref.isRef(value) &&\n value.render) {\n\n skipWrap = value.in;\n value = value.resolve(original, state, prefs, local, { in: value.in, ...options });\n }\n\n if (value === null) {\n return 'null';\n }\n\n if (type === 'string') {\n return internals.wrap(value, options.arrayItems && wrap.string);\n }\n\n if (type === 'number' ||\n type === 'function' ||\n type === 'symbol') {\n\n return value.toString();\n }\n\n if (type !== 'object') {\n return JSON.stringify(value);\n }\n\n if (value instanceof Date) {\n return internals.Template.date(value, prefs);\n }\n\n if (value instanceof Map) {\n const pairs = [];\n for (const [key, sym] of value.entries()) {\n pairs.push(`${key.toString()} -> ${sym.toString()}`);\n }\n\n value = pairs;\n }\n\n if (!Array.isArray(value)) {\n return value.toString();\n }\n\n const values = [];\n for (const item of value) {\n values.push(internals.stringify(item, original, state, prefs, local, { arrayItems: true, ...options }));\n }\n\n return internals.wrap(values.join(', '), !skipWrap && wrap.array);\n};\n\n\ninternals.constants = {\n\n true: true,\n false: false,\n null: null,\n\n second: 1000,\n minute: 60 * 1000,\n hour: 60 * 60 * 1000,\n day: 24 * 60 * 60 * 1000\n};\n\n\ninternals.functions = {\n\n if(condition, then, otherwise) {\n\n return condition ? then : otherwise;\n },\n\n length(item) {\n\n if (typeof item === 'string') {\n return item.length;\n }\n\n if (!item || typeof item !== 'object') {\n return null;\n }\n\n if (Array.isArray(item)) {\n return item.length;\n }\n\n return Object.keys(item).length;\n },\n\n msg(code) {\n\n const [value, state, prefs, local, options] = this;\n const messages = options.messages;\n if (!messages) {\n return '';\n }\n\n const template = Errors.template(value, messages[0], code, state, prefs) || Errors.template(value, messages[1], code, state, prefs);\n if (!template) {\n return '';\n }\n\n return template.render(value, state, prefs, local, options);\n },\n\n number(value) {\n\n if (typeof value === 'number') {\n return value;\n }\n\n if (typeof value === 'string') {\n return parseFloat(value);\n }\n\n if (typeof value === 'boolean') {\n return value ? 1 : 0;\n }\n\n if (value instanceof Date) {\n return value.getTime();\n }\n\n return null;\n }\n};\n","'use strict';\n\nconst { assert, clone } = require('@hapi/hoek');\n\nconst Template = require('./template');\n\n\nconst internals = {};\n\n\nexports.compile = function (messages, target) {\n\n // Single value string ('plain error message', 'template {error} message')\n\n if (typeof messages === 'string') {\n assert(!target, 'Cannot set single message string');\n return new Template(messages);\n }\n\n // Single value template\n\n if (Template.isTemplate(messages)) {\n assert(!target, 'Cannot set single message template');\n return messages;\n }\n\n // By error code { 'number.min': <string | template> }\n\n assert(typeof messages === 'object' && !Array.isArray(messages), 'Invalid message options');\n\n target = target ? clone(target) : {};\n\n for (let code in messages) {\n const message = messages[code];\n\n if (code === 'root' ||\n Template.isTemplate(message)) {\n\n target[code] = message;\n continue;\n }\n\n if (typeof message === 'string') {\n target[code] = new Template(message);\n continue;\n }\n\n // By language { english: { 'number.min': <string | template> } }\n\n assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);\n\n const language = code;\n target[language] = target[language] || {};\n\n for (code in message) {\n const localized = message[code];\n\n if (code === 'root' ||\n Template.isTemplate(localized)) {\n\n target[language][code] = localized;\n continue;\n }\n\n assert(typeof localized === 'string', 'Invalid message for', code, 'in', language);\n target[language][code] = new Template(localized);\n }\n }\n\n return target;\n};\n\n\nexports.decompile = function (messages) {\n\n // By error code { 'number.min': <string | template> }\n\n const target = {};\n for (let code in messages) {\n const message = messages[code];\n\n if (code === 'root') {\n target.root = message;\n continue;\n }\n\n if (Template.isTemplate(message)) {\n target[code] = message.describe({ compact: true });\n continue;\n }\n\n // By language { english: { 'number.min': <string | template> } }\n\n const language = code;\n target[language] = {};\n\n for (code in message) {\n const localized = message[code];\n\n if (code === 'root') {\n target[language].root = localized;\n continue;\n }\n\n target[language][code] = localized.describe({ compact: true });\n }\n }\n\n return target;\n};\n\n\nexports.merge = function (base, extended) {\n\n if (!base) {\n return exports.compile(extended);\n }\n\n if (!extended) {\n return base;\n }\n\n // Single value string\n\n if (typeof extended === 'string') {\n return new Template(extended);\n }\n\n // Single value template\n\n if (Template.isTemplate(extended)) {\n return extended;\n }\n\n // By error code { 'number.min': <string | template> }\n\n const target = clone(base);\n\n for (let code in extended) {\n const message = extended[code];\n\n if (code === 'root' ||\n Template.isTemplate(message)) {\n\n target[code] = message;\n continue;\n }\n\n if (typeof message === 'string') {\n target[code] = new Template(message);\n continue;\n }\n\n // By language { english: { 'number.min': <string | template> } }\n\n assert(typeof message === 'object' && !Array.isArray(message), 'Invalid message for', code);\n\n const language = code;\n target[language] = target[language] || {};\n\n for (code in message) {\n const localized = message[code];\n\n if (code === 'root' ||\n Template.isTemplate(localized)) {\n\n target[language][code] = localized;\n continue;\n }\n\n assert(typeof localized === 'string', 'Invalid message for', code, 'in', language);\n target[language][code] = new Template(localized);\n }\n }\n\n return target;\n};\n","'use strict';\n\nconst { assert: Assert, AssertError } = require('@hapi/hoek');\n\nconst Pkg = require('../package.json');\n\nlet Messages;\nlet Schemas;\n\n\nconst internals = {\n isoDate: /^(?:[-+]\\d{2})?(?:\\d{4}(?!\\d{2}\\b))(?:(-?)(?:(?:0[1-9]|1[0-2])(?:\\1(?:[12]\\d|0[1-9]|3[01]))?|W(?:[0-4]\\d|5[0-2])(?:-?[1-7])?|(?:00[1-9]|0[1-9]\\d|[12]\\d{2}|3(?:[0-5]\\d|6[1-6])))(?![T]$|[T][\\d]+Z$)(?:[T\\s](?:(?:(?:[01]\\d|2[0-3])(?:(:?)[0-5]\\d)?|24\\:?00)(?:[.,]\\d+(?!:))?)(?:\\2[0-5]\\d(?:[.,]\\d+)?)?(?:[Z]|(?:[+-])(?:[01]\\d|2[0-3])(?::?[0-5]\\d)?)?)?)?$/\n};\n\n\nexports.version = Pkg.version;\n\n\nexports.defaults = {\n abortEarly: true,\n allowUnknown: false,\n artifacts: false,\n cache: true,\n context: null,\n convert: true,\n dateFormat: 'iso',\n errors: {\n escapeHtml: false,\n label: 'path',\n language: null,\n render: true,\n stack: false,\n wrap: {\n label: '\"',\n array: '[]'\n }\n },\n externals: true,\n messages: {},\n nonEnumerables: false,\n noDefaults: false,\n presence: 'optional',\n skipFunctions: false,\n stripUnknown: false,\n warnings: false\n};\n\n\nexports.symbols = {\n any: Symbol.for('@hapi/joi/schema'), // Used to internally identify any-based types (shared with other joi versions)\n arraySingle: Symbol('arraySingle'),\n deepDefault: Symbol('deepDefault'),\n errors: Symbol('errors'),\n literal: Symbol('literal'),\n override: Symbol('override'),\n parent: Symbol('parent'),\n prefs: Symbol('prefs'),\n ref: Symbol('ref'),\n template: Symbol('template'),\n values: Symbol('values')\n};\n\n\nexports.assertOptions = function (options, keys, name = 'Options') {\n\n Assert(options && typeof options === 'object' && !Array.isArray(options), 'Options must be of type object');\n const unknownKeys = Object.keys(options).filter((k) => !keys.includes(k));\n Assert(unknownKeys.length === 0, `${name} contain unknown keys: ${unknownKeys}`);\n};\n\n\nexports.checkPreferences = function (prefs) {\n\n Schemas = Schemas || require('./schemas');\n\n const result = Schemas.preferences.validate(prefs);\n\n if (result.error) {\n throw new AssertError([result.error.details[0].message]);\n }\n};\n\n\nexports.compare = function (a, b, operator) {\n\n switch (operator) {\n case '=': return a === b;\n case '>': return a > b;\n case '<': return a < b;\n case '>=': return a >= b;\n case '<=': return a <= b;\n }\n};\n\n\nexports.default = function (value, defaultValue) {\n\n return value === undefined ? defaultValue : value;\n};\n\n\nexports.intersect = function (set, other) {\n\n /* $lab:coverage:off$ */\n if (typeof set.intersection === 'function') {\n return set.intersection(other);\n }\n\n const result = new Set();\n for (const item of set) {\n if (other.has(item)) {\n result.add(item);\n }\n }\n\n return result;\n /* $lab:coverage:on$ */\n};\n\n\nexports.isIsoDate = function (date) {\n\n return internals.isoDate.test(date);\n};\n\n\nexports.isNumber = function (value) {\n\n return typeof value === 'number' && !isNaN(value);\n};\n\n\nexports.isResolvable = function (obj) {\n\n if (!obj) {\n return false;\n }\n\n return obj[exports.symbols.ref] || obj[exports.symbols.template];\n};\n\n\nexports.isSchema = function (schema, options = {}) {\n\n const any = schema && schema[exports.symbols.any];\n if (!any) {\n return false;\n }\n\n Assert(options.legacy || any.version === exports.version, 'Cannot mix different versions of joi schemas');\n return true;\n};\n\n\nexports.isValues = function (obj) {\n\n return obj[exports.symbols.values];\n};\n\n\nexports.limit = function (value) {\n\n return Number.isSafeInteger(value) && value >= 0;\n};\n\n\nexports.preferences = function (target, source) {\n\n Messages = Messages || require('./messages');\n\n target = target || {};\n source = source || {};\n\n const merged = Object.assign({}, target, source);\n if (source.errors &&\n target.errors) {\n\n merged.errors = Object.assign({}, target.errors, source.errors);\n merged.errors.wrap = Object.assign({}, target.errors.wrap, source.errors.wrap);\n }\n\n if (source.messages) {\n merged.messages = Messages.compile(source.messages, target.messages);\n }\n\n delete merged[exports.symbols.prefs];\n return merged;\n};\n\n\nexports.tryWithPath = function (fn, key, options = {}) {\n\n try {\n return fn();\n }\n catch (err) {\n if (err.path !== undefined) {\n err.path = key + '.' + err.path;\n }\n else {\n err.path = key;\n }\n\n if (options.append) {\n err.message = `${err.message} (${err.path})`;\n }\n\n throw err;\n }\n};\n\n\nexports.validateArg = function (value, label, { assert, message }) {\n\n if (exports.isSchema(assert)) {\n const result = assert.validate(value);\n if (!result.error) {\n return;\n }\n\n return result.error.message;\n }\n else if (!assert(value)) {\n return label ? `${label} ${message}` : message;\n }\n};\n\n\nexports.verifyFlat = function (args, method) {\n\n for (const arg of args) {\n Assert(!Array.isArray(arg), 'Method no longer accepts array arguments:', method);\n }\n};\n","'use strict';\n\nconst { assert, clone } = require('@hapi/hoek');\n\nconst Common = require('./common');\n\n\nconst internals = {\n max: 1000,\n supported: new Set(['undefined', 'boolean', 'number', 'string'])\n};\n\n\nexports.provider = {\n\n provision(options) {\n\n return new internals.Cache(options);\n }\n};\n\n\n// Least Recently Used (LRU) Cache\n\ninternals.Cache = class {\n\n constructor(options = {}) {\n\n Common.assertOptions(options, ['max']);\n assert(options.max === undefined || options.max && options.max > 0 && isFinite(options.max), 'Invalid max cache size');\n\n this._max = options.max || internals.max;\n\n this._map = new Map(); // Map of nodes by key\n this._list = new internals.List(); // List of nodes (most recently used in head)\n }\n\n get length() {\n\n return this._map.size;\n }\n\n set(key, value) {\n\n if (key !== null &&\n !internals.supported.has(typeof key)) {\n\n return;\n }\n\n let node = this._map.get(key);\n if (node) {\n node.value = value;\n this._list.first(node);\n return;\n }\n\n node = this._list.unshift({ key, value });\n this._map.set(key, node);\n this._compact();\n }\n\n get(key) {\n\n const node = this._map.get(key);\n if (node) {\n this._list.first(node);\n return clone(node.value);\n }\n }\n\n _compact() {\n\n if (this._map.size > this._max) {\n const node = this._list.pop();\n this._map.delete(node.key);\n }\n }\n};\n\n\ninternals.List = class {\n\n constructor() {\n\n this.tail = null;\n this.head = null;\n }\n\n unshift(node) {\n\n node.next = null;\n node.prev = this.head;\n\n if (this.head) {\n this.head.next = node;\n }\n\n this.head = node;\n\n if (!this.tail) {\n this.tail = node;\n }\n\n return node;\n }\n\n first(node) {\n\n if (node === this.head) {\n return;\n }\n\n this._remove(node);\n this.unshift(node);\n }\n\n pop() {\n\n return this._remove(this.tail);\n }\n\n _remove(node) {\n\n const { next, prev } = node;\n\n next.prev = prev;\n\n if (prev) {\n prev.next = next;\n }\n\n if (node === this.tail) {\n this.tail = next;\n }\n\n node.prev = null;\n node.next = null;\n\n return node;\n }\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Common = require('./common');\nconst Ref = require('./ref');\n\n\nconst internals = {};\n\n\nexports.schema = function (Joi, config, options = {}) {\n\n Common.assertOptions(options, ['appendPath', 'override']);\n\n try {\n return internals.schema(Joi, config, options);\n }\n catch (err) {\n if (options.appendPath &&\n err.path !== undefined) {\n\n err.message = `${err.message} (${err.path})`;\n }\n\n throw err;\n }\n};\n\n\ninternals.schema = function (Joi, config, options) {\n\n assert(config !== undefined, 'Invalid undefined schema');\n\n if (Array.isArray(config)) {\n assert(config.length, 'Invalid empty array schema');\n\n if (config.length === 1) {\n config = config[0];\n }\n }\n\n const valid = (base, ...values) => {\n\n if (options.override !== false) {\n return base.valid(Joi.override, ...values);\n }\n\n return base.valid(...values);\n };\n\n if (internals.simple(config)) {\n return valid(Joi, config);\n }\n\n if (typeof config === 'function') {\n return Joi.custom(config);\n }\n\n assert(typeof config === 'object', 'Invalid schema content:', typeof config);\n\n if (Common.isResolvable(config)) {\n return valid(Joi, config);\n }\n\n if (Common.isSchema(config)) {\n return config;\n }\n\n if (Array.isArray(config)) {\n for (const item of config) {\n if (!internals.simple(item)) {\n return Joi.alternatives().try(...config);\n }\n }\n\n return valid(Joi, ...config);\n }\n\n if (config instanceof RegExp) {\n return Joi.string().regex(config);\n }\n\n if (config instanceof Date) {\n return valid(Joi.date(), config);\n }\n\n assert(Object.getPrototypeOf(config) === Object.getPrototypeOf({}), 'Schema can only contain plain objects');\n\n return Joi.object().keys(config);\n};\n\n\nexports.ref = function (id, options) {\n\n return Ref.isRef(id) ? id : Ref.create(id, options);\n};\n\n\nexports.compile = function (root, schema, options = {}) {\n\n Common.assertOptions(options, ['legacy']);\n\n // Compiled by any supported version\n\n const any = schema && schema[Common.symbols.any];\n if (any) {\n assert(options.legacy || any.version === Common.version, 'Cannot mix different versions of joi schemas:', any.version, Common.version);\n return schema;\n }\n\n // Uncompiled root\n\n if (typeof schema !== 'object' ||\n !options.legacy) {\n\n return exports.schema(root, schema, { appendPath: true }); // Will error if schema contains other versions\n }\n\n // Scan schema for compiled parts\n\n const compiler = internals.walk(schema);\n if (!compiler) {\n return exports.schema(root, schema, { appendPath: true });\n }\n\n return compiler.compile(compiler.root, schema);\n};\n\n\ninternals.walk = function (schema) {\n\n if (typeof schema !== 'object') {\n return null;\n }\n\n if (Array.isArray(schema)) {\n for (const item of schema) {\n const compiler = internals.walk(item);\n if (compiler) {\n return compiler;\n }\n }\n\n return null;\n }\n\n const any = schema[Common.symbols.any];\n if (any) {\n return { root: schema[any.root], compile: any.compile };\n }\n\n assert(Object.getPrototypeOf(schema) === Object.getPrototypeOf({}), 'Schema can only contain plain objects');\n\n for (const key in schema) {\n const compiler = internals.walk(schema[key]);\n if (compiler) {\n return compiler;\n }\n }\n\n return null;\n};\n\n\ninternals.simple = function (value) {\n\n return value === null || ['boolean', 'string', 'number'].includes(typeof value);\n};\n\n\nexports.when = function (schema, condition, options) {\n\n if (options === undefined) {\n assert(condition && typeof condition === 'object', 'Missing options');\n\n options = condition;\n condition = Ref.create('.');\n }\n\n if (Array.isArray(options)) {\n options = { switch: options };\n }\n\n Common.assertOptions(options, ['is', 'not', 'then', 'otherwise', 'switch', 'break']);\n\n // Schema condition\n\n if (Common.isSchema(condition)) {\n assert(options.is === undefined, '\"is\" can not be used with a schema condition');\n assert(options.not === undefined, '\"not\" can not be used with a schema condition');\n assert(options.switch === undefined, '\"switch\" can not be used with a schema condition');\n\n return internals.condition(schema, { is: condition, then: options.then, otherwise: options.otherwise, break: options.break });\n }\n\n // Single condition\n\n assert(Ref.isRef(condition) || typeof condition === 'string', 'Invalid condition:', condition);\n assert(options.not === undefined || options.is === undefined, 'Cannot combine \"is\" with \"not\"');\n\n if (options.switch === undefined) {\n let rule = options;\n if (options.not !== undefined) {\n rule = { is: options.not, then: options.otherwise, otherwise: options.then, break: options.break };\n }\n\n let is = rule.is !== undefined ? schema.$_compile(rule.is) : schema.$_root.invalid(null, false, 0, '').required();\n assert(rule.then !== undefined || rule.otherwise !== undefined, 'options must have at least one of \"then\", \"otherwise\", or \"switch\"');\n assert(rule.break === undefined || rule.then === undefined || rule.otherwise === undefined, 'Cannot specify then, otherwise, and break all together');\n\n if (options.is !== undefined &&\n !Ref.isRef(options.is) &&\n !Common.isSchema(options.is)) {\n\n is = is.required(); // Only apply required if this wasn't already a schema or a ref\n }\n\n return internals.condition(schema, { ref: exports.ref(condition), is, then: rule.then, otherwise: rule.otherwise, break: rule.break });\n }\n\n // Switch statement\n\n assert(Array.isArray(options.switch), '\"switch\" must be an array');\n assert(options.is === undefined, 'Cannot combine \"switch\" with \"is\"');\n assert(options.not === undefined, 'Cannot combine \"switch\" with \"not\"');\n assert(options.then === undefined, 'Cannot combine \"switch\" with \"then\"');\n\n const rule = {\n ref: exports.ref(condition),\n switch: [],\n break: options.break\n };\n\n for (let i = 0; i < options.switch.length; ++i) {\n const test = options.switch[i];\n const last = i === options.switch.length - 1;\n\n Common.assertOptions(test, last ? ['is', 'then', 'otherwise'] : ['is', 'then']);\n\n assert(test.is !== undefined, 'Switch statement missing \"is\"');\n assert(test.then !== undefined, 'Switch statement missing \"then\"');\n\n const item = {\n is: schema.$_compile(test.is),\n then: schema.$_compile(test.then)\n };\n\n if (!Ref.isRef(test.is) &&\n !Common.isSchema(test.is)) {\n\n item.is = item.is.required(); // Only apply required if this wasn't already a schema or a ref\n }\n\n if (last) {\n assert(options.otherwise === undefined || test.otherwise === undefined, 'Cannot specify \"otherwise\" inside and outside a \"switch\"');\n const otherwise = options.otherwise !== undefined ? options.otherwise : test.otherwise;\n if (otherwise !== undefined) {\n assert(rule.break === undefined, 'Cannot specify both otherwise and break');\n item.otherwise = schema.$_compile(otherwise);\n }\n }\n\n rule.switch.push(item);\n }\n\n return rule;\n};\n\n\ninternals.condition = function (schema, condition) {\n\n for (const key of ['then', 'otherwise']) {\n if (condition[key] === undefined) {\n delete condition[key];\n }\n else {\n condition[key] = schema.$_compile(condition[key]);\n }\n }\n\n return condition;\n};\n","'use strict';\n\nconst { assert, clone } = require('@hapi/hoek');\n\nconst Common = require('./common');\nconst Messages = require('./messages');\n\n\nconst internals = {};\n\n\nexports.type = function (from, options) {\n\n const base = Object.getPrototypeOf(from);\n const prototype = clone(base);\n const schema = from._assign(Object.create(prototype));\n const def = Object.assign({}, options); // Shallow cloned\n delete def.base;\n\n prototype._definition = def;\n\n const parent = base._definition || {};\n def.messages = Messages.merge(parent.messages, def.messages);\n def.properties = Object.assign({}, parent.properties, def.properties);\n\n // Type\n\n schema.type = def.type;\n\n // Flags\n\n def.flags = Object.assign({}, parent.flags, def.flags);\n\n // Terms\n\n const terms = Object.assign({}, parent.terms);\n if (def.terms) {\n for (const name in def.terms) { // Only apply own terms\n const term = def.terms[name];\n assert(schema.$_terms[name] === undefined, 'Invalid term override for', def.type, name);\n schema.$_terms[name] = term.init;\n terms[name] = term;\n }\n }\n\n def.terms = terms;\n\n // Constructor arguments\n\n if (!def.args) {\n def.args = parent.args;\n }\n\n // Prepare\n\n def.prepare = internals.prepare(def.prepare, parent.prepare);\n\n // Coerce\n\n if (def.coerce) {\n if (typeof def.coerce === 'function') {\n def.coerce = { method: def.coerce };\n }\n\n if (def.coerce.from &&\n !Array.isArray(def.coerce.from)) {\n\n def.coerce = { method: def.coerce.method, from: [].concat(def.coerce.from) };\n }\n }\n\n def.coerce = internals.coerce(def.coerce, parent.coerce);\n\n // Validate\n\n def.validate = internals.validate(def.validate, parent.validate);\n\n // Rules\n\n const rules = Object.assign({}, parent.rules);\n if (def.rules) {\n for (const name in def.rules) {\n const rule = def.rules[name];\n assert(typeof rule === 'object', 'Invalid rule definition for', def.type, name);\n\n let method = rule.method;\n if (method === undefined) {\n method = function () {\n\n return this.$_addRule(name);\n };\n }\n\n if (method) {\n assert(!prototype[name], 'Rule conflict in', def.type, name);\n prototype[name] = method;\n }\n\n assert(!rules[name], 'Rule conflict in', def.type, name);\n rules[name] = rule;\n\n if (rule.alias) {\n const aliases = [].concat(rule.alias);\n for (const alias of aliases) {\n prototype[alias] = rule.method;\n }\n }\n\n if (rule.args) {\n rule.argsByName = new Map();\n rule.args = rule.args.map((arg) => {\n\n if (typeof arg === 'string') {\n arg = { name: arg };\n }\n\n assert(!rule.argsByName.has(arg.name), 'Duplicated argument name', arg.name);\n\n if (Common.isSchema(arg.assert)) {\n arg.assert = arg.assert.strict().label(arg.name);\n }\n\n rule.argsByName.set(arg.name, arg);\n return arg;\n });\n }\n }\n }\n\n def.rules = rules;\n\n // JSON Schema\n\n if (!def.jsonSchema) {\n def.jsonSchema = parent.jsonSchema;\n }\n\n // Modifiers\n\n const modifiers = Object.assign({}, parent.modifiers);\n if (def.modifiers) {\n for (const name in def.modifiers) {\n assert(!prototype[name], 'Rule conflict in', def.type, name);\n\n const modifier = def.modifiers[name];\n assert(typeof modifier === 'function', 'Invalid modifier definition for', def.type, name);\n\n const method = function (arg) {\n\n return this.rule({ [name]: arg });\n };\n\n prototype[name] = method;\n modifiers[name] = modifier;\n }\n }\n\n def.modifiers = modifiers;\n\n // Overrides\n\n if (def.overrides) {\n prototype._super = base;\n schema.$_super = {}; // Backwards compatibility\n for (const override in def.overrides) {\n assert(base[override], 'Cannot override missing', override);\n def.overrides[override][Common.symbols.parent] = base[override];\n schema.$_super[override] = base[override].bind(schema); // Backwards compatibility\n }\n\n Object.assign(prototype, def.overrides);\n }\n\n // Casts\n\n def.cast = Object.assign({}, parent.cast, def.cast);\n\n // Manifest\n\n const manifest = Object.assign({}, parent.manifest, def.manifest);\n manifest.build = internals.build(def.manifest && def.manifest.build, parent.manifest && parent.manifest.build);\n def.manifest = manifest;\n\n // Rebuild\n\n def.rebuild = internals.rebuild(def.rebuild, parent.rebuild);\n\n return schema;\n};\n\n\n// Helpers\n\ninternals.build = function (child, parent) {\n\n if (!child ||\n !parent) {\n\n return child || parent;\n }\n\n return function (obj, desc) {\n\n return parent(child(obj, desc), desc);\n };\n};\n\n\ninternals.coerce = function (child, parent) {\n\n if (!child ||\n !parent) {\n\n return child || parent;\n }\n\n return {\n from: child.from && parent.from ? [...new Set([...child.from, ...parent.from])] : null,\n method(value, helpers) {\n\n let coerced;\n if (!parent.from ||\n parent.from.includes(typeof value)) {\n\n coerced = parent.method(value, helpers);\n if (coerced) {\n if (coerced.errors ||\n coerced.value === undefined) {\n\n return coerced;\n }\n\n value = coerced.value;\n }\n }\n\n if (!child.from ||\n child.from.includes(typeof value)) {\n\n const own = child.method(value, helpers);\n if (own) {\n return own;\n }\n }\n\n return coerced;\n }\n };\n};\n\n\ninternals.prepare = function (child, parent) {\n\n if (!child ||\n !parent) {\n\n return child || parent;\n }\n\n return function (value, helpers) {\n\n const prepared = child(value, helpers);\n if (prepared) {\n if (prepared.errors ||\n prepared.value === undefined) {\n\n return prepared;\n }\n\n value = prepared.value;\n }\n\n return parent(value, helpers) || prepared;\n };\n};\n\n\ninternals.rebuild = function (child, parent) {\n\n if (!child ||\n !parent) {\n\n return child || parent;\n }\n\n return function (schema) {\n\n parent(schema);\n child(schema);\n };\n};\n\n\ninternals.validate = function (child, parent) {\n\n if (!child ||\n !parent) {\n\n return child || parent;\n }\n\n return function (value, helpers) {\n\n const result = parent(value, helpers);\n if (result) {\n if (result.errors &&\n (!Array.isArray(result.errors) || result.errors.length)) {\n\n return result;\n }\n\n value = result.value;\n }\n\n return child(value, helpers) || result;\n };\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Common = require('./common');\nconst Ref = require('./ref');\n\n\nconst internals = {};\n\n\n\nexports.Ids = internals.Ids = class {\n\n constructor() {\n\n this._byId = new Map();\n this._byKey = new Map();\n this._schemaChain = false;\n }\n\n clone() {\n\n const clone = new internals.Ids();\n clone._byId = new Map(this._byId);\n clone._byKey = new Map(this._byKey);\n clone._schemaChain = this._schemaChain;\n return clone;\n }\n\n concat(source) {\n\n if (source._schemaChain) {\n this._schemaChain = true;\n }\n\n for (const [id, value] of source._byId.entries()) {\n assert(!this._byKey.has(id), 'Schema id conflicts with existing key:', id);\n this._byId.set(id, value);\n }\n\n for (const [key, value] of source._byKey.entries()) {\n assert(!this._byId.has(key), 'Schema key conflicts with existing id:', key);\n this._byKey.set(key, value);\n }\n }\n\n fork(path, adjuster, root) {\n\n const chain = this._collect(path);\n chain.push({ schema: root });\n const tail = chain.shift();\n let adjusted = { id: tail.id, schema: adjuster(tail.schema) };\n\n assert(Common.isSchema(adjusted.schema), 'adjuster function failed to return a joi schema type');\n\n for (const node of chain) {\n adjusted = { id: node.id, schema: internals.fork(node.schema, adjusted.id, adjusted.schema) };\n }\n\n return adjusted.schema;\n }\n\n labels(path, behind = []) {\n\n const current = path[0];\n const node = this._get(current);\n if (!node) {\n return [...behind, ...path].join('.');\n }\n\n const forward = path.slice(1);\n behind = [...behind, node.schema._flags.label || current];\n if (!forward.length) {\n return behind.join('.');\n }\n\n return node.schema._ids.labels(forward, behind);\n }\n\n reach(path, behind = []) {\n\n const current = path[0];\n const node = this._get(current);\n assert(node, 'Schema does not contain path', [...behind, ...path].join('.'));\n\n const forward = path.slice(1);\n if (!forward.length) {\n return node.schema;\n }\n\n return node.schema._ids.reach(forward, [...behind, current]);\n }\n\n register(schema, { key } = {}) {\n\n if (!schema ||\n !Common.isSchema(schema)) {\n\n return;\n }\n\n if (schema.$_property('schemaChain') ||\n schema._ids._schemaChain) {\n\n this._schemaChain = true;\n }\n\n const id = schema._flags.id;\n if (id) {\n const existing = this._byId.get(id);\n assert(!existing || existing.schema === schema, 'Cannot add different schemas with the same id:', id);\n assert(!this._byKey.has(id), 'Schema id conflicts with existing key:', id);\n\n this._byId.set(id, { schema, id });\n }\n\n if (key) {\n assert(!this._byKey.has(key), 'Schema already contains key:', key);\n assert(!this._byId.has(key), 'Schema key conflicts with existing id:', key);\n\n this._byKey.set(key, { schema, id: key });\n }\n }\n\n reset() {\n\n this._byId = new Map();\n this._byKey = new Map();\n this._schemaChain = false;\n }\n\n _collect(path, behind = [], nodes = []) {\n\n const current = path[0];\n const node = this._get(current);\n assert(node, 'Schema does not contain path', [...behind, ...path].join('.'));\n\n nodes = [node, ...nodes];\n\n const forward = path.slice(1);\n if (!forward.length) {\n return nodes;\n }\n\n return node.schema._ids._collect(forward, [...behind, current], nodes);\n }\n\n _get(id) {\n\n return this._byId.get(id) || this._byKey.get(id);\n }\n};\n\n\ninternals.fork = function (schema, id, replacement) {\n\n const each = (item, { key }) => {\n\n if (id === (item._flags.id || key)) {\n return replacement;\n }\n };\n\n const obj = exports.schema(schema, { each, ref: false });\n return obj ? obj.$_mutateRebuild() : schema;\n};\n\n\nexports.schema = function (schema, options) {\n\n let obj;\n\n for (const name in schema._flags) {\n if (name[0] === '_') {\n continue;\n }\n\n const result = internals.scan(schema._flags[name], { source: 'flags', name }, options);\n if (result !== undefined) {\n obj = obj || schema.clone();\n obj._flags[name] = result;\n }\n }\n\n for (let i = 0; i < schema._rules.length; ++i) {\n const rule = schema._rules[i];\n const result = internals.scan(rule.args, { source: 'rules', name: rule.name }, options);\n if (result !== undefined) {\n obj = obj || schema.clone();\n const clone = Object.assign({}, rule);\n clone.args = result;\n obj._rules[i] = clone;\n\n const existingUnique = obj._singleRules.get(rule.name);\n if (existingUnique === rule) {\n obj._singleRules.set(rule.name, clone);\n }\n }\n }\n\n for (const name in schema.$_terms) {\n if (name[0] === '_') {\n continue;\n }\n\n const result = internals.scan(schema.$_terms[name], { source: 'terms', name }, options);\n if (result !== undefined) {\n obj = obj || schema.clone();\n obj.$_terms[name] = result;\n }\n }\n\n return obj;\n};\n\n\ninternals.scan = function (item, source, options, _path, _key) {\n\n const path = _path || [];\n\n if (item === null ||\n typeof item !== 'object') {\n\n return;\n }\n\n let clone;\n\n if (Array.isArray(item)) {\n for (let i = 0; i < item.length; ++i) {\n const key = source.source === 'terms' && source.name === 'keys' && item[i].key;\n const result = internals.scan(item[i], source, options, [i, ...path], key);\n if (result !== undefined) {\n clone = clone || item.slice();\n clone[i] = result;\n }\n }\n\n return clone;\n }\n\n if (options.schema !== false && Common.isSchema(item) ||\n options.ref !== false && Ref.isRef(item)) {\n\n const result = options.each(item, { ...source, path, key: _key });\n if (result === item) {\n return;\n }\n\n return result;\n }\n\n for (const key in item) {\n if (key[0] === '_') {\n continue;\n }\n\n const result = internals.scan(item[key], source, options, [key, ...path], _key);\n if (result !== undefined) {\n clone = clone || Object.assign({}, item);\n clone[key] = result;\n }\n }\n\n return clone;\n};\n","'use strict';\n\nconst { clone, reach } = require('@hapi/hoek');\n\nconst Common = require('./common');\n\n\nconst internals = {\n value: Symbol('value')\n};\n\n\nmodule.exports = internals.State = class {\n\n constructor(path, ancestors, state) {\n\n this.path = path;\n this.ancestors = ancestors; // [parent, ..., root]\n\n this.mainstay = state.mainstay;\n this.schemas = state.schemas; // [current, ..., root]\n this.debug = null;\n }\n\n localize(path, ancestors = null, schema = null) {\n\n const state = new internals.State(path, ancestors, this);\n\n if (schema &&\n state.schemas) {\n\n state.schemas = [internals.schemas(schema), ...state.schemas];\n }\n\n return state;\n }\n\n nest(schema, debug) {\n\n const state = new internals.State(this.path, this.ancestors, this);\n state.schemas = state.schemas && [internals.schemas(schema), ...state.schemas];\n state.debug = debug;\n return state;\n }\n\n shadow(value, reason) {\n\n this.mainstay.shadow = this.mainstay.shadow || new internals.Shadow();\n this.mainstay.shadow.set(this.path, value, reason);\n }\n\n snapshot() {\n\n if (this.mainstay.shadow) {\n this._snapshot = clone(this.mainstay.shadow.node(this.path));\n }\n\n this.mainstay.snapshot();\n }\n\n restore() {\n\n if (this.mainstay.shadow) {\n this.mainstay.shadow.override(this.path, this._snapshot);\n this._snapshot = undefined;\n }\n\n this.mainstay.restore();\n }\n\n commit() {\n\n if (this.mainstay.shadow) {\n this.mainstay.shadow.override(this.path, this._snapshot);\n this._snapshot = undefined;\n }\n\n this.mainstay.commit();\n }\n};\n\n\ninternals.schemas = function (schema) {\n\n if (Common.isSchema(schema)) {\n return { schema };\n }\n\n return schema;\n};\n\n\ninternals.Shadow = class {\n\n constructor() {\n\n this._values = null;\n }\n\n set(path, value, reason) {\n\n if (!path.length) { // No need to store root value\n return;\n }\n\n if (reason === 'strip' &&\n typeof path[path.length - 1] === 'number') { // Cannot store stripped array values (due to shift)\n\n return;\n }\n\n this._values = this._values || new Map();\n\n let node = this._values;\n for (let i = 0; i < path.length; ++i) {\n const segment = path[i];\n let next = node.get(segment);\n if (!next) {\n next = new Map();\n node.set(segment, next);\n }\n\n node = next;\n }\n\n node[internals.value] = value;\n }\n\n get(path) {\n\n const node = this.node(path);\n if (node) {\n return node[internals.value];\n }\n }\n\n node(path) {\n\n if (!this._values) {\n return;\n }\n\n return reach(this._values, path, { iterables: true });\n }\n\n override(path, node) {\n\n if (!this._values) {\n return;\n }\n\n const parents = path.slice(0, -1);\n const own = path[path.length - 1];\n const parent = reach(this._values, parents, { iterables: true });\n\n if (node) {\n parent.set(own, node);\n return;\n }\n\n if (parent) {\n parent.delete(own);\n }\n }\n};\n","'use strict';\n\nconst { assert, clone, ignore, reach } = require('@hapi/hoek');\n\nconst Common = require('./common');\nconst Errors = require('./errors');\nconst State = require('./state');\n\n\nconst internals = {\n result: Symbol('result')\n};\n\n\nexports.entry = function (value, schema, prefs) {\n\n let settings = Common.defaults;\n if (prefs) {\n assert(prefs.warnings === undefined, 'Cannot override warnings preference in synchronous validation');\n assert(prefs.artifacts === undefined, 'Cannot override artifacts preference in synchronous validation');\n settings = Common.preferences(Common.defaults, prefs);\n }\n\n const result = internals.entry(value, schema, settings);\n assert(!result.mainstay.externals.length, 'Schema with external rules must use validateAsync()');\n const outcome = { value: result.value };\n\n if (result.error) {\n outcome.error = result.error;\n }\n\n if (result.mainstay.warnings.length) {\n outcome.warning = Errors.details(result.mainstay.warnings);\n }\n\n if (result.mainstay.debug) {\n outcome.debug = result.mainstay.debug;\n }\n\n if (result.mainstay.artifacts) {\n outcome.artifacts = result.mainstay.artifacts;\n }\n\n return outcome;\n};\n\n\nexports.entryAsync = async function (value, schema, prefs) {\n\n let settings = Common.defaults;\n if (prefs) {\n settings = Common.preferences(Common.defaults, prefs);\n }\n\n const result = internals.entry(value, schema, settings);\n const mainstay = result.mainstay;\n if (result.error) {\n if (mainstay.debug) {\n result.error.debug = mainstay.debug;\n }\n\n throw result.error;\n }\n\n if (mainstay.externals.length) {\n let root = result.value;\n const errors = [];\n for (const external of mainstay.externals) {\n const path = external.state.path;\n const linked = external.schema.type === 'link' ? mainstay.links.get(external.schema) : null;\n let node = root;\n let key;\n let parent;\n\n const ancestors = path.length ? [root] : [];\n const original = path.length ? reach(value, path) : value;\n\n if (path.length) {\n key = path[path.length - 1];\n\n let current = root;\n for (const segment of path.slice(0, -1)) {\n current = current[segment];\n ancestors.unshift(current);\n }\n\n parent = ancestors[0];\n node = parent[key];\n }\n\n try {\n const createError = (code, local) => (linked || external.schema).$_createError(code, node, local, external.state, settings);\n const output = await external.method(node, {\n schema: external.schema,\n linked,\n state: external.state,\n prefs,\n original,\n error: createError,\n errorsArray: internals.errorsArray,\n warn: (code, local) => mainstay.warnings.push((linked || external.schema).$_createError(code, node, local, external.state, settings)),\n message: (messages, local) => (linked || external.schema).$_createError('external', node, local, external.state, settings, { messages })\n });\n\n if (output === undefined ||\n output === node) {\n\n continue;\n }\n\n if (output instanceof Errors.Report) {\n mainstay.tracer.log(external.schema, external.state, 'rule', 'external', 'error');\n errors.push(output);\n\n if (settings.abortEarly) {\n break;\n }\n\n continue;\n }\n\n if (Array.isArray(output) &&\n output[Common.symbols.errors]) {\n mainstay.tracer.log(external.schema, external.state, 'rule', 'external', 'error');\n errors.push(...output);\n\n if (settings.abortEarly) {\n break;\n }\n\n continue;\n }\n\n if (parent) {\n mainstay.tracer.value(external.state, 'rule', node, output, 'external');\n parent[key] = output;\n }\n else {\n mainstay.tracer.value(external.state, 'rule', root, output, 'external');\n root = output;\n }\n }\n catch (err) {\n if (settings.errors.label) {\n err.message += ` (${(external.label)})`; // Change message to include path\n }\n\n throw err;\n }\n }\n\n result.value = root;\n\n if (errors.length) {\n result.error = Errors.process(errors, value, settings);\n\n if (mainstay.debug) {\n result.error.debug = mainstay.debug;\n }\n\n throw result.error;\n }\n }\n\n if (!settings.warnings &&\n !settings.debug &&\n !settings.artifacts) {\n\n return result.value;\n }\n\n const outcome = { value: result.value };\n if (mainstay.warnings.length) {\n outcome.warning = Errors.details(mainstay.warnings);\n }\n\n if (mainstay.debug) {\n outcome.debug = mainstay.debug;\n }\n\n if (mainstay.artifacts) {\n outcome.artifacts = mainstay.artifacts;\n }\n\n return outcome;\n};\n\n\nexports.standard = function (value, schema, options) {\n\n const prefs = options?.libraryOptions;\n\n if (schema.isAsync()) {\n return exports.entryAsync(value, schema, prefs);\n }\n\n return exports.entry(value, schema, prefs);\n};\n\n\ninternals.Mainstay = class {\n\n constructor(tracer, debug, links) {\n\n this.externals = [];\n this.warnings = [];\n this.tracer = tracer;\n this.debug = debug;\n this.links = links;\n this.shadow = null;\n this.artifacts = null;\n\n this._snapshots = [];\n }\n\n snapshot() {\n\n this._snapshots.push({\n externals: this.externals.slice(),\n warnings: this.warnings.slice()\n });\n }\n\n restore() {\n\n const snapshot = this._snapshots.pop();\n this.externals = snapshot.externals;\n this.warnings = snapshot.warnings;\n }\n\n commit() {\n\n this._snapshots.pop();\n }\n};\n\n\ninternals.entry = function (value, schema, prefs) {\n\n // Prepare state\n\n const { tracer, cleanup } = internals.tracer(schema, prefs);\n const debug = prefs.debug ? [] : null;\n const links = schema._ids._schemaChain ? new Map() : null;\n const mainstay = new internals.Mainstay(tracer, debug, links);\n const schemas = schema._ids._schemaChain ? [{ schema }] : null;\n const state = new State([], [], { mainstay, schemas });\n\n // Validate value\n\n const result = exports.validate(value, schema, state, prefs);\n\n // Process value and errors\n\n if (cleanup) {\n schema.$_root.untrace();\n }\n\n const error = Errors.process(result.errors, value, prefs);\n return { value: result.value, error, mainstay };\n};\n\n\ninternals.tracer = function (schema, prefs) {\n\n if (schema.$_root._tracer) {\n return { tracer: schema.$_root._tracer._register(schema) };\n }\n\n if (prefs.debug) {\n assert(schema.$_root.trace, 'Debug mode not supported');\n return { tracer: schema.$_root.trace()._register(schema), cleanup: true };\n }\n\n return { tracer: internals.ignore };\n};\n\n\nexports.validate = function (value, schema, state, prefs, overrides = {}) {\n\n if (schema.$_terms.whens) {\n schema = schema._generate(value, state, prefs).schema;\n }\n\n // Setup state and settings\n\n if (schema._preferences) {\n prefs = internals.prefs(schema, prefs);\n }\n\n // Cache\n\n if (schema._cache &&\n prefs.cache) {\n\n const result = schema._cache.get(value);\n state.mainstay.tracer.debug(state, 'validate', 'cached', !!result);\n if (result) {\n return result;\n }\n }\n\n // Helpers\n\n const createError = (code, local, localState) => schema.$_createError(code, value, local, localState || state, prefs);\n const helpers = {\n original: value,\n prefs,\n schema,\n state,\n error: createError,\n errorsArray: internals.errorsArray,\n warn: (code, local, localState) => state.mainstay.warnings.push(createError(code, local, localState)),\n message: (messages, local) => schema.$_createError('custom', value, local, state, prefs, { messages })\n };\n\n // Prepare\n\n state.mainstay.tracer.entry(schema, state);\n\n const def = schema._definition;\n if (def.prepare &&\n value !== undefined &&\n prefs.convert) {\n\n const prepared = def.prepare(value, helpers);\n if (prepared) {\n state.mainstay.tracer.value(state, 'prepare', value, prepared.value);\n if (prepared.errors) {\n return internals.finalize(prepared.value, [].concat(prepared.errors), helpers); // Prepare error always aborts early\n }\n\n value = prepared.value;\n }\n }\n\n // Type coercion\n\n if (def.coerce &&\n value !== undefined &&\n prefs.convert &&\n (!def.coerce.from || def.coerce.from.includes(typeof value))) {\n\n const coerced = def.coerce.method(value, helpers);\n if (coerced) {\n state.mainstay.tracer.value(state, 'coerced', value, coerced.value);\n if (coerced.errors) {\n return internals.finalize(coerced.value, [].concat(coerced.errors), helpers); // Coerce error always aborts early\n }\n\n value = coerced.value;\n }\n }\n\n // Empty value\n\n const empty = schema._flags.empty;\n if (empty &&\n empty.$_match(internals.trim(value, schema), state.nest(empty), Common.defaults)) {\n\n state.mainstay.tracer.value(state, 'empty', value, undefined);\n value = undefined;\n }\n\n // Presence requirements (required, optional, forbidden)\n\n const presence = overrides.presence || schema._flags.presence || (schema._flags._endedSwitch ? null : prefs.presence);\n if (value === undefined) {\n if (presence === 'forbidden') {\n return internals.finalize(value, null, helpers);\n }\n\n if (presence === 'required') {\n return internals.finalize(value, [schema.$_createError('any.required', value, null, state, prefs)], helpers);\n }\n\n if (presence === 'optional') {\n if (schema._flags.default !== Common.symbols.deepDefault) {\n return internals.finalize(value, null, helpers);\n }\n\n state.mainstay.tracer.value(state, 'default', value, {});\n value = {};\n }\n }\n else if (presence === 'forbidden') {\n return internals.finalize(value, [schema.$_createError('any.unknown', value, null, state, prefs)], helpers);\n }\n\n // Allowed values\n\n const errors = [];\n\n if (schema._valids) {\n const match = schema._valids.get(value, state, prefs, schema._flags.insensitive);\n if (match) {\n if (prefs.convert) {\n state.mainstay.tracer.value(state, 'valids', value, match.value);\n value = match.value;\n }\n\n state.mainstay.tracer.filter(schema, state, 'valid', match);\n return internals.finalize(value, null, helpers);\n }\n\n if (schema._flags.only) {\n const report = schema.$_createError('any.only', value, { valids: schema._valids.values({ display: true }) }, state, prefs);\n if (prefs.abortEarly) {\n return internals.finalize(value, [report], helpers);\n }\n\n errors.push(report);\n }\n }\n\n // Denied values\n\n if (schema._invalids) {\n const match = schema._invalids.get(value, state, prefs, schema._flags.insensitive);\n if (match) {\n state.mainstay.tracer.filter(schema, state, 'invalid', match);\n const report = schema.$_createError('any.invalid', value, { invalids: schema._invalids.values({ display: true }) }, state, prefs);\n if (prefs.abortEarly) {\n return internals.finalize(value, [report], helpers);\n }\n\n errors.push(report);\n }\n }\n\n // Base type\n\n if (def.validate) {\n const base = def.validate(value, helpers);\n if (base) {\n state.mainstay.tracer.value(state, 'base', value, base.value);\n value = base.value;\n\n if (base.errors) {\n if (!Array.isArray(base.errors)) {\n errors.push(base.errors);\n return internals.finalize(value, errors, helpers); // Base error always aborts early\n }\n\n if (base.errors.length) {\n errors.push(...base.errors);\n return internals.finalize(value, errors, helpers); // Base error always aborts early\n }\n }\n }\n }\n\n // Validate tests\n\n if (!schema._rules.length) {\n return internals.finalize(value, errors, helpers);\n }\n\n return internals.rules(value, errors, helpers);\n};\n\n\ninternals.rules = function (value, errors, helpers) {\n\n const { schema, state, prefs } = helpers;\n\n for (const rule of schema._rules) {\n const definition = schema._definition.rules[rule.method];\n\n // Skip rules that are also applied in coerce step\n\n if (definition.convert &&\n prefs.convert) {\n\n state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'full');\n continue;\n }\n\n // Resolve references\n\n let ret;\n let args = rule.args;\n if (rule._resolve.length) {\n args = Object.assign({}, args); // Shallow copy\n for (const key of rule._resolve) {\n const resolver = definition.argsByName.get(key);\n\n const resolved = args[key].resolve(value, state, prefs);\n const normalized = resolver.normalize ? resolver.normalize(resolved) : resolved;\n\n const invalid = Common.validateArg(normalized, null, resolver);\n if (invalid) {\n ret = schema.$_createError('any.ref', resolved, { arg: key, ref: args[key], reason: invalid }, state, prefs);\n break;\n }\n\n args[key] = normalized;\n }\n }\n\n // Test rule\n\n ret = ret || definition.validate(value, helpers, args, rule); // Use ret if already set to reference error\n\n const result = internals.rule(ret, rule);\n if (result.errors) {\n state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'error');\n\n if (rule.warn) {\n state.mainstay.warnings.push(...result.errors);\n continue;\n }\n\n if (prefs.abortEarly) {\n return internals.finalize(value, result.errors, helpers);\n }\n\n errors.push(...result.errors);\n }\n else {\n state.mainstay.tracer.log(schema, state, 'rule', rule.name, 'pass');\n state.mainstay.tracer.value(state, 'rule', value, result.value, rule.name);\n value = result.value;\n }\n }\n\n return internals.finalize(value, errors, helpers);\n};\n\n\ninternals.rule = function (ret, rule) {\n\n if (ret instanceof Errors.Report) {\n internals.error(ret, rule);\n return { errors: [ret], value: null };\n }\n\n if (Array.isArray(ret) &&\n ret[Common.symbols.errors]) {\n\n ret.forEach((report) => internals.error(report, rule));\n return { errors: ret, value: null };\n }\n\n return { errors: null, value: ret };\n};\n\n\ninternals.error = function (report, rule) {\n\n if (rule.message) {\n report._setTemplate(rule.message);\n }\n\n return report;\n};\n\n\ninternals.finalize = function (value, errors, helpers) {\n\n errors = errors || [];\n const { schema, state, prefs } = helpers;\n\n // Failover value\n\n if (errors.length) {\n const failover = internals.default('failover', undefined, errors, helpers);\n if (failover !== undefined) {\n state.mainstay.tracer.value(state, 'failover', value, failover);\n value = failover;\n errors = [];\n }\n }\n\n // Error override\n\n if (errors.length &&\n schema._flags.error) {\n\n if (typeof schema._flags.error === 'function') {\n errors = schema._flags.error(errors);\n if (!Array.isArray(errors)) {\n errors = [errors];\n }\n\n for (const error of errors) {\n assert(error instanceof Error || error instanceof Errors.Report, 'error() must return an Error object');\n }\n }\n else {\n errors = [schema._flags.error];\n }\n }\n\n // Default\n\n if (value === undefined) {\n const defaulted = internals.default('default', value, errors, helpers);\n state.mainstay.tracer.value(state, 'default', value, defaulted);\n value = defaulted;\n }\n\n // Cast\n\n if (schema._flags.cast &&\n value !== undefined) {\n\n const caster = schema._definition.cast[schema._flags.cast];\n if (caster.from(value)) {\n const casted = caster.to(value, helpers);\n state.mainstay.tracer.value(state, 'cast', value, casted, schema._flags.cast);\n value = casted;\n }\n }\n\n // Externals\n\n if (schema.$_terms.externals &&\n prefs.externals &&\n prefs._externals !== false) { // Disabled for matching\n\n for (const { method } of schema.$_terms.externals) {\n state.mainstay.externals.push({ method, schema, state, label: Errors.label(schema._flags, state, prefs) });\n }\n }\n\n // Result\n\n const result = { value, errors: errors.length ? errors : null };\n\n if (schema._flags.result) {\n result.value = schema._flags.result === 'strip' ? undefined : /* raw */ helpers.original;\n state.mainstay.tracer.value(state, schema._flags.result, value, result.value);\n state.shadow(value, schema._flags.result);\n }\n\n // Cache\n\n if (schema._cache &&\n prefs.cache !== false &&\n !schema._refs.length) {\n\n schema._cache.set(helpers.original, result);\n }\n\n // Artifacts\n\n if (value !== undefined &&\n !result.errors &&\n schema._flags.artifact !== undefined) {\n\n state.mainstay.artifacts = state.mainstay.artifacts || new Map();\n if (!state.mainstay.artifacts.has(schema._flags.artifact)) {\n state.mainstay.artifacts.set(schema._flags.artifact, []);\n }\n\n state.mainstay.artifacts.get(schema._flags.artifact).push(state.path);\n }\n\n return result;\n};\n\n\ninternals.prefs = function (schema, prefs) {\n\n const isDefaultOptions = prefs === Common.defaults;\n if (isDefaultOptions &&\n schema._preferences[Common.symbols.prefs]) {\n\n return schema._preferences[Common.symbols.prefs];\n }\n\n prefs = Common.preferences(prefs, schema._preferences);\n if (isDefaultOptions) {\n schema._preferences[Common.symbols.prefs] = prefs;\n }\n\n return prefs;\n};\n\n\ninternals.default = function (flag, value, errors, helpers) {\n\n const { schema, state, prefs } = helpers;\n const source = schema._flags[flag];\n if (prefs.noDefaults ||\n source === undefined) {\n\n return value;\n }\n\n state.mainstay.tracer.log(schema, state, 'rule', flag, 'full');\n\n if (!source) {\n return source;\n }\n\n if (typeof source === 'function') {\n const args = source.length ? [clone(state.ancestors[0]), helpers] : [];\n\n try {\n return source(...args);\n }\n catch (err) {\n errors.push(schema.$_createError(`any.${flag}`, null, { error: err }, state, prefs));\n return;\n }\n }\n\n if (typeof source !== 'object') {\n return source;\n }\n\n if (source[Common.symbols.literal]) {\n return source.literal;\n }\n\n if (Common.isResolvable(source)) {\n return source.resolve(value, state, prefs);\n }\n\n return clone(source);\n};\n\n\ninternals.trim = function (value, schema) {\n\n if (typeof value !== 'string') {\n return value;\n }\n\n const trim = schema.$_getRule('trim');\n if (!trim ||\n !trim.args.enabled) {\n\n return value;\n }\n\n return value.trim();\n};\n\n\ninternals.ignore = {\n active: false,\n debug: ignore,\n entry: ignore,\n filter: ignore,\n log: ignore,\n resolve: ignore,\n value: ignore\n};\n\n\ninternals.errorsArray = function () {\n\n const errors = [];\n errors[Common.symbols.errors] = true;\n return errors;\n};\n","'use strict';\n\nconst { assert, deepEqual } = require('@hapi/hoek');\n\nconst Common = require('./common');\n\n\nconst internals = {};\n\n\nmodule.exports = internals.Values = class {\n\n constructor(values, refs) {\n\n this._values = new Set(values);\n this._refs = new Set(refs);\n this._lowercase = internals.lowercases(values);\n\n this._override = false;\n }\n\n get length() {\n\n return this._values.size + this._refs.size;\n }\n\n add(value, refs) {\n\n // Reference\n\n if (Common.isResolvable(value)) {\n if (!this._refs.has(value)) {\n this._refs.add(value);\n\n if (refs) { // Skipped in a merge\n refs.register(value);\n }\n }\n\n return;\n }\n\n // Value\n\n if (!this.has(value, null, null, false)) {\n this._values.add(value);\n\n if (typeof value === 'string') {\n this._lowercase.set(value.toLowerCase(), value);\n }\n }\n }\n\n static merge(target, source, remove) {\n\n target = target || new internals.Values();\n\n if (source) {\n if (source._override) {\n return source.clone();\n }\n\n for (const item of [...source._values, ...source._refs]) {\n target.add(item);\n }\n }\n\n if (remove) {\n for (const item of [...remove._values, ...remove._refs]) {\n target.remove(item);\n }\n }\n\n return target.length ? target : null;\n }\n\n remove(value) {\n\n // Reference\n\n if (Common.isResolvable(value)) {\n this._refs.delete(value);\n return;\n }\n\n // Value\n\n this._values.delete(value);\n\n if (typeof value === 'string') {\n this._lowercase.delete(value.toLowerCase());\n }\n }\n\n has(value, state, prefs, insensitive) {\n\n return !!this.get(value, state, prefs, insensitive);\n }\n\n get(value, state, prefs, insensitive) {\n\n if (!this.length) {\n return false;\n }\n\n // Simple match\n\n if (this._values.has(value)) {\n return { value };\n }\n\n // Case insensitive string match\n\n if (typeof value === 'string' &&\n value &&\n insensitive) {\n\n const found = this._lowercase.get(value.toLowerCase());\n if (found) {\n return { value: found };\n }\n }\n\n if (!this._refs.size &&\n typeof value !== 'object') {\n\n return false;\n }\n\n // Objects\n\n if (typeof value === 'object') {\n for (const item of this._values) {\n if (deepEqual(item, value)) {\n return { value: item };\n }\n }\n }\n\n // References\n\n if (state) {\n for (const ref of this._refs) {\n const resolved = ref.resolve(value, state, prefs, null, { in: true });\n if (resolved === undefined) {\n continue;\n }\n\n const items = !ref.in || typeof resolved !== 'object'\n ? [resolved]\n : Array.isArray(resolved) ? resolved : Object.keys(resolved);\n\n for (const item of items) {\n if (typeof item !== typeof value) {\n continue;\n }\n\n if (insensitive &&\n value &&\n typeof value === 'string') {\n\n if (item.toLowerCase() === value.toLowerCase()) {\n return { value: item, ref };\n }\n }\n else {\n if (deepEqual(item, value)) {\n return { value: item, ref };\n }\n }\n }\n }\n }\n\n return false;\n }\n\n override() {\n\n this._override = true;\n }\n\n values(options) {\n\n if (options &&\n options.display) {\n\n const values = [];\n\n for (const item of [...this._values, ...this._refs]) {\n if (item !== undefined) {\n values.push(item);\n }\n }\n\n return values;\n }\n\n return Array.from([...this._values, ...this._refs]);\n }\n\n clone() {\n\n const set = new internals.Values(this._values, this._refs);\n set._override = this._override;\n return set;\n }\n\n concat(source) {\n\n assert(!source._override, 'Cannot concat override set of values');\n\n const set = new internals.Values([...this._values, ...source._values], [...this._refs, ...source._refs]);\n set._override = this._override;\n return set;\n }\n\n describe() {\n\n const normalized = [];\n\n if (this._override) {\n normalized.push({ override: true });\n }\n\n for (const value of this._values.values()) {\n normalized.push(value && typeof value === 'object' ? { value } : value);\n }\n\n for (const value of this._refs.values()) {\n normalized.push(value.describe());\n }\n\n return normalized;\n }\n};\n\n\ninternals.Values.prototype[Common.symbols.values] = true;\n\n\n// Aliases\n\ninternals.Values.prototype.slice = internals.Values.prototype.clone;\n\n\n// Helpers\n\ninternals.lowercases = function (from) {\n\n const map = new Map();\n\n if (from) {\n for (const value of from) {\n if (typeof value === 'string') {\n map.set(value.toLowerCase(), value);\n }\n }\n }\n\n return map;\n};\n","'use strict';\n\nconst { assert, clone, deepEqual, merge } = require('@hapi/hoek');\n\nconst Cache = require('./cache');\nconst Common = require('./common');\nconst Compile = require('./compile');\nconst Errors = require('./errors');\nconst Extend = require('./extend');\nconst Manifest = require('./manifest');\nconst Messages = require('./messages');\nconst Modify = require('./modify');\nconst Ref = require('./ref');\nconst Trace = require('./trace');\nconst Validator = require('./validator');\nconst Values = require('./values');\n\n\nconst internals = {\n standardTypes: new Set(['string', 'number', 'integer', 'boolean', 'object', 'array', 'null']),\n jsonSchemaTarget: 'draft-2020-12',\n primitiveTypes: new Set(['string', 'number', 'boolean']),\n nullSchema: () => ({ type: 'null' })\n};\n\n\ninternals.Base = class {\n\n constructor(type) {\n\n // Naming: public, _private, $_extension, $_mutate{action}\n\n this.type = type;\n\n this.$_root = null;\n this._definition = {};\n this._reset();\n }\n\n _reset() {\n\n this._ids = new Modify.Ids();\n this._preferences = null;\n this._refs = new Ref.Manager();\n this._cache = null;\n\n this._valids = null;\n this._invalids = null;\n\n this._flags = {};\n this._rules = [];\n this._singleRules = new Map(); // The rule options passed for non-multi rules\n\n this.$_terms = {}; // Hash of arrays of immutable objects (extended by other types)\n\n this.$_temp = { // Runtime state (not cloned)\n ruleset: null, // null: use last, false: error, number: start position\n whens: {} // Runtime cache of generated whens\n };\n }\n\n // Manifest\n\n describe() {\n\n assert(typeof Manifest.describe === 'function', 'Manifest functionality disabled');\n return Manifest.describe(this);\n }\n\n $_jsonSchema(mode, options = {}) {\n\n if (options.target !== undefined &&\n options.target !== internals.jsonSchemaTarget) {\n\n throw new Error(`Unsupported JSON Schema target: ${options.target}`);\n }\n\n const rootCall = !options.$defs;\n const defs = options.$defs ?? {};\n\n let schema = {};\n\n const isTypeAny = this.type === 'any';\n const isOnly = this._flags.only;\n\n const valids = this._valids && Array.from(this._valids._values).filter((v) => v !== null);\n let typesOverlap = true;\n\n // If 'only' is set, check if the allowed values' types overlap with the schema type\n\n if (valids && valids.length && isOnly && !isTypeAny) {\n const types = new Set(valids.map((v) => typeof v));\n typesOverlap = types.has(this.type) || (this.type === 'date' && types.has('object'));\n }\n\n // Set the JSON Schema 'type' if it's a standard type and there's an overlap\n\n if (!isTypeAny && typesOverlap && internals.standardTypes.has(this.type)) {\n schema.type = this.type;\n }\n\n if (this._flags.description) {\n schema.description = this._flags.description;\n }\n\n if (this._flags.default !== undefined && typeof this._flags.default !== 'function') {\n schema.default = this._flags.default;\n }\n\n // Apply type-specific JSON Schema conversion\n\n const subOptions = { ...options, $defs: defs };\n if (this._definition.jsonSchema && typesOverlap) {\n schema = this._definition.jsonSchema(this, schema, mode, subOptions);\n }\n\n // Apply rule-specific JSON Schema conversions\n\n for (const rule of this._rules) {\n const definition = this._definition.rules[rule.name];\n if (definition.jsonSchema && typesOverlap) {\n schema = definition.jsonSchema(rule, schema, isOnly, mode, subOptions);\n }\n }\n\n // Handle shared schemas\n\n if (this.$_terms.shared) {\n for (const shared of this.$_terms.shared) {\n defs[shared._flags.id] = shared.$_jsonSchema(mode, subOptions);\n }\n }\n\n if (rootCall && Object.keys(defs).length) {\n schema.$defs = defs;\n }\n\n // Handle allowed values (valids)\n\n if (this._valids) {\n\n const values = valids.filter((v) => typeof v !== 'symbol');\n if (values.length) {\n if (this._flags.only) {\n schema.enum = values;\n\n const list = Common.intersect(new Set(values.map((v) => typeof v)), internals.primitiveTypes);\n\n if (list.size) {\n const types = [...list];\n schema.type = types.length === 1 ? types[0] : types;\n }\n }\n else {\n // If values are allowed but not exclusive, add them via 'anyOf' if they differ from the main type\n\n const otherTypes = values.filter((v) => typeof v !== this.type || isTypeAny);\n if (otherTypes.length && !(isTypeAny && !isOnly)) {\n if (!schema.anyOf) {\n schema = {\n anyOf: [schema]\n };\n }\n\n schema.anyOf.push({ enum: otherTypes });\n }\n }\n }\n }\n\n // Handle 'null' if it's an allowed value\n\n if (this._valids && this._valids.has(null) && !(isTypeAny && !isOnly)) {\n if (this._valids.length === 1 && (isTypeAny || isOnly)) {\n schema.type = 'null';\n }\n else if (schema.type) {\n schema.type = [schema.type, 'null'];\n }\n else if (schema.anyOf) {\n schema.anyOf.unshift(internals.nullSchema());\n }\n else {\n schema = {\n anyOf: [\n internals.nullSchema(),\n schema\n ]\n };\n }\n }\n\n // Handle conditionals (whens) by generating multiple possible schemas combined with 'anyOf'\n\n if (this.$_terms.whens) {\n\n const base = this.clone();\n base.$_terms.whens = null;\n\n const matches = [];\n for (const when of this.$_terms.whens) {\n const tests = when.is ? [when] : when.switch;\n for (let i = 0; i < tests.length; ++i) {\n const test = tests[i];\n if (test.then) {\n matches.push(base.concat(test.then).$_jsonSchema(mode, subOptions));\n }\n\n if (test.otherwise) {\n matches.push(base.concat(test.otherwise).$_jsonSchema(mode, subOptions));\n }\n\n if (!test.then || (i === tests.length - 1 && !test.otherwise)) {\n matches.push(base.$_jsonSchema(mode, subOptions));\n }\n }\n }\n\n const results = [];\n for (const match of matches) {\n if (!results.some((r) => deepEqual(r, match))) {\n results.push(match);\n }\n }\n\n return { anyOf: results };\n }\n\n return schema;\n }\n\n // Rules\n\n allow(...values) {\n\n Common.verifyFlat(values, 'allow');\n return this._values(values, '_valids');\n }\n\n alter(targets) {\n\n assert(targets && typeof targets === 'object' && !Array.isArray(targets), 'Invalid targets argument');\n assert(!this._inRuleset(), 'Cannot set alterations inside a ruleset');\n\n const obj = this.clone();\n obj.$_terms.alterations = obj.$_terms.alterations || [];\n for (const target in targets) {\n const adjuster = targets[target];\n assert(typeof adjuster === 'function', 'Alteration adjuster for', target, 'must be a function');\n obj.$_terms.alterations.push({ target, adjuster });\n }\n\n obj.$_temp.ruleset = false;\n return obj;\n }\n\n artifact(id) {\n\n assert(id !== undefined, 'Artifact cannot be undefined');\n assert(!this._cache, 'Cannot set an artifact with a rule cache');\n\n return this.$_setFlag('artifact', id);\n }\n\n cast(to) {\n\n assert(to === false || typeof to === 'string', 'Invalid to value');\n assert(to === false || this._definition.cast[to], 'Type', this.type, 'does not support casting to', to);\n\n return this.$_setFlag('cast', to === false ? undefined : to);\n }\n\n default(value, options) {\n\n return this._default('default', value, options);\n }\n\n description(desc) {\n\n assert(desc && typeof desc === 'string', 'Description must be a non-empty string');\n\n return this.$_setFlag('description', desc);\n }\n\n empty(schema) {\n\n const obj = this.clone();\n\n if (schema !== undefined) {\n schema = obj.$_compile(schema, { override: false });\n }\n\n return obj.$_setFlag('empty', schema, { clone: false });\n }\n\n error(err) {\n\n assert(err, 'Missing error');\n assert(err instanceof Error || typeof err === 'function', 'Must provide a valid Error object or a function');\n\n return this.$_setFlag('error', err);\n }\n\n example(example, options = {}) {\n\n assert(example !== undefined, 'Missing example');\n Common.assertOptions(options, ['override']);\n\n return this._inner('examples', example, { single: true, override: options.override });\n }\n\n external(method, description) {\n\n if (typeof method === 'object') {\n assert(!description, 'Cannot combine options with description');\n description = method.description;\n method = method.method;\n }\n\n assert(typeof method === 'function', 'Method must be a function');\n assert(description === undefined || description && typeof description === 'string', 'Description must be a non-empty string');\n\n return this._inner('externals', { method, description }, { single: true });\n }\n\n failover(value, options) {\n\n return this._default('failover', value, options);\n }\n\n forbidden() {\n\n return this.presence('forbidden');\n }\n\n id(id) {\n\n if (!id) {\n return this.$_setFlag('id', undefined);\n }\n\n assert(typeof id === 'string', 'id must be a non-empty string');\n assert(/^[^\\.]+$/.test(id), 'id cannot contain period character');\n\n return this.$_setFlag('id', id);\n }\n\n invalid(...values) {\n\n return this._values(values, '_invalids');\n }\n\n label(name) {\n\n assert(name && typeof name === 'string', 'Label name must be a non-empty string');\n\n return this.$_setFlag('label', name);\n }\n\n meta(meta) {\n\n assert(meta !== undefined, 'Meta cannot be undefined');\n\n return this._inner('metas', meta, { single: true });\n }\n\n note(...notes) {\n\n assert(notes.length, 'Missing notes');\n for (const note of notes) {\n assert(note && typeof note === 'string', 'Notes must be non-empty strings');\n }\n\n return this._inner('notes', notes);\n }\n\n only(mode = true) {\n\n assert(typeof mode === 'boolean', 'Invalid mode:', mode);\n\n return this.$_setFlag('only', mode);\n }\n\n optional() {\n\n return this.presence('optional');\n }\n\n prefs(prefs) {\n\n assert(prefs, 'Missing preferences');\n assert(prefs.context === undefined, 'Cannot override context');\n assert(prefs.externals === undefined, 'Cannot override externals');\n assert(prefs.warnings === undefined, 'Cannot override warnings');\n assert(prefs.debug === undefined, 'Cannot override debug');\n\n Common.checkPreferences(prefs);\n\n const obj = this.clone();\n obj._preferences = Common.preferences(obj._preferences, prefs);\n return obj;\n }\n\n presence(mode) {\n\n assert(['optional', 'required', 'forbidden'].includes(mode), 'Unknown presence mode', mode);\n\n return this.$_setFlag('presence', mode);\n }\n\n raw(enabled = true) {\n\n return this.$_setFlag('result', enabled ? 'raw' : undefined);\n }\n\n result(mode) {\n\n assert(['raw', 'strip'].includes(mode), 'Unknown result mode', mode);\n\n return this.$_setFlag('result', mode);\n }\n\n required() {\n\n return this.presence('required');\n }\n\n strict(enabled) {\n\n const obj = this.clone();\n\n const convert = enabled === undefined ? false : !enabled;\n obj._preferences = Common.preferences(obj._preferences, { convert });\n return obj;\n }\n\n strip(enabled = true) {\n\n return this.$_setFlag('result', enabled ? 'strip' : undefined);\n }\n\n tag(...tags) {\n\n assert(tags.length, 'Missing tags');\n for (const tag of tags) {\n assert(tag && typeof tag === 'string', 'Tags must be non-empty strings');\n }\n\n return this._inner('tags', tags);\n }\n\n unit(name) {\n\n assert(name && typeof name === 'string', 'Unit name must be a non-empty string');\n\n return this.$_setFlag('unit', name);\n }\n\n valid(...values) {\n\n Common.verifyFlat(values, 'valid');\n\n const obj = this.allow(...values);\n obj.$_setFlag('only', !!obj._valids, { clone: false });\n return obj;\n }\n\n when(condition, options) {\n\n const obj = this.clone();\n\n if (!obj.$_terms.whens) {\n obj.$_terms.whens = [];\n }\n\n const when = Compile.when(obj, condition, options);\n if (!['any', 'link'].includes(obj.type)) {\n const conditions = when.is ? [when] : when.switch;\n for (const item of conditions) {\n assert(!item.then || item.then.type === 'any' || item.then.type === obj.type, 'Cannot combine', obj.type, 'with', item.then && item.then.type);\n assert(!item.otherwise || item.otherwise.type === 'any' || item.otherwise.type === obj.type, 'Cannot combine', obj.type, 'with', item.otherwise && item.otherwise.type);\n\n }\n }\n\n obj.$_terms.whens.push(when);\n return obj.$_mutateRebuild();\n }\n\n // Helpers\n\n cache(cache) {\n\n assert(!this._inRuleset(), 'Cannot set caching inside a ruleset');\n assert(!this._cache, 'Cannot override schema cache');\n assert(this._flags.artifact === undefined, 'Cannot cache a rule with an artifact');\n\n const obj = this.clone();\n obj._cache = cache || Cache.provider.provision();\n obj.$_temp.ruleset = false;\n return obj;\n }\n\n clone() {\n\n const obj = Object.create(Object.getPrototypeOf(this));\n return this._assign(obj);\n }\n\n concat(source) {\n\n assert(Common.isSchema(source), 'Invalid schema object');\n assert(this.type === 'any' || source.type === 'any' || source.type === this.type, 'Cannot merge type', this.type, 'with another type:', source.type);\n assert(!this._inRuleset(), 'Cannot concatenate onto a schema with open ruleset');\n assert(!source._inRuleset(), 'Cannot concatenate a schema with open ruleset');\n\n let obj = this.clone();\n\n if (this.type === 'any' &&\n source.type !== 'any') {\n\n // Change obj to match source type\n\n const tmpObj = source.clone();\n for (const key of Object.keys(obj)) {\n if (key !== 'type') {\n tmpObj[key] = obj[key];\n }\n }\n\n obj = tmpObj;\n }\n\n obj._ids.concat(source._ids);\n obj._refs.register(source, Ref.toSibling);\n\n obj._preferences = obj._preferences ? Common.preferences(obj._preferences, source._preferences) : source._preferences;\n obj._valids = Values.merge(obj._valids, source._valids, source._invalids);\n obj._invalids = Values.merge(obj._invalids, source._invalids, source._valids);\n\n // Remove unique rules present in source\n\n for (const name of source._singleRules.keys()) {\n if (obj._singleRules.has(name)) {\n obj._rules = obj._rules.filter((target) => target.keep || target.name !== name);\n obj._singleRules.delete(name);\n }\n }\n\n // Rules\n\n for (const test of source._rules) {\n if (!source._definition.rules[test.method].multi) {\n obj._singleRules.set(test.name, test);\n }\n\n obj._rules.push(test);\n }\n\n // Flags\n\n if (obj._flags.empty &&\n source._flags.empty) {\n\n obj._flags.empty = obj._flags.empty.concat(source._flags.empty);\n const flags = Object.assign({}, source._flags);\n delete flags.empty;\n merge(obj._flags, flags);\n }\n else if (source._flags.empty) {\n obj._flags.empty = source._flags.empty;\n const flags = Object.assign({}, source._flags);\n delete flags.empty;\n merge(obj._flags, flags);\n }\n else {\n merge(obj._flags, source._flags);\n }\n\n // Terms\n\n for (const key in source.$_terms) {\n const terms = source.$_terms[key];\n if (!terms) {\n if (!obj.$_terms[key]) {\n obj.$_terms[key] = terms;\n }\n\n continue;\n }\n\n if (!obj.$_terms[key]) {\n obj.$_terms[key] = terms.slice();\n continue;\n }\n\n obj.$_terms[key] = obj.$_terms[key].concat(terms);\n }\n\n // Tracing\n\n if (this.$_root._tracer) {\n this.$_root._tracer._combine(obj, [this, source]);\n }\n\n // Rebuild\n\n return obj.$_mutateRebuild();\n }\n\n extend(options) {\n\n assert(!options.base, 'Cannot extend type with another base');\n\n return Extend.type(this, options);\n }\n\n extract(path) {\n\n path = Array.isArray(path) ? path : path.split('.');\n return this._ids.reach(path);\n }\n\n fork(paths, adjuster) {\n\n assert(!this._inRuleset(), 'Cannot fork inside a ruleset');\n\n let obj = this; // eslint-disable-line consistent-this\n for (let path of [].concat(paths)) {\n path = Array.isArray(path) ? path : path.split('.');\n obj = obj._ids.fork(path, adjuster, obj);\n }\n\n obj.$_temp.ruleset = false;\n return obj;\n }\n\n isAsync() {\n\n if (Boolean(this.$_terms.externals?.length)) {\n return true;\n }\n\n if (this.$_terms.whens) {\n for (const when of this.$_terms.whens) {\n if (when.then?.isAsync()) {\n return true;\n }\n\n if (when.otherwise?.isAsync()) {\n return true;\n }\n\n if (when.switch) {\n for (const item of when.switch) {\n if (item.then?.isAsync()) {\n return true;\n }\n\n if (item.otherwise?.isAsync()) {\n return true;\n }\n }\n }\n }\n }\n\n return false;\n }\n\n rule(options) {\n\n const def = this._definition;\n Common.assertOptions(options, Object.keys(def.modifiers));\n\n assert(this.$_temp.ruleset !== false, 'Cannot apply rules to empty ruleset or the last rule added does not support rule properties');\n const start = this.$_temp.ruleset === null ? this._rules.length - 1 : this.$_temp.ruleset;\n assert(start >= 0 && start < this._rules.length, 'Cannot apply rules to empty ruleset');\n\n const obj = this.clone();\n\n for (let i = start; i < obj._rules.length; ++i) {\n const original = obj._rules[i];\n const rule = clone(original);\n\n for (const name in options) {\n def.modifiers[name](rule, options[name]);\n assert(rule.name === original.name, 'Cannot change rule name');\n }\n\n obj._rules[i] = rule;\n\n if (obj._singleRules.get(rule.name) === original) {\n obj._singleRules.set(rule.name, rule);\n }\n }\n\n obj.$_temp.ruleset = false;\n return obj.$_mutateRebuild();\n }\n\n get ruleset() {\n\n assert(!this._inRuleset(), 'Cannot start a new ruleset without closing the previous one');\n\n const obj = this.clone();\n obj.$_temp.ruleset = obj._rules.length;\n return obj;\n }\n\n get $() {\n\n return this.ruleset;\n }\n\n tailor(targets) {\n\n targets = [].concat(targets);\n\n assert(!this._inRuleset(), 'Cannot tailor inside a ruleset');\n\n let obj = this; // eslint-disable-line consistent-this\n\n if (this.$_terms.alterations) {\n for (const { target, adjuster } of this.$_terms.alterations) {\n if (targets.includes(target)) {\n obj = adjuster(obj);\n assert(Common.isSchema(obj), 'Alteration adjuster for', target, 'failed to return a schema object');\n }\n }\n }\n\n obj = obj.$_modify({ each: (item) => item.tailor(targets), ref: false });\n obj.$_temp.ruleset = false;\n return obj.$_mutateRebuild();\n }\n\n tracer() {\n\n return Trace.location ? Trace.location(this) : this; // $lab:coverage:ignore$\n }\n\n validate(value, options) {\n\n return Validator.entry(value, this, options);\n }\n\n validateAsync(value, options) {\n\n return Validator.entryAsync(value, this, options);\n }\n\n // Extensions\n\n $_addRule(options) {\n\n // Normalize rule\n\n if (typeof options === 'string') {\n options = { name: options };\n }\n\n assert(options && typeof options === 'object', 'Invalid options');\n assert(options.name && typeof options.name === 'string', 'Invalid rule name');\n\n for (const key in options) {\n assert(key[0] !== '_', 'Cannot set private rule properties');\n }\n\n const rule = Object.assign({}, options); // Shallow cloned\n rule._resolve = [];\n rule.method = rule.method || rule.name;\n\n const definition = this._definition.rules[rule.method];\n const args = rule.args;\n\n assert(definition, 'Unknown rule', rule.method);\n\n // Args\n\n const obj = this.clone();\n\n if (args) {\n assert(Object.keys(args).length === 1 || Object.keys(args).length === this._definition.rules[rule.name].args.length, 'Invalid rule definition for', this.type, rule.name);\n\n for (const key in args) {\n let arg = args[key];\n\n if (definition.argsByName) {\n const resolver = definition.argsByName.get(key);\n\n if (resolver.ref &&\n Common.isResolvable(arg)) {\n\n rule._resolve.push(key);\n obj.$_mutateRegister(arg);\n }\n else {\n if (resolver.normalize) {\n arg = resolver.normalize(arg);\n args[key] = arg;\n }\n\n if (resolver.assert) {\n const error = Common.validateArg(arg, key, resolver);\n assert(!error, error, 'or reference');\n }\n }\n }\n\n if (arg === undefined) {\n delete args[key];\n continue;\n }\n\n args[key] = arg;\n }\n }\n\n // Unique rules\n\n if (!definition.multi) {\n obj._ruleRemove(rule.name, { clone: false });\n obj._singleRules.set(rule.name, rule);\n }\n\n if (obj.$_temp.ruleset === false) {\n obj.$_temp.ruleset = null;\n }\n\n if (definition.priority) {\n obj._rules.unshift(rule);\n }\n else {\n obj._rules.push(rule);\n }\n\n return obj;\n }\n\n $_compile(schema, options) {\n\n return Compile.schema(this.$_root, schema, options);\n }\n\n $_createError(code, value, local, state, prefs, options = {}) {\n\n const flags = options.flags !== false ? this._flags : {};\n const messages = options.messages ? Messages.merge(this._definition.messages, options.messages) : this._definition.messages;\n return new Errors.Report(code, value, local, flags, messages, state, prefs);\n }\n\n $_getFlag(name) {\n\n return this._flags[name];\n }\n\n $_getRule(name) {\n\n return this._singleRules.get(name);\n }\n\n $_mapLabels(path) {\n\n path = Array.isArray(path) ? path : path.split('.');\n return this._ids.labels(path);\n }\n\n $_match(value, state, prefs, overrides) {\n\n prefs = Object.assign({}, prefs); // Shallow cloned\n prefs.abortEarly = true;\n prefs._externals = false;\n\n state.snapshot();\n const result = !Validator.validate(value, this, state, prefs, overrides).errors;\n state.restore();\n\n return result;\n }\n\n $_modify(options) {\n\n Common.assertOptions(options, ['each', 'once', 'ref', 'schema']);\n return Modify.schema(this, options) || this;\n }\n\n $_mutateRebuild() {\n\n assert(!this._inRuleset(), 'Cannot add this rule inside a ruleset');\n\n this._refs.reset();\n this._ids.reset();\n\n const each = (item, { source, name, path, key }) => {\n\n const family = this._definition[source][name] && this._definition[source][name].register;\n if (family !== false) {\n this.$_mutateRegister(item, { family, key });\n }\n };\n\n this.$_modify({ each });\n\n if (this._definition.rebuild) {\n this._definition.rebuild(this);\n }\n\n this.$_temp.ruleset = false;\n return this;\n }\n\n $_mutateRegister(schema, { family, key } = {}) {\n\n this._refs.register(schema, family);\n this._ids.register(schema, { key });\n }\n\n $_property(name) {\n\n return this._definition.properties[name];\n }\n\n $_reach(path) {\n\n return this._ids.reach(path);\n }\n\n $_rootReferences() {\n\n return this._refs.roots();\n }\n\n $_setFlag(name, value, options = {}) {\n\n assert(name[0] === '_' || !this._inRuleset(), 'Cannot set flag inside a ruleset');\n\n const flag = this._definition.flags[name] || {};\n if (deepEqual(value, flag.default)) {\n value = undefined;\n }\n\n if (deepEqual(value, this._flags[name])) {\n return this;\n }\n\n const obj = options.clone !== false ? this.clone() : this;\n\n if (value !== undefined) {\n obj._flags[name] = value;\n obj.$_mutateRegister(value);\n }\n else {\n delete obj._flags[name];\n }\n\n if (name[0] !== '_') {\n obj.$_temp.ruleset = false;\n }\n\n return obj;\n }\n\n $_parent(method, ...args) {\n\n return this[method][Common.symbols.parent].call(this, ...args);\n }\n\n $_validate(value, state, prefs) {\n\n return Validator.validate(value, this, state, prefs);\n }\n\n // Internals\n\n _assign(target) {\n\n target.type = this.type;\n\n target.$_root = this.$_root;\n\n target.$_temp = Object.assign({}, this.$_temp);\n target.$_temp.whens = {};\n\n target._ids = this._ids.clone();\n target._preferences = this._preferences;\n target._valids = this._valids && this._valids.clone();\n target._invalids = this._invalids && this._invalids.clone();\n target._rules = this._rules.slice();\n target._singleRules = clone(this._singleRules, { shallow: true });\n target._refs = this._refs.clone();\n target._flags = Object.assign({}, this._flags);\n target._cache = null;\n\n target.$_terms = {};\n for (const key in this.$_terms) {\n target.$_terms[key] = this.$_terms[key] ? this.$_terms[key].slice() : null;\n }\n\n // Backwards compatibility\n\n target.$_super = {};\n for (const override in this.$_super) {\n target.$_super[override] = this._super[override].bind(target);\n }\n\n return target;\n }\n\n _bare() {\n\n const obj = this.clone();\n obj._reset();\n\n const terms = obj._definition.terms;\n for (const name in terms) {\n const term = terms[name];\n obj.$_terms[name] = term.init;\n }\n\n return obj.$_mutateRebuild();\n }\n\n _default(flag, value, options = {}) {\n\n Common.assertOptions(options, 'literal');\n\n assert(value !== undefined, 'Missing', flag, 'value');\n assert(typeof value === 'function' || !options.literal, 'Only function value supports literal option');\n\n if (typeof value === 'function' &&\n options.literal) {\n\n value = {\n [Common.symbols.literal]: true,\n literal: value\n };\n }\n\n const obj = this.$_setFlag(flag, value);\n return obj;\n }\n\n _generate(value, state, prefs) {\n\n if (!this.$_terms.whens) {\n return { schema: this };\n }\n\n // Collect matching whens\n\n const whens = [];\n const ids = [];\n for (let i = 0; i < this.$_terms.whens.length; ++i) {\n const when = this.$_terms.whens[i];\n\n if (when.concat) {\n whens.push(when.concat);\n ids.push(`${i}.concat`);\n continue;\n }\n\n const input = when.ref ? when.ref.resolve(value, state, prefs) : value;\n const tests = when.is ? [when] : when.switch;\n const before = ids.length;\n\n for (let j = 0; j < tests.length; ++j) {\n const { is, then, otherwise } = tests[j];\n\n const baseId = `${i}${when.switch ? '.' + j : ''}`;\n if (is.$_match(input, state.nest(is, `${baseId}.is`), prefs)) {\n if (then) {\n const localState = state.localize([...state.path, `${baseId}.then`], state.ancestors, state.schemas);\n const { schema: generated, id } = then._generate(value, localState, prefs);\n whens.push(generated);\n ids.push(`${baseId}.then${id ? `(${id})` : ''}`);\n break;\n }\n }\n else if (otherwise) {\n const localState = state.localize([...state.path, `${baseId}.otherwise`], state.ancestors, state.schemas);\n const { schema: generated, id } = otherwise._generate(value, localState, prefs);\n whens.push(generated);\n ids.push(`${baseId}.otherwise${id ? `(${id})` : ''}`);\n break;\n }\n }\n\n if (when.break &&\n ids.length > before) { // Something matched\n\n break;\n }\n }\n\n // Check cache\n\n const id = ids.join(', ');\n state.mainstay.tracer.debug(state, 'rule', 'when', id);\n\n if (!id) {\n return { schema: this };\n }\n\n if (!state.mainstay.tracer.active &&\n this.$_temp.whens[id]) {\n\n return { schema: this.$_temp.whens[id], id };\n }\n\n // Generate dynamic schema\n\n let obj = this; // eslint-disable-line consistent-this\n if (this._definition.generate) {\n obj = this._definition.generate(this, value, state, prefs);\n }\n\n // Apply whens\n\n for (const when of whens) {\n obj = obj.concat(when);\n }\n\n // Tracing\n\n if (this.$_root._tracer) {\n this.$_root._tracer._combine(obj, [this, ...whens]);\n }\n\n // Cache result\n\n this.$_temp.whens[id] = obj;\n return { schema: obj, id };\n }\n\n _inner(type, values, options = {}) {\n\n assert(!this._inRuleset(), `Cannot set ${type} inside a ruleset`);\n\n const obj = this.clone();\n if (!obj.$_terms[type] ||\n options.override) {\n\n obj.$_terms[type] = [];\n }\n\n if (options.single) {\n obj.$_terms[type].push(values);\n }\n else {\n obj.$_terms[type].push(...values);\n }\n\n obj.$_temp.ruleset = false;\n return obj;\n }\n\n _inRuleset() {\n\n return this.$_temp.ruleset !== null && this.$_temp.ruleset !== false;\n }\n\n _ruleRemove(name, options = {}) {\n\n if (!this._singleRules.has(name)) {\n return this;\n }\n\n const obj = options.clone !== false ? this.clone() : this;\n\n obj._singleRules.delete(name);\n\n const filtered = [];\n for (let i = 0; i < obj._rules.length; ++i) {\n const test = obj._rules[i];\n if (test.name === name &&\n !test.keep) {\n\n if (obj._inRuleset() &&\n i < obj.$_temp.ruleset) {\n\n --obj.$_temp.ruleset;\n }\n\n continue;\n }\n\n filtered.push(test);\n }\n\n obj._rules = filtered;\n return obj;\n }\n\n _values(values, key) {\n\n Common.verifyFlat(values, key.slice(1, -1));\n\n const obj = this.clone();\n\n const override = values[0] === Common.symbols.override;\n if (override) {\n values = values.slice(1);\n }\n\n if (!obj[key] &&\n values.length) {\n\n obj[key] = new Values();\n }\n else if (override) {\n obj[key] = values.length ? new Values() : null;\n obj.$_mutateRebuild();\n }\n\n if (!obj[key]) {\n return obj;\n }\n\n if (override) {\n obj[key].override();\n }\n\n for (const value of values) {\n assert(value !== undefined, 'Cannot call allow/valid/invalid with undefined');\n assert(value !== Common.symbols.override, 'Override must be the first value');\n\n const other = key === '_invalids' ? '_valids' : '_invalids';\n if (obj[other]) {\n obj[other].remove(value);\n if (!obj[other].length) {\n assert(key === '_valids' || !obj._flags.only, 'Setting invalid value', value, 'leaves schema rejecting all values due to previous valid rule');\n obj[other] = null;\n }\n }\n\n obj[key].add(value, obj._refs);\n }\n\n return obj;\n }\n\n // Standard Schema\n\n get '~standard'() {\n\n const mapToStandardError = (error) => {\n\n let issues;\n if (Errors.ValidationError.isError(error)) {\n issues = error.details.map(({ message, path }) => ({\n message,\n path\n }));\n }\n else {\n issues = [{\n message: error.message\n }];\n }\n\n return {\n issues\n };\n };\n\n const mapToStandardValue = (value) => ({ value });\n\n return {\n version: 1,\n vendor: 'joi',\n validate: (value, options) => {\n\n const result = Validator.standard(value, this, options);\n\n if (result instanceof Promise) {\n return result\n .then(mapToStandardValue, mapToStandardError);\n }\n\n if (!result.error) {\n return mapToStandardValue(result.value);\n }\n\n return mapToStandardError(result.error);\n },\n jsonSchema: {\n input: (options) => this.$_jsonSchema('input', options),\n output: (options) => this.$_jsonSchema('output', options)\n }\n };\n }\n};\n\n\ninternals.Base.prototype[Common.symbols.any] = {\n version: Common.version,\n compile: Compile.compile,\n root: '$_root'\n};\n\n\ninternals.Base.prototype.isImmutable = true; // Prevents Hoek from deep cloning schema objects (must be on prototype)\n\n\n// Aliases\n\ninternals.Base.prototype.deny = internals.Base.prototype.invalid;\ninternals.Base.prototype.disallow = internals.Base.prototype.invalid;\ninternals.Base.prototype.equal = internals.Base.prototype.valid;\ninternals.Base.prototype.exist = internals.Base.prototype.required;\ninternals.Base.prototype.not = internals.Base.prototype.invalid;\ninternals.Base.prototype.options = internals.Base.prototype.prefs;\ninternals.Base.prototype.preferences = internals.Base.prototype.prefs;\n\n\nmodule.exports = new internals.Base();\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Base = require('../base');\nconst Common = require('../common');\nconst Messages = require('../messages');\n\n\nconst internals = {};\n\n\nmodule.exports = Base.extend({\n\n type: 'any',\n\n flags: {\n\n only: { default: false }\n },\n\n terms: {\n\n alterations: { init: null },\n examples: { init: null },\n externals: { init: null },\n metas: { init: [] },\n notes: { init: [] },\n shared: { init: null },\n tags: { init: [] },\n whens: { init: null }\n },\n\n rules: {\n\n custom: {\n method(method, description) {\n\n assert(typeof method === 'function', 'Method must be a function');\n assert(description === undefined || description && typeof description === 'string', 'Description must be a non-empty string');\n\n return this.$_addRule({ name: 'custom', args: { method, description } });\n },\n validate(value, helpers, { method }) {\n\n try {\n return method(value, helpers);\n }\n catch (err) {\n return helpers.error('any.custom', { error: err });\n }\n },\n args: ['method', 'description'],\n multi: true\n },\n\n messages: {\n method(messages) {\n\n return this.prefs({ messages });\n }\n },\n\n shared: {\n method(schema) {\n\n assert(Common.isSchema(schema) && schema._flags.id, 'Schema must be a schema with an id');\n\n const obj = this.clone();\n obj.$_terms.shared = obj.$_terms.shared || [];\n obj.$_terms.shared.push(schema);\n obj.$_mutateRegister(schema);\n return obj;\n }\n },\n\n warning: {\n method(code, local) {\n\n assert(code && typeof code === 'string', 'Invalid warning code');\n\n return this.$_addRule({ name: 'warning', args: { code, local }, warn: true });\n },\n validate(value, helpers, { code, local }) {\n\n return helpers.error(code, local);\n },\n args: ['code', 'local'],\n multi: true\n }\n },\n\n modifiers: {\n\n keep(rule, enabled = true) {\n\n rule.keep = enabled;\n },\n\n message(rule, message) {\n\n rule.message = Messages.compile(message);\n },\n\n warn(rule, enabled = true) {\n\n rule.warn = enabled;\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n for (const key in desc) {\n const values = desc[key];\n\n if (['examples', 'externals', 'metas', 'notes', 'tags'].includes(key)) {\n for (const value of values) {\n obj = obj[key.slice(0, -1)](value);\n }\n\n continue;\n }\n\n if (key === 'alterations') {\n const alter = {};\n for (const { target, adjuster } of values) {\n alter[target] = adjuster;\n }\n\n obj = obj.alter(alter);\n continue;\n }\n\n if (key === 'whens') {\n for (const value of values) {\n const { ref, is, not, then, otherwise, concat } = value;\n if (concat) {\n obj = obj.concat(concat);\n }\n else if (ref) {\n obj = obj.when(ref, { is, not, then, otherwise, switch: value.switch, break: value.break });\n }\n else {\n obj = obj.when(is, { then, otherwise, break: value.break });\n }\n }\n\n continue;\n }\n\n if (key === 'shared') {\n for (const value of values) {\n obj = obj.shared(value);\n }\n }\n }\n\n return obj;\n }\n },\n\n messages: {\n 'any.custom': '{{#label}} failed custom validation because {{#error.message}}',\n 'any.default': '{{#label}} threw an error when running default method',\n 'any.failover': '{{#label}} threw an error when running failover method',\n 'any.invalid': '{{#label}} contains an invalid value',\n 'any.only': '{{#label}} must be {if(#valids.length == 1, \"\", \"one of \")}{{#valids}}',\n 'any.ref': '{{#label}} {{#arg}} references {{:#ref}} which {{#reason}}',\n 'any.required': '{{#label}} is required',\n 'any.unknown': '{{#label}} is not allowed'\n }\n});\n","'use strict';\n\nconst { assert, merge } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Compile = require('../compile');\nconst Errors = require('../errors');\nconst Ref = require('../ref');\n\n\nconst internals = {};\n\n\nmodule.exports = Any.extend({\n\n type: 'alternatives',\n\n flags: {\n\n match: { default: 'any' } // 'any', 'one', 'all'\n },\n\n terms: {\n\n matches: { init: [], register: Ref.toSibling }\n },\n\n args(schema, ...schemas) {\n\n if (schemas.length === 1) {\n if (Array.isArray(schemas[0])) {\n return schema.try(...schemas[0]);\n }\n }\n\n return schema.try(...schemas);\n },\n\n validate(value, helpers) {\n\n const { schema, error, state, prefs } = helpers;\n\n // Match all or one\n\n if (schema._flags.match) {\n const matched = [];\n const failed = [];\n\n for (let i = 0; i < schema.$_terms.matches.length; ++i) {\n const item = schema.$_terms.matches[i];\n const localState = state.nest(item.schema, `match.${i}`);\n localState.snapshot();\n\n const result = item.schema.$_validate(value, localState, prefs);\n if (!result.errors) {\n matched.push(result.value);\n localState.commit();\n }\n else {\n failed.push(result.errors);\n localState.restore();\n }\n }\n\n if (matched.length === 0) {\n const context = {\n details: failed.map((f) => Errors.details(f, { override: false }))\n };\n\n return { errors: error('alternatives.any', context) };\n }\n\n // Match one\n\n if (schema._flags.match === 'one') {\n return matched.length === 1 ? { value: matched[0] } : { errors: error('alternatives.one') };\n }\n\n // Match all\n\n if (matched.length !== schema.$_terms.matches.length) {\n const context = {\n details: failed.map((f) => Errors.details(f, { override: false }))\n };\n\n return { errors: error('alternatives.all', context) };\n }\n\n const isAnyObj = (alternative) => {\n\n return alternative.$_terms.matches.some((v) => {\n\n return v.schema.type === 'object' ||\n (v.schema.type === 'alternatives' && isAnyObj(v.schema));\n });\n };\n\n return isAnyObj(schema) ? { value: matched.reduce((acc, v) => merge(acc, v, { mergeArrays: false })) } : { value: matched[matched.length - 1] };\n }\n\n // Match any\n\n const errors = [];\n for (let i = 0; i < schema.$_terms.matches.length; ++i) {\n const item = schema.$_terms.matches[i];\n\n // Try\n\n if (item.schema) {\n const localState = state.nest(item.schema, `match.${i}`);\n localState.snapshot();\n\n const result = item.schema.$_validate(value, localState, prefs);\n if (!result.errors) {\n localState.commit();\n return result;\n }\n\n localState.restore();\n errors.push({ schema: item.schema, reports: result.errors });\n continue;\n }\n\n // Conditional\n\n const input = item.ref ? item.ref.resolve(value, state, prefs) : value;\n const tests = item.is ? [item] : item.switch;\n\n for (let j = 0; j < tests.length; ++j) {\n const test = tests[j];\n const { is, then, otherwise } = test;\n\n const id = `match.${i}${item.switch ? '.' + j : ''}`;\n if (!is.$_match(input, state.nest(is, `${id}.is`), prefs)) {\n if (otherwise) {\n return otherwise.$_validate(value, state.nest(otherwise, `${id}.otherwise`), prefs);\n }\n }\n else if (then) {\n return then.$_validate(value, state.nest(then, `${id}.then`), prefs);\n }\n }\n }\n\n return internals.errors(errors, helpers);\n },\n\n jsonSchema(schema, res, mode, options) {\n\n const matches = [];\n\n // Collect all alternative schemas from 'matches' term\n\n for (const match of schema.$_terms.matches) {\n if (match.schema) {\n matches.push(match.schema.$_jsonSchema(mode, options));\n }\n else {\n // Handle conditional matches (when/switch)\n\n const tests = match.is ? [match] : match.switch;\n for (const test of tests) {\n if (test.then) {\n matches.push(test.then.$_jsonSchema(mode, options));\n }\n\n if (test.otherwise) {\n matches.push(test.otherwise.$_jsonSchema(mode, options));\n }\n }\n }\n }\n\n if (matches.length) {\n delete res.type;\n\n // Map alternatives to 'anyOf' or 'oneOf' based on the match flag\n\n const matchMode = schema._flags.match ?? 'any';\n if (matchMode === 'one') {\n res.oneOf = matches;\n }\n else {\n res.anyOf = matches;\n }\n }\n\n return res;\n },\n\n rules: {\n\n conditional: {\n method(condition, options) {\n\n assert(!this._flags._endedSwitch, 'Unreachable condition');\n assert(!this._flags.match, 'Cannot combine match mode', this._flags.match, 'with conditional rule');\n assert(options.break === undefined, 'Cannot use break option with alternatives conditional');\n\n const obj = this.clone();\n\n const match = Compile.when(obj, condition, options);\n const conditions = match.is ? [match] : match.switch;\n for (const item of conditions) {\n if (item.then &&\n item.otherwise) {\n\n obj.$_setFlag('_endedSwitch', true, { clone: false });\n break;\n }\n }\n\n obj.$_terms.matches.push(match);\n return obj.$_mutateRebuild();\n }\n },\n\n match: {\n method(mode) {\n\n assert(['any', 'one', 'all'].includes(mode), 'Invalid alternatives match mode', mode);\n\n if (mode !== 'any') {\n for (const match of this.$_terms.matches) {\n assert(match.schema, 'Cannot combine match mode', mode, 'with conditional rules');\n }\n }\n\n return this.$_setFlag('match', mode);\n }\n },\n\n try: {\n method(...schemas) {\n\n assert(schemas.length, 'Missing alternative schemas');\n Common.verifyFlat(schemas, 'try');\n\n assert(!this._flags._endedSwitch, 'Unreachable condition');\n\n const obj = this.clone();\n for (const schema of schemas) {\n obj.$_terms.matches.push({ schema: obj.$_compile(schema) });\n }\n\n return obj.$_mutateRebuild();\n }\n }\n },\n\n overrides: {\n\n label(name) {\n\n const obj = this.$_parent('label', name);\n const each = (item, source) => {\n\n return source.path[0] !== 'is' && typeof item._flags.label !== 'string' ? item.label(name) : undefined;\n };\n\n return obj.$_modify({ each, ref: false });\n },\n\n isAsync() {\n\n if (this.$_terms.externals?.length) {\n return true;\n }\n\n for (const match of this.$_terms.matches) {\n\n if (match.schema?.isAsync()) {\n return true;\n }\n\n if (match.then?.isAsync()) {\n return true;\n }\n\n if (match.otherwise?.isAsync()) {\n return true;\n }\n }\n\n return false;\n }\n },\n\n rebuild(schema) {\n\n // Flag when an alternative type is an array\n\n const each = (item) => {\n\n if (Common.isSchema(item) &&\n item.type === 'array') {\n\n schema.$_setFlag('_arrayItems', true, { clone: false });\n }\n };\n\n schema.$_modify({ each });\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.matches) {\n for (const match of desc.matches) {\n const { schema, ref, is, not, then, otherwise } = match;\n if (schema) {\n obj = obj.try(schema);\n }\n else if (ref) {\n obj = obj.conditional(ref, { is, then, not, otherwise, switch: match.switch });\n }\n else {\n obj = obj.conditional(is, { then, otherwise });\n }\n }\n }\n\n return obj;\n }\n },\n\n messages: {\n 'alternatives.all': '{{#label}} does not match all of the required types',\n 'alternatives.any': '{{#label}} does not match any of the allowed types',\n 'alternatives.match': '{{#label}} does not match any of the allowed types',\n 'alternatives.one': '{{#label}} matches more than one allowed type',\n 'alternatives.types': '{{#label}} must be one of {{#types}}'\n }\n});\n\n\n// Helpers\n\ninternals.errors = function (failures, { error, state }) {\n\n // Nothing matched due to type criteria rules\n\n if (!failures.length) {\n return { errors: error('alternatives.any') };\n }\n\n // Single error\n\n if (failures.length === 1) {\n return { errors: failures[0].reports };\n }\n\n // Analyze reasons\n\n const valids = new Set();\n const complex = [];\n\n for (const { reports, schema } of failures) {\n\n // Multiple errors (!abortEarly)\n\n if (reports.length > 1) {\n return internals.unmatched(failures, error);\n }\n\n // Custom error\n\n const report = reports[0];\n if (report instanceof Errors.Report === false) {\n return internals.unmatched(failures, error);\n }\n\n // Internal object or array error\n\n if (report.state.path.length !== state.path.length) {\n complex.push({ type: schema.type, report });\n continue;\n }\n\n // Valids\n\n if (report.code === 'any.only') {\n for (const valid of report.local.valids) {\n valids.add(valid);\n }\n\n continue;\n }\n\n // Base type\n\n const [type, code] = report.code.split('.');\n if (code !== 'base') {\n complex.push({ type: schema.type, report });\n }\n else if (report.code === 'object.base') {\n valids.add(report.local.type);\n }\n else {\n valids.add(type);\n }\n }\n\n // All errors are base types or valids\n\n if (!complex.length) {\n return { errors: error('alternatives.types', { types: [...valids] }) };\n }\n\n // Single complex error\n\n if (complex.length === 1) {\n return { errors: complex[0].report };\n }\n\n return internals.unmatched(failures, error);\n};\n\n\ninternals.unmatched = function (failures, error) {\n\n const errors = [];\n for (const failure of failures) {\n errors.push(...failure.reports);\n }\n\n return { errors: error('alternatives.match', Errors.details(errors, { override: false })) };\n};\n","'use strict';\n\nconst { assert, deepEqual, reach } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Compile = require('../compile');\n\n\nconst internals = {};\n\n\nmodule.exports = Any.extend({\n\n type: 'array',\n\n flags: {\n\n single: { default: false },\n sparse: { default: false }\n },\n\n terms: {\n\n items: { init: [], manifest: 'schema' },\n ordered: { init: [], manifest: 'schema' },\n\n _exclusions: { init: [] },\n _inclusions: { init: [] },\n _requireds: { init: [] }\n },\n\n coerce: {\n from: 'object',\n method(value, { schema, state, prefs }) {\n\n if (!Array.isArray(value)) {\n return;\n }\n\n const sort = schema.$_getRule('sort');\n if (!sort) {\n return;\n }\n\n return internals.sort(schema, value, sort.args.options, state, prefs);\n }\n },\n\n validate(value, { schema, error }) {\n\n if (!Array.isArray(value)) {\n if (schema._flags.single) {\n const single = [value];\n single[Common.symbols.arraySingle] = true;\n return { value: single };\n }\n\n return { errors: error('array.base') };\n }\n\n if (!schema.$_getRule('items') &&\n !schema.$_terms.externals) {\n\n return;\n }\n\n return { value: value.slice() }; // Clone the array so that we don't modify the original\n },\n\n jsonSchema(schema, res, mode, options) {\n\n const ordered = schema.$_terms.ordered;\n\n // Handle ordered items (tuple-like) using 'prefixItems'\n\n if (ordered.length) {\n res.prefixItems = ordered.map((item) => item.$_jsonSchema(mode, options));\n }\n\n if (schema.$_terms.items.length) {\n let items;\n if (schema.$_terms.items.length === 1) {\n items = schema.$_terms.items[0].$_jsonSchema(mode, options);\n }\n else {\n items = {\n anyOf: schema.$_terms.items.map((item) => item.$_jsonSchema(mode, options))\n };\n }\n\n // If there are ordered items, remaining items are 'unevaluatedItems'\n\n if (ordered.length) {\n res.unevaluatedItems = items;\n res.minItems = ordered.length;\n }\n else {\n res.items = items;\n }\n }\n else if (ordered.length) {\n // No additional items allowed beyond the ordered ones\n\n res.unevaluatedItems = false;\n res.minItems = ordered.length;\n res.maxItems = ordered.length;\n }\n\n // Map 'has' rules to 'contains' in JSON Schema\n\n const contains = [];\n for (const rule of schema._rules) {\n if (rule.name === 'has') {\n contains.push(rule.args.schema.$_jsonSchema(mode, options));\n }\n }\n\n if (contains.length) {\n if (contains.length === 1) {\n res.contains = contains[0];\n }\n else {\n res.allOf = contains.map((item) => ({ contains: item }));\n }\n }\n\n if (schema._flags.single &&\n schema.$_terms.items.length) {\n\n let items;\n if (schema.$_terms.items.length === 1) {\n items = schema.$_terms.items[0].$_jsonSchema(mode, options);\n }\n else {\n items = {\n anyOf: schema.$_terms.items.map((item) => item.$_jsonSchema(mode, options))\n };\n }\n\n res = {\n anyOf: [\n res,\n items\n ]\n };\n }\n\n return res;\n },\n\n rules: {\n\n has: {\n method(schema) {\n\n schema = this.$_compile(schema, { appendPath: true });\n const obj = this.$_addRule({ name: 'has', args: { schema } });\n obj.$_mutateRegister(schema);\n return obj;\n },\n validate(value, { state, prefs, error }, { schema: has }) {\n\n const ancestors = [value, ...state.ancestors];\n for (let i = 0; i < value.length; ++i) {\n const localState = state.localize([...state.path, i], ancestors, has);\n if (has.$_match(value[i], localState, prefs)) {\n return value;\n }\n }\n\n const patternLabel = has._flags.label;\n if (patternLabel) {\n return error('array.hasKnown', { patternLabel });\n }\n\n return error('array.hasUnknown', null);\n },\n multi: true\n },\n\n items: {\n method(...schemas) {\n\n Common.verifyFlat(schemas, 'items');\n\n const obj = this.$_addRule('items');\n\n for (let i = 0; i < schemas.length; ++i) {\n const type = Common.tryWithPath(() => this.$_compile(schemas[i]), i, { append: true });\n obj.$_terms.items.push(type);\n }\n\n return obj.$_mutateRebuild();\n },\n validate(value, { schema, error, state, prefs, errorsArray }) {\n\n const requireds = schema.$_terms._requireds.slice();\n const ordereds = schema.$_terms.ordered.slice();\n const inclusions = [...schema.$_terms._inclusions, ...requireds];\n\n const wasArray = !value[Common.symbols.arraySingle];\n delete value[Common.symbols.arraySingle];\n\n const errors = errorsArray();\n\n let il = value.length;\n for (let i = 0; i < il; ++i) {\n const item = value[i];\n\n let errored = false;\n let isValid = false;\n\n const key = wasArray ? i : new Number(i); // eslint-disable-line no-new-wrappers\n const path = [...state.path, key];\n\n // Sparse\n\n if (!schema._flags.sparse &&\n item === undefined) {\n\n errors.push(error('array.sparse', { key, path, pos: i, value: undefined }, state.localize(path)));\n if (prefs.abortEarly) {\n return errors;\n }\n\n ordereds.shift();\n continue;\n }\n\n // Exclusions\n\n const ancestors = [value, ...state.ancestors];\n\n for (const exclusion of schema.$_terms._exclusions) {\n if (!exclusion.$_match(item, state.localize(path, ancestors, exclusion), prefs, { presence: 'ignore' })) {\n continue;\n }\n\n errors.push(error('array.excludes', { pos: i, value: item }, state.localize(path)));\n if (prefs.abortEarly) {\n return errors;\n }\n\n errored = true;\n ordereds.shift();\n break;\n }\n\n if (errored) {\n continue;\n }\n\n // Ordered\n\n if (schema.$_terms.ordered.length) {\n if (ordereds.length) {\n const ordered = ordereds.shift();\n const res = ordered.$_validate(item, state.localize(path, ancestors, ordered), prefs);\n if (!res.errors) {\n if (ordered._flags.result === 'strip') {\n internals.fastSplice(value, i);\n --i;\n --il;\n }\n else if (!schema._flags.sparse && res.value === undefined) {\n errors.push(error('array.sparse', { key, path, pos: i, value: undefined }, state.localize(path)));\n if (prefs.abortEarly) {\n return errors;\n }\n\n continue;\n }\n else {\n value[i] = res.value;\n }\n }\n else {\n errors.push(...res.errors);\n if (prefs.abortEarly) {\n return errors;\n }\n }\n\n continue;\n }\n else if (!schema.$_terms.items.length) {\n errors.push(error('array.orderedLength', { pos: i, limit: schema.$_terms.ordered.length }));\n if (prefs.abortEarly) {\n return errors;\n }\n\n break; // No reason to continue since there are no other rules to validate other than array.orderedLength\n }\n }\n\n // Requireds\n\n const requiredChecks = [];\n let jl = requireds.length;\n for (let j = 0; j < jl; ++j) {\n const localState = state.localize(path, ancestors, requireds[j]);\n localState.snapshot();\n\n const res = requireds[j].$_validate(item, localState, prefs);\n requiredChecks[j] = res;\n\n if (!res.errors) {\n localState.commit();\n value[i] = res.value;\n isValid = true;\n internals.fastSplice(requireds, j);\n --j;\n --jl;\n\n if (!schema._flags.sparse &&\n res.value === undefined) {\n\n errors.push(error('array.sparse', { key, path, pos: i, value: undefined }, state.localize(path)));\n if (prefs.abortEarly) {\n return errors;\n }\n }\n\n break;\n }\n\n localState.restore();\n }\n\n if (isValid) {\n continue;\n }\n\n // Inclusions\n\n const stripUnknown = prefs.stripUnknown && !!prefs.stripUnknown.arrays || false;\n\n jl = inclusions.length;\n for (const inclusion of inclusions) {\n\n // Avoid re-running requireds that already didn't match in the previous loop\n\n let res;\n const previousCheck = requireds.indexOf(inclusion);\n if (previousCheck !== -1) {\n res = requiredChecks[previousCheck];\n }\n else {\n const localState = state.localize(path, ancestors, inclusion);\n localState.snapshot();\n\n res = inclusion.$_validate(item, localState, prefs);\n if (!res.errors) {\n localState.commit();\n if (inclusion._flags.result === 'strip') {\n internals.fastSplice(value, i);\n --i;\n --il;\n }\n else if (!schema._flags.sparse &&\n res.value === undefined) {\n\n errors.push(error('array.sparse', { key, path, pos: i, value: undefined }, state.localize(path)));\n errored = true;\n }\n else {\n value[i] = res.value;\n }\n\n isValid = true;\n break;\n }\n\n localState.restore();\n }\n\n // Return the actual error if only one inclusion defined\n\n if (jl === 1) {\n if (stripUnknown) {\n internals.fastSplice(value, i);\n --i;\n --il;\n isValid = true;\n break;\n }\n\n errors.push(...res.errors);\n if (prefs.abortEarly) {\n return errors;\n }\n\n errored = true;\n break;\n }\n }\n\n if (errored) {\n continue;\n }\n\n if ((schema.$_terms._inclusions.length || schema.$_terms._requireds.length) &&\n !isValid) {\n\n if (stripUnknown) {\n internals.fastSplice(value, i);\n --i;\n --il;\n continue;\n }\n\n errors.push(error('array.includes', { pos: i, value: item }, state.localize(path)));\n if (prefs.abortEarly) {\n return errors;\n }\n }\n }\n\n if (requireds.length) {\n internals.fillMissedErrors(schema, errors, requireds, value, state, prefs);\n }\n\n if (ordereds.length) {\n internals.fillOrderedErrors(schema, errors, ordereds, value, state, prefs);\n\n if (!errors.length) {\n internals.fillDefault(ordereds, value, state, prefs);\n }\n }\n\n return errors.length ? errors : value;\n },\n\n priority: true,\n manifest: false\n },\n\n length: {\n method(limit) {\n\n return this.$_addRule({ name: 'length', args: { limit }, operator: '=' });\n },\n validate(value, helpers, { limit }, { name, operator, args }) {\n\n if (Common.compare(value.length, limit, operator)) {\n return value;\n }\n\n return helpers.error('array.' + name, { limit: args.limit, value });\n },\n jsonSchema(rule, res) {\n\n res.minItems = rule.args.limit;\n res.maxItems = rule.args.limit;\n\n return res;\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: Common.limit,\n message: 'must be a positive integer'\n }\n ]\n },\n\n max: {\n method(limit) {\n\n return this.$_addRule({ name: 'max', method: 'length', args: { limit }, operator: '<=' });\n },\n jsonSchema(rule, res) {\n\n res.maxItems = rule.args.limit;\n\n return res;\n }\n },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'length', args: { limit }, operator: '>=' });\n },\n jsonSchema(rule, res) {\n\n res.minItems = rule.args.limit;\n\n return res;\n }\n },\n\n ordered: {\n method(...schemas) {\n\n Common.verifyFlat(schemas, 'ordered');\n\n const obj = this.$_addRule('items');\n\n for (let i = 0; i < schemas.length; ++i) {\n const type = Common.tryWithPath(() => this.$_compile(schemas[i]), i, { append: true });\n internals.validateSingle(type, obj);\n\n obj.$_mutateRegister(type);\n obj.$_terms.ordered.push(type);\n }\n\n return obj.$_mutateRebuild();\n }\n },\n\n single: {\n method(enabled) {\n\n const value = enabled === undefined ? true : !!enabled;\n assert(!value || !this._flags._arrayItems, 'Cannot specify single rule when array has array items');\n\n return this.$_setFlag('single', value);\n }\n },\n\n sort: {\n method(options = {}) {\n\n Common.assertOptions(options, ['by', 'order']);\n\n const settings = {\n order: options.order || 'ascending'\n };\n\n if (options.by) {\n settings.by = Compile.ref(options.by, { ancestor: 0 });\n assert(!settings.by.ancestor, 'Cannot sort by ancestor');\n }\n\n return this.$_addRule({ name: 'sort', args: { options: settings } });\n },\n validate(value, { error, state, prefs, schema }, { options }) {\n\n const { value: sorted, errors } = internals.sort(schema, value, options, state, prefs);\n if (errors) {\n return errors;\n }\n\n for (let i = 0; i < value.length; ++i) {\n if (value[i] !== sorted[i]) {\n return error('array.sort', { order: options.order, by: options.by ? options.by.key : 'value' });\n }\n }\n\n return value;\n },\n convert: true\n },\n\n sparse: {\n method(enabled) {\n\n const value = enabled === undefined ? true : !!enabled;\n\n if (this._flags.sparse === value) {\n return this;\n }\n\n const obj = value ? this.clone() : this.$_addRule('items');\n return obj.$_setFlag('sparse', value, { clone: false });\n }\n },\n\n unique: {\n method(comparator, options = {}) {\n\n assert(!comparator || typeof comparator === 'function' || typeof comparator === 'string', 'comparator must be a function or a string');\n Common.assertOptions(options, ['ignoreUndefined', 'separator']);\n\n const rule = { name: 'unique', args: { options, comparator } };\n\n if (comparator) {\n if (typeof comparator === 'string') {\n const separator = Common.default(options.separator, '.');\n rule.path = separator ? comparator.split(separator) : [comparator];\n }\n else {\n rule.comparator = comparator;\n }\n }\n\n return this.$_addRule(rule);\n },\n validate(value, { state, error, schema }, { comparator: raw, options }, { comparator, path }) {\n\n const found = {\n string: Object.create(null),\n number: Object.create(null),\n undefined: Object.create(null),\n boolean: Object.create(null),\n bigint: Object.create(null),\n object: new Map(),\n function: new Map(),\n custom: new Map()\n };\n\n const compare = comparator || deepEqual;\n const ignoreUndefined = options.ignoreUndefined;\n\n for (let i = 0; i < value.length; ++i) {\n const item = path ? reach(value[i], path) : value[i];\n const records = comparator ? found.custom : found[typeof item];\n assert(records, 'Failed to find unique map container for type', typeof item);\n\n if (records instanceof Map) {\n const entries = records.entries();\n let current;\n while (!(current = entries.next()).done) {\n if (compare(current.value[0], item)) {\n const localState = state.localize([...state.path, i], [value, ...state.ancestors]);\n const context = {\n pos: i,\n value: value[i],\n dupePos: current.value[1],\n dupeValue: value[current.value[1]]\n };\n\n if (path) {\n context.path = raw;\n }\n\n return error('array.unique', context, localState);\n }\n }\n\n records.set(item, i);\n }\n else {\n if ((!ignoreUndefined || item !== undefined) &&\n records[item] !== undefined) {\n\n const context = {\n pos: i,\n value: value[i],\n dupePos: records[item],\n dupeValue: value[records[item]]\n };\n\n if (path) {\n context.path = raw;\n }\n\n const localState = state.localize([...state.path, i], [value, ...state.ancestors]);\n return error('array.unique', context, localState);\n }\n\n records[item] = i;\n }\n }\n\n return value;\n },\n jsonSchema(rule, res) {\n\n res.uniqueItems = true;\n\n return res;\n },\n args: ['comparator', 'options'],\n multi: true\n }\n },\n\n overrides: {\n\n isAsync() {\n\n if (this.$_terms.externals?.length) {\n return true;\n }\n\n for (const item of this.$_terms.items) {\n if (item.isAsync()) {\n return true;\n }\n }\n\n for (const item of this.$_terms.ordered) {\n if (item.isAsync()) {\n return true;\n }\n }\n\n return false;\n }\n },\n\n cast: {\n set: {\n from: Array.isArray,\n to(value, helpers) {\n\n return new Set(value);\n }\n }\n },\n\n rebuild(schema) {\n\n schema.$_terms._inclusions = [];\n schema.$_terms._exclusions = [];\n schema.$_terms._requireds = [];\n\n for (const type of schema.$_terms.items) {\n internals.validateSingle(type, schema);\n\n if (type._flags.presence === 'required') {\n schema.$_terms._requireds.push(type);\n }\n else if (type._flags.presence === 'forbidden') {\n schema.$_terms._exclusions.push(type);\n }\n else {\n schema.$_terms._inclusions.push(type);\n }\n }\n\n for (const type of schema.$_terms.ordered) {\n internals.validateSingle(type, schema);\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.items) {\n obj = obj.items(...desc.items);\n }\n\n if (desc.ordered) {\n obj = obj.ordered(...desc.ordered);\n }\n\n return obj;\n }\n },\n\n messages: {\n 'array.base': '{{#label}} must be an array',\n 'array.excludes': '{{#label}} contains an excluded value',\n 'array.hasKnown': '{{#label}} does not contain at least one required match for type {:#patternLabel}',\n 'array.hasUnknown': '{{#label}} does not contain at least one required match',\n 'array.includes': '{{#label}} does not match any of the allowed types',\n 'array.includesRequiredBoth': '{{#label}} does not contain {{#knownMisses}} and {{#unknownMisses}} other required value(s)',\n 'array.includesRequiredKnowns': '{{#label}} does not contain {{#knownMisses}}',\n 'array.includesRequiredUnknowns': '{{#label}} does not contain {{#unknownMisses}} required value(s)',\n 'array.length': '{{#label}} must contain {{#limit}} items',\n 'array.max': '{{#label}} must contain less than or equal to {{#limit}} items',\n 'array.min': '{{#label}} must contain at least {{#limit}} items',\n 'array.orderedLength': '{{#label}} must contain at most {{#limit}} items',\n 'array.sort': '{{#label}} must be sorted in {#order} order by {{#by}}',\n 'array.sort.mismatching': '{{#label}} cannot be sorted due to mismatching types',\n 'array.sort.unsupported': '{{#label}} cannot be sorted due to unsupported type {#type}',\n 'array.sparse': '{{#label}} must not be a sparse array item',\n 'array.unique': '{{#label}} contains a duplicate value'\n }\n});\n\n\n// Helpers\n\ninternals.fillMissedErrors = function (schema, errors, requireds, value, state, prefs) {\n\n const knownMisses = [];\n let unknownMisses = 0;\n for (const required of requireds) {\n const label = required._flags.label;\n if (label) {\n knownMisses.push(label);\n }\n else {\n ++unknownMisses;\n }\n }\n\n if (knownMisses.length) {\n if (unknownMisses) {\n errors.push(schema.$_createError('array.includesRequiredBoth', value, { knownMisses, unknownMisses }, state, prefs));\n }\n else {\n errors.push(schema.$_createError('array.includesRequiredKnowns', value, { knownMisses }, state, prefs));\n }\n }\n else {\n errors.push(schema.$_createError('array.includesRequiredUnknowns', value, { unknownMisses }, state, prefs));\n }\n};\n\n\ninternals.fillOrderedErrors = function (schema, errors, ordereds, value, state, prefs) {\n\n const requiredOrdereds = [];\n\n for (const ordered of ordereds) {\n if (ordered._flags.presence === 'required') {\n requiredOrdereds.push(ordered);\n }\n }\n\n if (requiredOrdereds.length) {\n internals.fillMissedErrors(schema, errors, requiredOrdereds, value, state, prefs);\n }\n};\n\n\ninternals.fillDefault = function (ordereds, value, state, prefs) {\n\n const overrides = [];\n let trailingUndefined = true;\n\n for (let i = ordereds.length - 1; i >= 0; --i) {\n const ordered = ordereds[i];\n const ancestors = [value, ...state.ancestors];\n const override = ordered.$_validate(undefined, state.localize(state.path, ancestors, ordered), prefs).value;\n\n if (trailingUndefined) {\n if (override === undefined) {\n continue;\n }\n\n trailingUndefined = false;\n }\n\n overrides.unshift(override);\n }\n\n if (overrides.length) {\n value.push(...overrides);\n }\n};\n\n\ninternals.fastSplice = function (arr, i) {\n\n let pos = i;\n while (pos < arr.length) {\n arr[pos++] = arr[pos];\n }\n\n --arr.length;\n};\n\n\ninternals.validateSingle = function (type, obj) {\n\n if (type.type === 'array' ||\n type._flags._arrayItems) {\n\n assert(!obj._flags.single, 'Cannot specify array item with single rule enabled');\n obj.$_setFlag('_arrayItems', true, { clone: false });\n }\n};\n\n\ninternals.sort = function (schema, value, settings, state, prefs) {\n\n const order = settings.order === 'ascending' ? 1 : -1;\n const aFirst = -1 * order;\n const bFirst = order;\n\n const sort = (a, b) => {\n\n let compare = internals.compare(a, b, aFirst, bFirst);\n if (compare !== null) {\n return compare;\n }\n\n if (settings.by) {\n a = settings.by.resolve(a, state, prefs);\n b = settings.by.resolve(b, state, prefs);\n }\n\n compare = internals.compare(a, b, aFirst, bFirst);\n if (compare !== null) {\n return compare;\n }\n\n const type = typeof a;\n if (type !== typeof b) {\n throw schema.$_createError('array.sort.mismatching', value, null, state, prefs);\n }\n\n if (type !== 'number' &&\n type !== 'string') {\n\n throw schema.$_createError('array.sort.unsupported', value, { type }, state, prefs);\n }\n\n if (type === 'number') {\n return (a - b) * order;\n }\n\n return a < b ? aFirst : bFirst;\n };\n\n try {\n return { value: value.slice().sort(sort) };\n }\n catch (err) {\n return { errors: err };\n }\n};\n\n\ninternals.compare = function (a, b, aFirst, bFirst) {\n\n if (a === b) {\n return 0;\n }\n\n if (a === undefined) {\n return 1; // Always last regardless of sort order\n }\n\n if (b === undefined) {\n return -1; // Always last regardless of sort order\n }\n\n if (a === null) {\n return bFirst;\n }\n\n if (b === null) {\n return aFirst;\n }\n\n return null;\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Values = require('../values');\n\n\nconst internals = {};\n\n\ninternals.isBool = function (value) {\n\n return typeof value === 'boolean';\n};\n\n\nmodule.exports = Any.extend({\n\n type: 'boolean',\n\n flags: {\n\n sensitive: { default: false }\n },\n\n terms: {\n\n falsy: {\n init: null,\n manifest: 'values'\n },\n\n truthy: {\n init: null,\n manifest: 'values'\n }\n },\n\n coerce(value, { schema }) {\n\n if (typeof value === 'boolean') {\n return;\n }\n\n if (typeof value === 'string') {\n const trimmedValue = value.trim();\n const normalized = schema._flags.sensitive ? trimmedValue : trimmedValue.toLowerCase();\n value = normalized === 'true' ? true : (normalized === 'false' ? false : value);\n }\n\n if (typeof value !== 'boolean') {\n value = schema.$_terms.truthy && schema.$_terms.truthy.has(value, null, null, !schema._flags.sensitive) ||\n (schema.$_terms.falsy && schema.$_terms.falsy.has(value, null, null, !schema._flags.sensitive) ? false : value);\n }\n\n return { value };\n },\n\n validate(value, { error }) {\n\n if (typeof value !== 'boolean') {\n return { value, errors: error('boolean.base') };\n }\n },\n\n rules: {\n truthy: {\n method(...values) {\n\n Common.verifyFlat(values, 'truthy');\n\n const obj = this.clone();\n obj.$_terms.truthy = obj.$_terms.truthy || new Values();\n\n for (let i = 0; i < values.length; ++i) {\n const value = values[i];\n\n assert(value !== undefined, 'Cannot call truthy with undefined');\n obj.$_terms.truthy.add(value);\n }\n\n return obj;\n }\n },\n\n falsy: {\n method(...values) {\n\n Common.verifyFlat(values, 'falsy');\n\n const obj = this.clone();\n obj.$_terms.falsy = obj.$_terms.falsy || new Values();\n\n for (let i = 0; i < values.length; ++i) {\n const value = values[i];\n\n assert(value !== undefined, 'Cannot call falsy with undefined');\n obj.$_terms.falsy.add(value);\n }\n\n return obj;\n }\n },\n\n sensitive: {\n method(enabled = true) {\n\n return this.$_setFlag('sensitive', enabled);\n }\n }\n },\n\n cast: {\n number: {\n from: internals.isBool,\n to(value, helpers) {\n\n return value ? 1 : 0;\n }\n },\n string: {\n from: internals.isBool,\n to(value, helpers) {\n\n return value ? 'true' : 'false';\n }\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.truthy) {\n obj = obj.truthy(...desc.truthy);\n }\n\n if (desc.falsy) {\n obj = obj.falsy(...desc.falsy);\n }\n\n return obj;\n }\n },\n\n messages: {\n 'boolean.base': '{{#label}} must be a boolean'\n }\n});\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Template = require('../template');\n\n\nconst internals = {\n formats: ['iso', 'javascript', 'unix']\n};\n\n\ninternals.isDate = function (value) {\n\n return value instanceof Date;\n};\n\n\nmodule.exports = Any.extend({\n\n type: 'date',\n\n coerce: {\n from: ['number', 'string'],\n method(value, { schema }) {\n\n return { value: internals.parse(value, schema._flags.format) || value };\n }\n },\n\n validate(value, { schema, error, prefs }) {\n\n if (value instanceof Date &&\n !isNaN(value.getTime())) {\n\n return;\n }\n\n const format = schema._flags.format;\n\n if (!prefs.convert ||\n !format ||\n typeof value !== 'string') {\n\n return { value, errors: error('date.base') };\n }\n\n return { value, errors: error('date.format', { format }) };\n },\n\n jsonSchema(schema, res, mode, options) {\n\n res.type = 'string';\n res.format = 'date-time';\n\n return res;\n },\n\n rules: {\n\n compare: {\n method: false,\n validate(value, helpers, { date }, { name, operator, args }) {\n\n const to = date === 'now' ? Date.now() : date.getTime();\n if (Common.compare(value.getTime(), to, operator)) {\n return value;\n }\n\n return helpers.error('date.' + name, { limit: args.date, value });\n },\n args: [\n {\n name: 'date',\n ref: true,\n normalize: (date) => {\n\n return date === 'now' ? date : internals.parse(date);\n },\n assert: (date) => date !== null,\n message: 'must have a valid date format'\n }\n ]\n },\n\n format: {\n method(format) {\n\n assert(internals.formats.includes(format), 'Unknown date format', format);\n\n return this.$_setFlag('format', format);\n }\n },\n\n greater: {\n method(date) {\n\n return this.$_addRule({ name: 'greater', method: 'compare', args: { date }, operator: '>' });\n },\n jsonSchema(rule, res) {\n\n const date = rule.args.date;\n if (date instanceof Date) {\n res['x-constraint'] = { ...res['x-constraint'], greater: date.toISOString() };\n }\n\n return res;\n }\n },\n\n iso: {\n method() {\n\n return this.format('iso');\n }\n },\n\n less: {\n method(date) {\n\n return this.$_addRule({ name: 'less', method: 'compare', args: { date }, operator: '<' });\n },\n jsonSchema(rule, res) {\n\n const date = rule.args.date;\n if (date instanceof Date) {\n res['x-constraint'] = { ...res['x-constraint'], less: date.toISOString() };\n }\n\n return res;\n }\n },\n\n max: {\n method(date) {\n\n return this.$_addRule({ name: 'max', method: 'compare', args: { date }, operator: '<=' });\n },\n jsonSchema(rule, res) {\n\n const date = rule.args.date;\n if (date instanceof Date) {\n res['x-constraint'] = { ...res['x-constraint'], max: date.toISOString() };\n }\n\n return res;\n }\n },\n\n min: {\n method(date) {\n\n return this.$_addRule({ name: 'min', method: 'compare', args: { date }, operator: '>=' });\n },\n jsonSchema(rule, res) {\n\n const date = rule.args.date;\n if (date instanceof Date) {\n res['x-constraint'] = { ...res['x-constraint'], min: date.toISOString() };\n }\n\n return res;\n }\n },\n\n timestamp: {\n method(type = 'javascript') {\n\n assert(['javascript', 'unix'].includes(type), '\"type\" must be one of \"javascript, unix\"');\n\n return this.format(type);\n }\n }\n },\n\n cast: {\n number: {\n from: internals.isDate,\n to(value, helpers) {\n\n return value.getTime();\n }\n },\n string: {\n from: internals.isDate,\n to(value, { prefs }) {\n\n return Template.date(value, prefs);\n }\n }\n },\n\n messages: {\n 'date.base': '{{#label}} must be a valid date',\n 'date.format': '{{#label}} must be in {msg(\"date.format.\" + #format) || #format} format',\n 'date.greater': '{{#label}} must be greater than {{:#limit}}',\n 'date.less': '{{#label}} must be less than {{:#limit}}',\n 'date.max': '{{#label}} must be less than or equal to {{:#limit}}',\n 'date.min': '{{#label}} must be greater than or equal to {{:#limit}}',\n\n // Messages used in date.format\n\n 'date.format.iso': 'ISO 8601 date',\n 'date.format.javascript': 'timestamp or number of milliseconds',\n 'date.format.unix': 'timestamp or number of seconds'\n }\n});\n\n\n// Helpers\n\ninternals.parse = function (value, format) {\n\n if (value instanceof Date) {\n return value;\n }\n\n if (typeof value !== 'string' &&\n (isNaN(value) || !isFinite(value))) {\n\n return null;\n }\n\n if (/^\\s*$/.test(value)) {\n return null;\n }\n\n // ISO\n\n if (format === 'iso') {\n if (!Common.isIsoDate(value)) {\n return null;\n }\n\n return internals.date(value.toString());\n }\n\n // Normalize number string\n\n const original = value;\n if (typeof value === 'string' &&\n /^[+-]?\\d+(\\.\\d+)?$/.test(value)) {\n\n value = parseFloat(value);\n }\n\n // Timestamp\n\n if (format) {\n if (format === 'javascript') {\n return internals.date(1 * value); // Casting to number\n }\n\n if (format === 'unix') {\n return internals.date(1000 * value);\n }\n\n if (typeof original === 'string') {\n return null;\n }\n }\n\n // Plain\n\n return internals.date(value);\n};\n\n\ninternals.date = function (value) {\n\n const date = new Date(value);\n if (!isNaN(date.getTime())) {\n return date;\n }\n\n return null;\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\n\nconst internals = {};\n\n\nexports.Sorter = class {\n\n constructor() {\n\n this._items = [];\n this.nodes = [];\n }\n\n add(nodes, options) {\n\n options = options ?? {};\n\n // Validate rules\n\n const before = [].concat(options.before ?? []);\n const after = [].concat(options.after ?? []);\n const group = options.group ?? '?';\n const sort = options.sort ?? 0; // Used for merging only\n\n assert(!before.includes(group), `Item cannot come before itself: ${group}`);\n assert(!before.includes('?'), 'Item cannot come before unassociated items');\n assert(!after.includes(group), `Item cannot come after itself: ${group}`);\n assert(!after.includes('?'), 'Item cannot come after unassociated items');\n\n if (!Array.isArray(nodes)) {\n nodes = [nodes];\n }\n\n for (const node of nodes) {\n const item = {\n seq: this._items.length,\n sort,\n before,\n after,\n group,\n node\n };\n\n this._items.push(item);\n }\n\n // Insert event\n\n if (!options.manual) {\n const valid = this._sort();\n assert(valid, 'item', group !== '?' ? `added into group ${group}` : '', 'created a dependencies error');\n }\n\n return this.nodes;\n }\n\n merge(others) {\n\n if (!Array.isArray(others)) {\n others = [others];\n }\n\n for (const other of others) {\n if (other) {\n for (const item of other._items) {\n this._items.push(Object.assign({}, item)); // Shallow cloned\n }\n }\n }\n\n // Sort items\n\n this._items.sort(internals.mergeSort);\n for (let i = 0; i < this._items.length; ++i) {\n this._items[i].seq = i;\n }\n\n const valid = this._sort();\n assert(valid, 'merge created a dependencies error');\n\n return this.nodes;\n }\n\n sort() {\n\n const valid = this._sort();\n assert(valid, 'sort created a dependencies error');\n\n return this.nodes;\n }\n\n _sort() {\n\n // Construct graph\n\n const graph = {};\n const graphAfters = Object.create(null); // A prototype can bungle lookups w/ false positives\n const groups = Object.create(null);\n\n for (const item of this._items) {\n const seq = item.seq; // Unique across all items\n const group = item.group;\n\n // Determine Groups\n\n groups[group] = groups[group] ?? [];\n groups[group].push(seq);\n\n // Build intermediary graph using 'before'\n\n graph[seq] = item.before;\n\n // Build second intermediary graph with 'after'\n\n for (const after of item.after) {\n graphAfters[after] = graphAfters[after] ?? [];\n graphAfters[after].push(seq);\n }\n }\n\n // Expand intermediary graph\n\n for (const node in graph) {\n const expandedGroups = [];\n\n for (const graphNodeItem in graph[node]) {\n const group = graph[node][graphNodeItem];\n groups[group] = groups[group] ?? [];\n expandedGroups.push(...groups[group]);\n }\n\n graph[node] = expandedGroups;\n }\n\n // Merge intermediary graph using graphAfters into final graph\n\n for (const group in graphAfters) {\n if (groups[group]) {\n for (const node of groups[group]) {\n graph[node].push(...graphAfters[group]);\n }\n }\n }\n\n // Compile ancestors\n\n const ancestors = {};\n for (const node in graph) {\n const children = graph[node];\n for (const child of children) {\n ancestors[child] = ancestors[child] ?? [];\n ancestors[child].push(node);\n }\n }\n\n // Topo sort\n\n const visited = {};\n const sorted = [];\n\n for (let i = 0; i < this._items.length; ++i) { // Looping through item.seq values out of order\n let next = i;\n\n if (ancestors[i]) {\n next = null;\n for (let j = 0; j < this._items.length; ++j) { // As above, these are item.seq values\n if (visited[j] === true) {\n continue;\n }\n\n if (!ancestors[j]) {\n ancestors[j] = [];\n }\n\n const shouldSeeCount = ancestors[j].length;\n let seenCount = 0;\n for (let k = 0; k < shouldSeeCount; ++k) {\n if (visited[ancestors[j][k]]) {\n ++seenCount;\n }\n }\n\n if (seenCount === shouldSeeCount) {\n next = j;\n break;\n }\n }\n }\n\n if (next !== null) {\n visited[next] = true;\n sorted.push(next);\n }\n }\n\n if (sorted.length !== this._items.length) {\n return false;\n }\n\n const seqIndex = {};\n for (const item of this._items) {\n seqIndex[item.seq] = item;\n }\n\n this._items = [];\n this.nodes = [];\n\n for (const value of sorted) {\n const sortedItem = seqIndex[value];\n this.nodes.push(sortedItem.node);\n this._items.push(sortedItem);\n }\n\n return true;\n }\n};\n\n\ninternals.mergeSort = (a, b) => {\n\n return a.sort === b.sort ? 0 : (a.sort < b.sort ? -1 : 1);\n};\n","'use strict';\n\nconst { applyToDefaults, assert, clone: Clone } = require('@hapi/hoek');\nconst Topo = require('@hapi/topo');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Compile = require('../compile');\nconst Errors = require('../errors');\nconst Ref = require('../ref');\nconst Template = require('../template');\n\n\nconst internals = {\n renameDefaults: {\n alias: false, // Keep old value in place\n multiple: false, // Allow renaming multiple keys into the same target\n override: false // Overrides an existing key\n }\n};\n\n\nmodule.exports = Any.extend({\n\n type: '_keys',\n\n properties: {\n\n typeof: 'object'\n },\n\n flags: {\n\n unknown: { default: undefined }\n },\n\n terms: {\n\n dependencies: { init: null },\n keys: { init: null, manifest: { mapped: { from: 'schema', to: 'key' } } },\n patterns: { init: null },\n renames: { init: null }\n },\n\n args(schema, keys) {\n\n return schema.keys(keys);\n },\n\n jsonSchema(schema, res, mode, options) {\n\n res.type = 'object';\n\n // Map Joi keys to JSON Schema 'properties' and 'required'\n\n if (schema.$_terms.keys) {\n res.properties = {};\n\n const required = [];\n\n for (const child of schema.$_terms.keys) {\n const jsonSchema = child.schema.$_jsonSchema(mode, options);\n res.properties[child.key] = jsonSchema;\n if (child.schema._flags.presence === 'required' ||\n (mode === 'output' && child.schema._flags.default !== undefined)) {\n\n required.push(child.key);\n }\n }\n\n if (required.length) {\n res.required = required.sort();\n }\n }\n\n // Map Joi patterns to JSON Schema 'patternProperties' or 'additionalProperties'\n\n if (schema.$_terms.patterns) {\n const patternProperties = {};\n\n for (const pattern of schema.$_terms.patterns) {\n if (pattern.regex) {\n patternProperties[pattern.regex.source] = pattern.rule.$_jsonSchema(mode, options);\n }\n else {\n const isAny = pattern.schema.type === 'any';\n if (isAny) {\n res.additionalProperties = pattern.rule.$_jsonSchema(mode, options);\n }\n else {\n // Best effort for schema-based patterns that are not 'any'\n patternProperties['.*'] = pattern.rule.$_jsonSchema(mode, options);\n }\n }\n }\n\n if (Object.keys(patternProperties).length) {\n res.patternProperties = patternProperties;\n }\n }\n\n // Handle 'additionalProperties' based on unknown keys flag\n\n if (res.additionalProperties === undefined) {\n const additionalProperties = schema._flags.unknown === true || (schema._flags.unknown === undefined && !schema.$_terms.keys && !schema.$_terms.patterns && !schema._flags.only);\n if (additionalProperties === false) {\n res.additionalProperties = false;\n }\n }\n\n return res;\n },\n\n validate(value, { schema, error, state, prefs }) {\n\n if (!value ||\n typeof value !== schema.$_property('typeof') ||\n Array.isArray(value)) {\n\n return { value, errors: error('object.base', { type: schema.$_property('typeof') }) };\n }\n\n // Skip if there are no other rules to test\n\n if (!schema.$_terms.renames &&\n !schema.$_terms.dependencies &&\n !schema.$_terms.keys && // null allows any keys\n !schema.$_terms.patterns &&\n !schema.$_terms.externals) {\n\n return;\n }\n\n // Shallow clone value\n\n value = internals.clone(value, prefs);\n const errors = [];\n\n // Rename keys\n\n if (schema.$_terms.renames &&\n !internals.rename(schema, value, state, prefs, errors)) {\n\n return { value, errors };\n }\n\n // Anything allowed\n\n if (!schema.$_terms.keys && // null allows any keys\n !schema.$_terms.patterns &&\n !schema.$_terms.dependencies) {\n\n return { value, errors };\n }\n\n // Defined keys\n\n const unprocessed = new Set(Object.keys(value));\n\n if (schema.$_terms.keys) {\n const ancestors = [value, ...state.ancestors];\n\n for (const child of schema.$_terms.keys) {\n const key = child.key;\n const item = value[key];\n\n unprocessed.delete(key);\n\n const localState = state.localize([...state.path, key], ancestors, child);\n const result = child.schema.$_validate(item, localState, prefs);\n\n if (result.errors) {\n if (prefs.abortEarly) {\n return { value, errors: result.errors };\n }\n\n if (result.value !== undefined) {\n value[key] = result.value;\n }\n\n errors.push(...result.errors);\n }\n else if (child.schema._flags.result === 'strip' ||\n result.value === undefined && item !== undefined) {\n\n delete value[key];\n }\n else if (result.value !== undefined) {\n value[key] = result.value;\n }\n }\n }\n\n // Unknown keys\n\n if (unprocessed.size ||\n schema._flags._hasPatternMatch) {\n\n const early = internals.unknown(schema, value, unprocessed, errors, state, prefs);\n if (early) {\n return early;\n }\n }\n\n // Validate dependencies\n\n if (schema.$_terms.dependencies) {\n for (const dep of schema.$_terms.dependencies) {\n if (\n dep.key !== null &&\n internals.isPresent(dep.options)(dep.key.resolve(value, state, prefs, null, { shadow: false })) === false\n ) {\n\n continue;\n }\n\n const failed = internals.dependencies[dep.rel](schema, dep, value, state, prefs);\n if (failed) {\n const report = schema.$_createError(failed.code, value, failed.context, state, prefs);\n if (prefs.abortEarly) {\n return { value, errors: report };\n }\n\n errors.push(report);\n }\n }\n }\n\n return { value, errors };\n },\n\n rules: {\n\n and: {\n method(...peers /*, [options] */) {\n\n Common.verifyFlat(peers, 'and');\n\n return internals.dependency(this, 'and', null, peers);\n }\n },\n\n append: {\n method(schema) {\n\n if (schema === null ||\n schema === undefined ||\n Object.keys(schema).length === 0) {\n\n return this;\n }\n\n return this.keys(schema);\n }\n },\n\n assert: {\n method(subject, schema, message) {\n\n if (!Template.isTemplate(subject)) {\n subject = Compile.ref(subject);\n }\n\n assert(message === undefined || typeof message === 'string', 'Message must be a string');\n\n schema = this.$_compile(schema, { appendPath: true });\n\n const obj = this.$_addRule({ name: 'assert', args: { subject, schema, message } });\n obj.$_mutateRegister(subject);\n obj.$_mutateRegister(schema);\n return obj;\n },\n validate(value, { error, prefs, state }, { subject, schema, message }) {\n\n const about = subject.resolve(value, state, prefs);\n const path = Ref.isRef(subject) ? subject.absolute(state) : [];\n if (schema.$_match(about, state.localize(path, [value, ...state.ancestors], schema), prefs)) {\n return value;\n }\n\n return error('object.assert', { subject, message });\n },\n args: ['subject', 'schema', 'message'],\n multi: true\n },\n\n instance: {\n method(constructor, name) {\n\n assert(typeof constructor === 'function', 'constructor must be a function');\n\n name = name || constructor.name;\n\n return this.$_addRule({ name: 'instance', args: { constructor, name } });\n },\n validate(value, helpers, { constructor, name }) {\n\n if (value instanceof constructor) {\n return value;\n }\n\n return helpers.error('object.instance', { type: name, value });\n },\n args: ['constructor', 'name']\n },\n\n keys: {\n method(schema) {\n\n assert(schema === undefined || typeof schema === 'object', 'Object schema must be a valid object');\n assert(!Common.isSchema(schema), 'Object schema cannot be a joi schema');\n\n const obj = this.clone();\n\n if (!schema) { // Allow all\n obj.$_terms.keys = null;\n }\n else if (!Object.keys(schema).length) { // Allow none\n obj.$_terms.keys = new internals.Keys();\n }\n else {\n obj.$_terms.keys = obj.$_terms.keys ? obj.$_terms.keys.filter((child) => !schema.hasOwnProperty(child.key)) : new internals.Keys();\n for (const key in schema) {\n Common.tryWithPath(() => obj.$_terms.keys.push({ key, schema: this.$_compile(schema[key]) }), key);\n }\n }\n\n return obj.$_mutateRebuild();\n }\n },\n\n length: {\n method(limit) {\n\n return this.$_addRule({ name: 'length', args: { limit }, operator: '=' });\n },\n validate(value, helpers, { limit }, { name, operator, args }) {\n\n if (Common.compare(Object.keys(value).length, limit, operator)) {\n return value;\n }\n\n return helpers.error('object.' + name, { limit: args.limit, value });\n },\n jsonSchema(rule, res) {\n\n res.minProperties = rule.args.limit;\n res.maxProperties = rule.args.limit;\n return res;\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: Common.limit,\n message: 'must be a positive integer'\n }\n ]\n },\n\n max: {\n method(limit) {\n\n return this.$_addRule({ name: 'max', method: 'length', args: { limit }, operator: '<=' });\n },\n jsonSchema(rule, res) {\n\n res.maxProperties = rule.args.limit;\n return res;\n }\n },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'length', args: { limit }, operator: '>=' });\n },\n jsonSchema(rule, res) {\n\n res.minProperties = rule.args.limit;\n return res;\n }\n },\n\n nand: {\n method(...peers /*, [options] */) {\n\n Common.verifyFlat(peers, 'nand');\n\n return internals.dependency(this, 'nand', null, peers);\n }\n },\n\n or: {\n method(...peers /*, [options] */) {\n\n Common.verifyFlat(peers, 'or');\n\n return internals.dependency(this, 'or', null, peers);\n }\n },\n\n oxor: {\n method(...peers /*, [options] */) {\n\n return internals.dependency(this, 'oxor', null, peers);\n }\n },\n\n pattern: {\n method(pattern, schema, options = {}) {\n\n const isRegExp = pattern instanceof RegExp;\n if (!isRegExp) {\n pattern = this.$_compile(pattern, { appendPath: true });\n }\n\n assert(schema !== undefined, 'Invalid rule');\n Common.assertOptions(options, ['fallthrough', 'matches']);\n\n if (isRegExp) {\n assert(!pattern.flags.includes('g') && !pattern.flags.includes('y'), 'pattern should not use global or sticky mode');\n }\n\n schema = this.$_compile(schema, { appendPath: true });\n\n const obj = this.clone();\n obj.$_terms.patterns = obj.$_terms.patterns || [];\n const config = { [isRegExp ? 'regex' : 'schema']: pattern, rule: schema };\n if (options.matches) {\n config.matches = this.$_compile(options.matches);\n if (config.matches.type !== 'array') {\n config.matches = config.matches.$_root.array().items(config.matches);\n }\n\n obj.$_mutateRegister(config.matches);\n obj.$_setFlag('_hasPatternMatch', true, { clone: false });\n }\n\n if (options.fallthrough) {\n config.fallthrough = true;\n }\n\n obj.$_terms.patterns.push(config);\n obj.$_mutateRegister(schema);\n return obj;\n }\n },\n\n ref: {\n method() {\n\n return this.$_addRule('ref');\n },\n validate(value, helpers) {\n\n if (Ref.isRef(value)) {\n return value;\n }\n\n return helpers.error('object.refType', { value });\n }\n },\n\n regex: {\n method() {\n\n return this.$_addRule('regex');\n },\n validate(value, helpers) {\n\n if (value instanceof RegExp) {\n return value;\n }\n\n return helpers.error('object.regex', { value });\n }\n },\n\n rename: {\n method(from, to, options = {}) {\n\n assert(typeof from === 'string' || from instanceof RegExp, 'Rename missing the from argument');\n assert(typeof to === 'string' || to instanceof Template, 'Invalid rename to argument');\n assert(to !== from, 'Cannot rename key to same name:', from);\n\n Common.assertOptions(options, ['alias', 'ignoreUndefined', 'override', 'multiple']);\n\n const obj = this.clone();\n\n obj.$_terms.renames = obj.$_terms.renames || [];\n for (const rename of obj.$_terms.renames) {\n assert(rename.from !== from, 'Cannot rename the same key multiple times');\n }\n\n if (to instanceof Template) {\n obj.$_mutateRegister(to);\n }\n\n obj.$_terms.renames.push({\n from,\n to,\n options: applyToDefaults(internals.renameDefaults, options)\n });\n\n return obj;\n }\n },\n\n schema: {\n method(type = 'any') {\n\n return this.$_addRule({ name: 'schema', args: { type } });\n },\n validate(value, helpers, { type }) {\n\n if (Common.isSchema(value) &&\n (type === 'any' || value.type === type)) {\n\n return value;\n }\n\n return helpers.error('object.schema', { type });\n }\n },\n\n unknown: {\n method(allow) {\n\n return this.$_setFlag('unknown', allow !== false);\n }\n },\n\n with: {\n method(key, peers, options = {}) {\n\n return internals.dependency(this, 'with', key, peers, options);\n }\n },\n\n without: {\n method(key, peers, options = {}) {\n\n return internals.dependency(this, 'without', key, peers, options);\n }\n },\n\n xor: {\n method(...peers /*, [options] */) {\n\n Common.verifyFlat(peers, 'xor');\n\n return internals.dependency(this, 'xor', null, peers);\n }\n }\n },\n\n overrides: {\n\n default(value, options) {\n\n if (value === undefined) {\n value = Common.symbols.deepDefault;\n }\n\n return this.$_parent('default', value, options);\n },\n\n isAsync() {\n\n if (this.$_terms.externals?.length) {\n return true;\n }\n\n if (this.$_terms.keys?.length) {\n for (const key of this.$_terms.keys) {\n if (key.schema.isAsync()) {\n return true;\n }\n }\n }\n\n if (this.$_terms.patterns?.length) {\n for (const pattern of this.$_terms.patterns) {\n if (pattern.rule.isAsync()) {\n return true;\n }\n }\n }\n\n return false;\n }\n },\n\n rebuild(schema) {\n\n if (schema.$_terms.keys) {\n const topo = new Topo.Sorter();\n for (const child of schema.$_terms.keys) {\n Common.tryWithPath(() => topo.add(child, { after: child.schema.$_rootReferences(), group: child.key }), child.key);\n }\n\n schema.$_terms.keys = new internals.Keys(...topo.nodes);\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.keys) {\n obj = obj.keys(desc.keys);\n }\n\n if (desc.dependencies) {\n for (const { rel, key = null, peers, options } of desc.dependencies) {\n obj = internals.dependency(obj, rel, key, peers, options);\n }\n }\n\n if (desc.patterns) {\n for (const { regex, schema, rule, fallthrough, matches } of desc.patterns) {\n obj = obj.pattern(regex || schema, rule, { fallthrough, matches });\n }\n }\n\n if (desc.renames) {\n for (const { from, to, options } of desc.renames) {\n obj = obj.rename(from, to, options);\n }\n }\n\n return obj;\n }\n },\n\n messages: {\n 'object.and': '{{#label}} contains {{#presentWithLabels}} without its required peers {{#missingWithLabels}}',\n 'object.assert': '{{#label}} is invalid because {if(#subject.key, `\"` + #subject.key + `\" failed to ` + (#message || \"pass the assertion test\"), #message || \"the assertion failed\")}',\n 'object.base': '{{#label}} must be of type {{#type}}',\n 'object.instance': '{{#label}} must be an instance of {{:#type}}',\n 'object.length': '{{#label}} must have {{#limit}} key{if(#limit == 1, \"\", \"s\")}',\n 'object.max': '{{#label}} must have less than or equal to {{#limit}} key{if(#limit == 1, \"\", \"s\")}',\n 'object.min': '{{#label}} must have at least {{#limit}} key{if(#limit == 1, \"\", \"s\")}',\n 'object.missing': '{{#label}} must contain at least one of {{#peersWithLabels}}',\n 'object.nand': '{{:#mainWithLabel}} must not exist simultaneously with {{#peersWithLabels}}',\n 'object.oxor': '{{#label}} contains a conflict between optional exclusive peers {{#peersWithLabels}}',\n 'object.pattern.match': '{{#label}} keys failed to match pattern requirements',\n 'object.refType': '{{#label}} must be a Joi reference',\n 'object.regex': '{{#label}} must be a RegExp object',\n 'object.rename.multiple': '{{#label}} cannot rename {{:#from}} because multiple renames are disabled and another key was already renamed to {{:#to}}',\n 'object.rename.override': '{{#label}} cannot rename {{:#from}} because override is disabled and target {{:#to}} exists',\n 'object.schema': '{{#label}} must be a Joi schema of {{#type}} type',\n 'object.unknown': '{{#label}} is not allowed',\n 'object.with': '{{:#mainWithLabel}} missing required peer {{:#peerWithLabel}}',\n 'object.without': '{{:#mainWithLabel}} conflict with forbidden peer {{:#peerWithLabel}}',\n 'object.xor': '{{#label}} contains a conflict between exclusive peers {{#peersWithLabels}}'\n }\n});\n\n\n// Helpers\n\ninternals.clone = function (value, prefs) {\n\n // Object\n\n if (typeof value === 'object') {\n if (prefs.nonEnumerables) {\n return Clone(value, { shallow: true });\n }\n\n const clone = Object.create(Object.getPrototypeOf(value));\n Object.assign(clone, value);\n return clone;\n }\n\n // Function\n\n const clone = function (...args) {\n\n return value.apply(this, args);\n };\n\n clone.prototype = Clone(value.prototype);\n Object.defineProperty(clone, 'name', { value: value.name, writable: false });\n Object.defineProperty(clone, 'length', { value: value.length, writable: false });\n Object.assign(clone, value);\n return clone;\n};\n\n\ninternals.dependency = function (schema, rel, key, peers, options) {\n\n assert(key === null || typeof key === 'string', rel, 'key must be a strings');\n\n // Extract options from peers array\n\n if (!options) {\n options = peers.length > 1 && typeof peers[peers.length - 1] === 'object' ? peers.pop() : {};\n }\n\n Common.assertOptions(options, ['separator', 'isPresent']);\n\n peers = [].concat(peers);\n\n // Cast peer paths\n\n const separator = Common.default(options.separator, '.');\n const paths = [];\n for (const peer of peers) {\n assert(typeof peer === 'string', rel, 'peers must be strings');\n paths.push(Compile.ref(peer, { separator, ancestor: 0, prefix: false }));\n }\n\n // Cast key\n\n if (key !== null) {\n key = Compile.ref(key, { separator, ancestor: 0, prefix: false });\n }\n\n // Add rule\n\n const obj = schema.clone();\n obj.$_terms.dependencies = obj.$_terms.dependencies || [];\n obj.$_terms.dependencies.push(new internals.Dependency(rel, key, paths, peers, options));\n return obj;\n};\n\n\ninternals.dependencies = {\n\n and(schema, dep, value, state, prefs) {\n\n const missing = [];\n const present = [];\n const count = dep.peers.length;\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false })) === false) {\n missing.push(peer.key);\n }\n else {\n present.push(peer.key);\n }\n }\n\n if (missing.length !== count &&\n present.length !== count) {\n\n return {\n code: 'object.and',\n context: {\n present,\n presentWithLabels: internals.keysToLabels(schema, present),\n missing,\n missingWithLabels: internals.keysToLabels(schema, missing)\n }\n };\n }\n },\n\n nand(schema, dep, value, state, prefs) {\n\n const present = [];\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false }))) {\n present.push(peer.key);\n }\n }\n\n if (present.length !== dep.peers.length) {\n return;\n }\n\n const main = dep.paths[0];\n const values = dep.paths.slice(1);\n return {\n code: 'object.nand',\n context: {\n main,\n mainWithLabel: internals.keysToLabels(schema, main),\n peers: values,\n peersWithLabels: internals.keysToLabels(schema, values)\n }\n };\n },\n\n or(schema, dep, value, state, prefs) {\n\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false }))) {\n return;\n }\n }\n\n return {\n code: 'object.missing',\n context: {\n peers: dep.paths,\n peersWithLabels: internals.keysToLabels(schema, dep.paths)\n }\n };\n },\n\n oxor(schema, dep, value, state, prefs) {\n\n const present = [];\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false }))) {\n present.push(peer.key);\n }\n }\n\n if (!present.length ||\n present.length === 1) {\n\n return;\n }\n\n const context = { peers: dep.paths, peersWithLabels: internals.keysToLabels(schema, dep.paths) };\n context.present = present;\n context.presentWithLabels = internals.keysToLabels(schema, present);\n return { code: 'object.oxor', context };\n },\n\n with(schema, dep, value, state, prefs) {\n\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false })) === false) {\n return {\n code: 'object.with',\n context: {\n main: dep.key.key,\n mainWithLabel: internals.keysToLabels(schema, dep.key.key),\n peer: peer.key,\n peerWithLabel: internals.keysToLabels(schema, peer.key)\n }\n };\n }\n }\n },\n\n without(schema, dep, value, state, prefs) {\n\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false }))) {\n return {\n code: 'object.without',\n context: {\n main: dep.key.key,\n mainWithLabel: internals.keysToLabels(schema, dep.key.key),\n peer: peer.key,\n peerWithLabel: internals.keysToLabels(schema, peer.key)\n }\n };\n }\n }\n },\n\n xor(schema, dep, value, state, prefs) {\n\n const present = [];\n const isPresent = internals.isPresent(dep.options);\n for (const peer of dep.peers) {\n if (isPresent(peer.resolve(value, state, prefs, null, { shadow: false }))) {\n present.push(peer.key);\n }\n }\n\n if (present.length === 1) {\n return;\n }\n\n const context = { peers: dep.paths, peersWithLabels: internals.keysToLabels(schema, dep.paths) };\n if (present.length === 0) {\n return { code: 'object.missing', context };\n }\n\n context.present = present;\n context.presentWithLabels = internals.keysToLabels(schema, present);\n return { code: 'object.xor', context };\n }\n};\n\n\ninternals.keysToLabels = function (schema, keys) {\n\n if (Array.isArray(keys)) {\n return keys.map((key) => schema.$_mapLabels(key));\n }\n\n return schema.$_mapLabels(keys);\n};\n\n\ninternals.isPresent = function (options) {\n\n return typeof options.isPresent === 'function' ? options.isPresent : (resolved) => resolved !== undefined;\n};\n\n\ninternals.rename = function (schema, value, state, prefs, errors) {\n\n const renamed = {};\n for (const rename of schema.$_terms.renames) {\n const matches = [];\n const pattern = typeof rename.from !== 'string';\n\n if (!pattern) {\n if (Object.prototype.hasOwnProperty.call(value, rename.from) &&\n (value[rename.from] !== undefined || !rename.options.ignoreUndefined)) {\n\n matches.push(rename);\n }\n }\n else {\n for (const from in value) {\n if (value[from] === undefined &&\n rename.options.ignoreUndefined) {\n\n continue;\n }\n\n if (from === rename.to) {\n continue;\n }\n\n const match = rename.from.exec(from);\n if (!match) {\n continue;\n }\n\n matches.push({ from, to: rename.to, match });\n }\n }\n\n for (const match of matches) {\n const from = match.from;\n let to = match.to;\n if (to instanceof Template) {\n to = to.render(value, state, prefs, match.match);\n }\n\n if (from === to) {\n continue;\n }\n\n if (!rename.options.multiple &&\n renamed[to]) {\n\n errors.push(schema.$_createError('object.rename.multiple', value, { from, to, pattern }, state, prefs));\n if (prefs.abortEarly) {\n return false;\n }\n }\n\n if (Object.prototype.hasOwnProperty.call(value, to) &&\n !rename.options.override &&\n !renamed[to]) {\n\n errors.push(schema.$_createError('object.rename.override', value, { from, to, pattern }, state, prefs));\n if (prefs.abortEarly) {\n return false;\n }\n }\n\n if (value[from] === undefined) {\n delete value[to];\n }\n else {\n value[to] = value[from];\n }\n\n renamed[to] = true;\n\n if (!rename.options.alias) {\n delete value[from];\n }\n }\n }\n\n return true;\n};\n\n\ninternals.unknown = function (schema, value, unprocessed, errors, state, prefs) {\n\n if (schema.$_terms.patterns) {\n let hasMatches = false;\n const matches = schema.$_terms.patterns.map((pattern) => {\n\n if (pattern.matches) {\n hasMatches = true;\n return [];\n }\n });\n\n const ancestors = [value, ...state.ancestors];\n\n for (const key of unprocessed) {\n const item = value[key];\n const path = [...state.path, key];\n\n for (let i = 0; i < schema.$_terms.patterns.length; ++i) {\n const pattern = schema.$_terms.patterns[i];\n if (pattern.regex) {\n const match = pattern.regex.test(key);\n state.mainstay.tracer.debug(state, 'rule', `pattern.${i}`, match ? 'pass' : 'error');\n if (!match) {\n continue;\n }\n }\n else {\n if (!pattern.schema.$_match(key, state.nest(pattern.schema, `pattern.${i}`), prefs)) {\n continue;\n }\n }\n\n unprocessed.delete(key);\n\n const localState = state.localize(path, ancestors, { schema: pattern.rule, key });\n const result = pattern.rule.$_validate(item, localState, prefs);\n if (result.errors) {\n if (prefs.abortEarly) {\n return { value, errors: result.errors };\n }\n\n errors.push(...result.errors);\n }\n\n if (pattern.matches) {\n matches[i].push(key);\n }\n\n value[key] = result.value;\n if (!pattern.fallthrough) {\n break;\n }\n }\n }\n\n // Validate pattern matches rules\n\n if (hasMatches) {\n for (let i = 0; i < matches.length; ++i) {\n const match = matches[i];\n if (!match) {\n continue;\n }\n\n const stpm = schema.$_terms.patterns[i].matches;\n const localState = state.localize(state.path, ancestors, stpm);\n const result = stpm.$_validate(match, localState, prefs);\n if (result.errors) {\n const details = Errors.details(result.errors, { override: false });\n details.matches = match;\n const report = schema.$_createError('object.pattern.match', value, details, state, prefs);\n if (prefs.abortEarly) {\n return { value, errors: report };\n }\n\n errors.push(report);\n }\n }\n }\n }\n\n if (!unprocessed.size ||\n !schema.$_terms.keys && !schema.$_terms.patterns) { // If no keys or patterns specified, unknown keys allowed\n\n return;\n }\n\n if (prefs.stripUnknown && typeof schema._flags.unknown === 'undefined' ||\n prefs.skipFunctions) {\n\n const stripUnknown = prefs.stripUnknown ? (prefs.stripUnknown === true ? true : !!prefs.stripUnknown.objects) : false;\n\n for (const key of unprocessed) {\n if (stripUnknown) {\n delete value[key];\n unprocessed.delete(key);\n }\n else if (typeof value[key] === 'function') {\n unprocessed.delete(key);\n }\n }\n }\n\n const forbidUnknown = !Common.default(schema._flags.unknown, prefs.allowUnknown);\n if (forbidUnknown) {\n for (const unprocessedKey of unprocessed) {\n const localState = state.localize([...state.path, unprocessedKey], []);\n const report = schema.$_createError('object.unknown', value[unprocessedKey], { child: unprocessedKey }, localState, prefs, { flags: false });\n if (prefs.abortEarly) {\n return { value, errors: report };\n }\n\n errors.push(report);\n }\n }\n};\n\n\ninternals.Dependency = class {\n\n constructor(rel, key, peers, paths, options) {\n\n this.rel = rel;\n this.key = key;\n this.peers = peers;\n this.paths = paths;\n this.options = options;\n }\n\n describe() {\n\n const desc = {\n rel: this.rel,\n peers: this.paths\n };\n\n if (this.key !== null) {\n desc.key = this.key.key;\n }\n\n if (this.peers[0].separator !== '.') {\n desc.options = { ...desc.options, separator: this.peers[0].separator };\n }\n\n if (this.options.isPresent) {\n desc.options = { ...desc.options, isPresent: this.options.isPresent };\n }\n\n return desc;\n }\n};\n\n\ninternals.Keys = class extends Array {\n\n concat(source) {\n\n const result = this.slice();\n\n const keys = new Map();\n for (let i = 0; i < result.length; ++i) {\n keys.set(result[i].key, i);\n }\n\n for (const item of source) {\n const key = item.key;\n const pos = keys.get(key);\n if (pos !== undefined) {\n result[pos] = { key, schema: result[pos].schema.concat(item.schema) };\n }\n else {\n result.push(item);\n }\n }\n\n return result;\n }\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Keys = require('./keys');\n\n\nconst internals = {};\n\n\nmodule.exports = Keys.extend({\n\n type: 'function',\n\n properties: {\n typeof: 'function'\n },\n\n rules: {\n arity: {\n method(n) {\n\n assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');\n\n return this.$_addRule({ name: 'arity', args: { n } });\n },\n validate(value, helpers, { n }) {\n\n if (value.length === n) {\n return value;\n }\n\n return helpers.error('function.arity', { n });\n }\n },\n\n class: {\n method() {\n\n return this.$_addRule('class');\n },\n validate(value, helpers) {\n\n if ((/^\\s*class\\s/).test(value.toString())) {\n return value;\n }\n\n return helpers.error('function.class', { value });\n }\n },\n\n minArity: {\n method(n) {\n\n assert(Number.isSafeInteger(n) && n > 0, 'n must be a strict positive integer');\n\n return this.$_addRule({ name: 'minArity', args: { n } });\n },\n validate(value, helpers, { n }) {\n\n if (value.length >= n) {\n return value;\n }\n\n return helpers.error('function.minArity', { n });\n }\n },\n\n maxArity: {\n method(n) {\n\n assert(Number.isSafeInteger(n) && n >= 0, 'n must be a positive integer');\n\n return this.$_addRule({ name: 'maxArity', args: { n } });\n },\n validate(value, helpers, { n }) {\n\n if (value.length <= n) {\n return value;\n }\n\n return helpers.error('function.maxArity', { n });\n }\n }\n },\n\n messages: {\n 'function.arity': '{{#label}} must have an arity of {{#n}}',\n 'function.class': '{{#label}} must be a class',\n 'function.maxArity': '{{#label}} must have an arity lesser or equal to {{#n}}',\n 'function.minArity': '{{#label}} must have an arity greater or equal to {{#n}}'\n }\n});\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Compile = require('../compile');\nconst Errors = require('../errors');\n\n\nconst internals = {};\n\n\nmodule.exports = Any.extend({\n\n type: 'link',\n\n properties: {\n schemaChain: true\n },\n\n terms: {\n\n link: { init: null, manifest: 'single', register: false }\n },\n\n args(schema, ref) {\n\n return schema.ref(ref);\n },\n\n jsonSchema(schema, res, mode, options) {\n\n if (!schema.$_terms.link) {\n return res;\n }\n\n const { ref } = schema.$_terms.link[0];\n\n if (ref.ancestor === 'root' || ref.ancestor > 0) {\n res.$ref = `#/${ref.path.map((p) => `properties/${p}`).join('/')}`;\n return res;\n }\n\n if (ref.path.length === 1) {\n res.$ref = `#/$defs/${ref.path[0]}`;\n }\n else {\n res.$ref = `#/${ref.path.slice(1).map((p) => `properties/${p}`).join('/')}`;\n }\n\n return res;\n },\n\n validate(value, { schema, state, prefs, error }) {\n\n assert(schema.$_terms.link, 'Uninitialized link schema');\n\n const limit = schema._flags.maxRecursion;\n if (limit !== undefined &&\n state.schemas.filter((entry) => entry.schema === schema).length > limit) {\n\n return { value, errors: error('link.maxRecursion', { limit }) };\n }\n\n const linked = internals.generate(schema, value, state, prefs);\n const ref = schema.$_terms.link[0].ref;\n\n try {\n return linked.$_validate(value, state.nest(linked, `link:${ref.display}:${linked.type}`), prefs);\n }\n catch (err) {\n /* $lab:coverage:off$ */\n if (!(err instanceof RangeError)) {\n throw err;\n }\n /* $lab:coverage:on$ */\n\n return { value, errors: error('link.depth') };\n }\n },\n\n generate(schema, value, state, prefs) {\n\n return internals.generate(schema, value, state, prefs);\n },\n\n rules: {\n\n ref: {\n method(ref) {\n\n assert(!this.$_terms.link, 'Cannot reinitialize schema');\n\n ref = Compile.ref(ref);\n\n assert(ref.type === 'value' || ref.type === 'local', 'Invalid reference type:', ref.type);\n assert(ref.type === 'local' || ref.ancestor === 'root' || ref.ancestor > 0, 'Link cannot reference itself');\n\n const obj = this.clone();\n obj.$_terms.link = [{ ref }];\n return obj;\n }\n },\n\n relative: {\n method(enabled = true) {\n\n return this.$_setFlag('relative', enabled);\n }\n },\n\n maxRecursion: {\n method(limit) {\n\n assert(Number.isSafeInteger(limit) && limit >= 1, 'limit must be a positive integer');\n\n return this.$_setFlag('maxRecursion', limit);\n }\n }\n },\n\n messages: {\n 'link.depth': '{{#label}} exceeds maximum recursion depth supported by the runtime',\n 'link.maxRecursion': '{{#label}} exceeds maximum recursion depth of {{#limit}}'\n },\n\n overrides: {\n\n concat(source) {\n\n assert(this.$_terms.link, 'Uninitialized link schema');\n assert(Common.isSchema(source), 'Invalid schema object');\n assert(source.type !== 'link', 'Cannot merge type link with another link');\n\n const obj = this.clone();\n\n if (!obj.$_terms.whens) {\n obj.$_terms.whens = [];\n }\n\n obj.$_terms.whens.push({ concat: source });\n return obj.$_mutateRebuild();\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n assert(desc.link, 'Invalid link description missing link');\n return obj.ref(desc.link);\n }\n }\n});\n\n\n// Helpers\n\ninternals.generate = function (schema, value, state, prefs) {\n\n let linked = state.mainstay.links.get(schema);\n if (linked) {\n return linked._generate(value, state, prefs).schema;\n }\n\n const ref = schema.$_terms.link[0].ref;\n const { perspective, path } = internals.perspective(ref, state);\n internals.assert(perspective, 'which is outside of schema boundaries', ref, schema, state, prefs);\n\n try {\n linked = path.length ? perspective.$_reach(path) : perspective;\n }\n catch {\n internals.assert(false, 'to non-existing schema', ref, schema, state, prefs);\n }\n\n internals.assert(linked.type !== 'link', 'which is another link', ref, schema, state, prefs);\n\n if (!schema._flags.relative) {\n state.mainstay.links.set(schema, linked);\n }\n\n return linked._generate(value, state, prefs).schema;\n};\n\n\ninternals.perspective = function (ref, state) {\n\n if (ref.type === 'local') {\n for (const { schema, key } of state.schemas) { // From parent to root\n const id = schema._flags.id || key;\n if (id === ref.path[0]) {\n return { perspective: schema, path: ref.path.slice(1) };\n }\n\n if (schema.$_terms.shared) {\n for (const shared of schema.$_terms.shared) {\n if (shared._flags.id === ref.path[0]) {\n return { perspective: shared, path: ref.path.slice(1) };\n }\n }\n }\n }\n\n return { perspective: null, path: null };\n }\n\n if (ref.ancestor === 'root') {\n return { perspective: state.schemas[state.schemas.length - 1].schema, path: ref.path };\n }\n\n return { perspective: state.schemas[ref.ancestor] && state.schemas[ref.ancestor].schema, path: ref.path };\n};\n\n\ninternals.assert = function (condition, message, ref, schema, state, prefs) {\n\n if (condition) { // Manual check to avoid generating error message on success\n return;\n }\n\n assert(false, `\"${Errors.label(schema._flags, state, prefs)}\" contains link reference \"${ref.display}\" ${message}`);\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Any = require('./any');\nconst Common = require('../common');\n\n\nconst internals = {\n numberRx: /^\\s*[+-]?(?:(?:\\d+(?:\\.\\d*)?)|(?:\\.\\d+))(?:e([+-]?\\d+))?\\s*$/i,\n precisionRx: /(?:\\.(\\d+))?(?:[eE]([+-]?\\d+))?$/,\n exponentialPartRegex: /[eE][+-]?\\d+$/,\n leadingSignAndZerosRegex: /^[+-]?(0*)?/,\n dotRegex: /\\./,\n trailingZerosRegex: /0+$/,\n decimalPlaces(value) {\n\n const str = value.toString();\n const dindex = str.indexOf('.');\n const eindex = str.indexOf('e');\n return (\n (dindex < 0 ? 0 : (eindex < 0 ? str.length : eindex) - dindex - 1) +\n (eindex < 0 ? 0 : Math.max(0, -parseInt(str.slice(eindex + 1))))\n );\n }\n};\n\n\nmodule.exports = Any.extend({\n\n type: 'number',\n\n flags: {\n\n unsafe: { default: false }\n },\n\n coerce: {\n from: 'string',\n method(value, { schema, error }) {\n\n const matches = value.match(internals.numberRx);\n if (!matches) {\n return;\n }\n\n value = value.trim();\n const result = { value: parseFloat(value) };\n\n if (result.value === 0) {\n result.value = 0; // -0\n }\n\n if (!schema._flags.unsafe) {\n if (value.match(/e/i)) {\n if (internals.extractSignificantDigits(value) !== internals.extractSignificantDigits(String(result.value))) {\n result.errors = error('number.unsafe');\n return result;\n }\n }\n else {\n const string = result.value.toString();\n if (string.match(/e/i)) {\n return result;\n }\n\n if (string !== internals.normalizeDecimal(value)) {\n result.errors = error('number.unsafe');\n return result;\n }\n }\n }\n\n return result;\n }\n },\n\n validate(value, { schema, error, prefs }) {\n\n if (value === Infinity ||\n value === -Infinity) {\n\n return { value, errors: error('number.infinity') };\n }\n\n if (!Common.isNumber(value)) {\n return { value, errors: error('number.base') };\n }\n\n const result = { value };\n\n if (prefs.convert) {\n const rule = schema.$_getRule('precision');\n if (rule) {\n const precision = Math.pow(10, rule.args.limit); // This is conceptually equivalent to using toFixed but it should be much faster\n result.value = Math.round(result.value * precision) / precision;\n }\n }\n\n if (result.value === 0) {\n result.value = 0; // -0\n }\n\n if (!schema._flags.unsafe &&\n (value > Number.MAX_SAFE_INTEGER || value < Number.MIN_SAFE_INTEGER)) {\n\n result.errors = error('number.unsafe');\n }\n\n return result;\n },\n\n rules: {\n\n compare: {\n method: false,\n validate(value, helpers, { limit }, { name, operator, args }) {\n\n if (Common.compare(value, limit, operator)) {\n return value;\n }\n\n return helpers.error('number.' + name, { limit: args.limit, value });\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: Common.isNumber,\n message: 'must be a number'\n }\n ]\n },\n\n greater: {\n method(limit) {\n\n return this.$_addRule({ name: 'greater', method: 'compare', args: { limit }, operator: '>' });\n },\n jsonSchema(rule, res) {\n\n res.exclusiveMinimum = rule.args.limit;\n return res;\n }\n },\n\n integer: {\n method() {\n\n return this.$_addRule('integer');\n },\n validate(value, helpers) {\n\n if (Math.trunc(value) - value === 0) {\n return value;\n }\n\n return helpers.error('number.integer');\n },\n jsonSchema(rule, res) {\n\n res.type = 'integer';\n\n return res;\n }\n },\n\n less: {\n method(limit) {\n\n return this.$_addRule({ name: 'less', method: 'compare', args: { limit }, operator: '<' });\n },\n jsonSchema(rule, res) {\n\n res.exclusiveMaximum = rule.args.limit;\n return res;\n }\n },\n\n max: {\n method(limit) {\n\n return this.$_addRule({ name: 'max', method: 'compare', args: { limit }, operator: '<=' });\n },\n jsonSchema(rule, res) {\n\n res.maximum = rule.args.limit;\n return res;\n }\n },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'compare', args: { limit }, operator: '>=' });\n },\n jsonSchema(rule, res) {\n\n res.minimum = rule.args.limit;\n return res;\n }\n },\n\n multiple: {\n method(base) {\n\n const baseDecimalPlace = typeof base === 'number' ? internals.decimalPlaces(base) : null;\n const pfactor = Math.pow(10, baseDecimalPlace);\n\n return this.$_addRule({\n name: 'multiple',\n args: {\n base,\n baseDecimalPlace,\n pfactor\n }\n });\n },\n validate(value, helpers, { base, baseDecimalPlace, pfactor }, options) {\n\n const valueDecimalPlace = internals.decimalPlaces(value);\n\n if (valueDecimalPlace > baseDecimalPlace) {\n // Value with higher precision than base can never be a multiple\n return helpers.error('number.multiple', { multiple: options.args.base, value });\n }\n\n return Math.round(pfactor * value) % Math.round(pfactor * base) === 0 ?\n value :\n helpers.error('number.multiple', { multiple: options.args.base, value });\n },\n jsonSchema(rule, res) {\n\n res.multipleOf = rule.args.base;\n return res;\n },\n args: [\n {\n name: 'base',\n ref: true,\n assert: (value) => typeof value === 'number' && isFinite(value) && value > 0,\n message: 'must be a positive number'\n },\n 'baseDecimalPlace',\n 'pfactor'\n ],\n multi: true\n },\n\n negative: {\n method() {\n\n return this.sign('negative');\n }\n },\n\n port: {\n method() {\n\n return this.$_addRule('port');\n },\n validate(value, helpers) {\n\n if (Number.isSafeInteger(value) &&\n value >= 0 &&\n value <= 65535) {\n\n return value;\n }\n\n return helpers.error('number.port');\n },\n jsonSchema(rule, res) {\n\n res.type = 'integer';\n res.minimum = 0;\n res.maximum = 65535;\n return res;\n }\n },\n\n positive: {\n method() {\n\n return this.sign('positive');\n }\n },\n\n precision: {\n method(limit) {\n\n assert(Number.isSafeInteger(limit), 'limit must be an integer');\n\n return this.$_addRule({ name: 'precision', args: { limit } });\n },\n validate(value, helpers, { limit }) {\n\n const places = value.toString().match(internals.precisionRx);\n const decimals = Math.max((places[1] ? places[1].length : 0) - (places[2] ? parseInt(places[2], 10) : 0), 0);\n if (decimals <= limit) {\n return value;\n }\n\n return helpers.error('number.precision', { limit, value });\n },\n convert: true\n },\n\n sign: {\n method(sign) {\n\n assert(['negative', 'positive'].includes(sign), 'Invalid sign', sign);\n\n return this.$_addRule({ name: 'sign', args: { sign } });\n },\n validate(value, helpers, { sign }) {\n\n if (sign === 'negative' && value < 0 ||\n sign === 'positive' && value > 0) {\n\n return value;\n }\n\n return helpers.error(`number.${sign}`);\n },\n jsonSchema(rule, res) {\n\n if (rule.args.sign === 'positive') {\n res.exclusiveMinimum = 0;\n }\n else {\n res.exclusiveMaximum = 0;\n }\n\n return res;\n }\n },\n\n unsafe: {\n method(enabled = true) {\n\n assert(typeof enabled === 'boolean', 'enabled must be a boolean');\n\n return this.$_setFlag('unsafe', enabled);\n }\n }\n },\n\n cast: {\n string: {\n from: (value) => typeof value === 'number',\n to(value, helpers) {\n\n return value.toString();\n }\n }\n },\n\n messages: {\n 'number.base': '{{#label}} must be a number',\n 'number.greater': '{{#label}} must be greater than {{#limit}}',\n 'number.infinity': '{{#label}} cannot be infinity',\n 'number.integer': '{{#label}} must be an integer',\n 'number.less': '{{#label}} must be less than {{#limit}}',\n 'number.max': '{{#label}} must be less than or equal to {{#limit}}',\n 'number.min': '{{#label}} must be greater than or equal to {{#limit}}',\n 'number.multiple': '{{#label}} must be a multiple of {{#multiple}}',\n 'number.negative': '{{#label}} must be a negative number',\n 'number.port': '{{#label}} must be a valid port',\n 'number.positive': '{{#label}} must be a positive number',\n 'number.precision': '{{#label}} must have no more than {{#limit}} decimal places',\n 'number.unsafe': '{{#label}} must be a safe number'\n }\n});\n\n\n// Helpers\n\ninternals.extractSignificantDigits = function (value) {\n\n return value\n .replace(internals.exponentialPartRegex, '')\n .replace(internals.dotRegex, '')\n .replace(internals.trailingZerosRegex, '')\n .replace(internals.leadingSignAndZerosRegex, '');\n};\n\n\ninternals.normalizeDecimal = function (str) {\n\n str = str\n // Remove leading plus signs\n .replace(/^\\+/, '')\n // Remove trailing zeros if there is a decimal point and unecessary decimal points\n .replace(/\\.0*$/, '')\n // Add a integer 0 if the numbers starts with a decimal point\n .replace(/^(-?)\\.([^\\.]*)$/, '$10.$2')\n // Remove leading zeros\n .replace(/^(-?)0+([0-9])/, '$1$2');\n\n if (str.includes('.') &&\n str.endsWith('0')) {\n\n str = str.replace(/0+$/, '');\n }\n\n if (str === '-0') {\n return '0';\n }\n\n return str;\n};\n","'use strict';\n\nconst Keys = require('./keys');\n\n\nconst internals = {};\n\n\nmodule.exports = Keys.extend({\n\n type: 'object',\n\n cast: {\n map: {\n from: (value) => value && typeof value === 'object',\n to(value, helpers) {\n\n return new Map(Object.entries(value));\n }\n }\n }\n});\n","export const errorCodes = {\n EMPTY_STRING: 'Address must be a non-empty string',\n FORBIDDEN_UNICODE: 'Address contains forbidden Unicode characters',\n MULTIPLE_AT_CHAR: 'Address cannot contain more than one @ character',\n MISSING_AT_CHAR: 'Address must contain one @ character',\n EMPTY_LOCAL: 'Address local part cannot be empty',\n ADDRESS_TOO_LONG: 'Address too long',\n LOCAL_TOO_LONG: 'Address local part too long',\n EMPTY_LOCAL_SEGMENT: 'Address local part contains empty dot-separated segment',\n INVALID_LOCAL_CHARS: 'Address local part contains invalid character',\n DOMAIN_NON_EMPTY_STRING: 'Domain must be a non-empty string',\n DOMAIN_TOO_LONG: 'Domain too long',\n DOMAIN_INVALID_UNICODE_CHARS: 'Domain contains forbidden Unicode characters',\n DOMAIN_INVALID_CHARS: 'Domain contains invalid character',\n DOMAIN_INVALID_TLDS_CHARS: 'Domain contains invalid tld character',\n DOMAIN_SEGMENTS_COUNT: 'Domain lacks the minimum required number of segments',\n DOMAIN_SEGMENTS_COUNT_MAX: 'Domain contains too many segments',\n DOMAIN_FORBIDDEN_TLDS: 'Domain uses forbidden TLD',\n DOMAIN_EMPTY_SEGMENT: 'Domain contains empty dot-separated segment',\n DOMAIN_LONG_SEGMENT: 'Domain contains dot-separated segment that is too long'\n};\nexport function errorCode(code) {\n return { code, error: errorCodes[code] };\n}\n//# sourceMappingURL=errors.js.map","import * as Url from 'url';\nimport { errorCode } from './errors';\nconst MIN_DOMAIN_SEGMENTS = 2;\nconst NON_ASCII_RX = /[^\\x00-\\x7f]/;\nconst DOMAIN_CONTROL_RX = /[\\x00-\\x20@\\:\\/\\\\#!\\$&\\'\\(\\)\\*\\+,;=\\?]/; // Control + space + separators\nconst TLD_SEGMENT_RX = /^[a-zA-Z](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?$/;\nconst DOMAIN_SEGMENT_RX = /^[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?$/;\nconst DOMAIN_UNDERSCORE_SEGMENT_RX = /^[a-zA-Z0-9_](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?$/;\nconst URL_IMPL = Url.URL || URL; // $lab:coverage:ignore$\nfunction isTldsAllow(tlds) {\n return !!tlds.allow;\n}\n/**\n * Analyzes a string to verify it is a valid domain name.\n *\n * @param domain - the domain name to validate.\n * @param options - optional settings.\n *\n * @return - undefined when valid, otherwise an object with single error key with a string message value.\n */\nexport function analyzeDomain(domain, options = {}) {\n if (!domain) {\n // Catch null / undefined\n return errorCode('DOMAIN_NON_EMPTY_STRING');\n }\n if (typeof domain !== 'string') {\n throw new Error('Invalid input: domain must be a string');\n }\n if (domain.length > 256) {\n return errorCode('DOMAIN_TOO_LONG');\n }\n const ascii = !NON_ASCII_RX.test(domain);\n if (!ascii) {\n if (options.allowUnicode === false) {\n // Defaults to true\n return errorCode('DOMAIN_INVALID_UNICODE_CHARS');\n }\n domain = domain.normalize('NFC');\n }\n if (DOMAIN_CONTROL_RX.test(domain)) {\n return errorCode('DOMAIN_INVALID_CHARS');\n }\n domain = punycode(domain);\n // https://tools.ietf.org/html/rfc1035 section 2.3.1\n if (options.allowFullyQualified && domain[domain.length - 1] === '.') {\n domain = domain.slice(0, -1);\n }\n const minDomainSegments = options.minDomainSegments || MIN_DOMAIN_SEGMENTS;\n const segments = domain.split('.');\n if (segments.length < minDomainSegments) {\n return errorCode('DOMAIN_SEGMENTS_COUNT');\n }\n if (options.maxDomainSegments) {\n if (segments.length > options.maxDomainSegments) {\n return errorCode('DOMAIN_SEGMENTS_COUNT_MAX');\n }\n }\n const tlds = options.tlds;\n if (tlds) {\n const tld = segments[segments.length - 1].toLowerCase();\n if (isTldsAllow(tlds)) {\n if (!tlds.allow.has(tld)) {\n return errorCode('DOMAIN_FORBIDDEN_TLDS');\n }\n }\n else if (tlds.deny.has(tld)) {\n return errorCode('DOMAIN_FORBIDDEN_TLDS');\n }\n }\n for (let i = 0; i < segments.length; ++i) {\n const segment = segments[i];\n if (!segment.length) {\n return errorCode('DOMAIN_EMPTY_SEGMENT');\n }\n if (segment.length > 63) {\n return errorCode('DOMAIN_LONG_SEGMENT');\n }\n if (i < segments.length - 1) {\n if (options.allowUnderscore) {\n if (!DOMAIN_UNDERSCORE_SEGMENT_RX.test(segment)) {\n return errorCode('DOMAIN_INVALID_CHARS');\n }\n }\n else {\n if (!DOMAIN_SEGMENT_RX.test(segment)) {\n return errorCode('DOMAIN_INVALID_CHARS');\n }\n }\n }\n else {\n if (!TLD_SEGMENT_RX.test(segment)) {\n return errorCode('DOMAIN_INVALID_TLDS_CHARS');\n }\n }\n }\n return null;\n}\n/**\n * Analyzes a string to verify it is a valid domain name.\n *\n * @param domain - the domain name to validate.\n * @param options - optional settings.\n *\n * @return - true when valid, otherwise false.\n */\nexport function isDomainValid(domain, options) {\n return !analyzeDomain(domain, options);\n}\nfunction punycode(domain) {\n if (domain.includes('%')) {\n domain = domain.replace(/%/g, '%25');\n }\n try {\n return new URL_IMPL(`http://${domain}`).host;\n }\n catch (err) {\n return domain;\n }\n}\nexport function validateDomainOptions(options) {\n if (!options) {\n return;\n }\n if (typeof options.tlds !== 'object') {\n throw new Error('Invalid options: tlds must be a boolean or an object');\n }\n if (isTldsAllow(options.tlds)) {\n if (options.tlds.allow instanceof Set === false) {\n throw new Error('Invalid options: tlds.allow must be a Set object or true');\n }\n if (options.tlds.deny) {\n throw new Error('Invalid options: cannot specify both tlds.allow and tlds.deny lists');\n }\n }\n else {\n if (options.tlds.deny instanceof Set === false) {\n throw new Error('Invalid options: tlds.deny must be a Set object');\n }\n }\n}\n//# sourceMappingURL=domain.js.map","import * as Util from 'util';\nimport { analyzeDomain } from './domain';\nimport { errorCode } from './errors';\nconst NON_ASCII_RX = /[^\\x00-\\x7f]/;\nconst ENCODER_IMPL = new (Util.TextEncoder || TextEncoder)(); // $lab:coverage:ignore$\n/**\n * Analyzes a string to verify it is a valid email address.\n *\n * @param email - the email address to validate.\n * @param options - optional settings.\n *\n * @return - undefined when valid, otherwise an object with single error key with a string message value.\n */\nexport function analyzeEmail(email, options) {\n return validateEmail(email, options);\n}\n/**\n * Analyzes a string to verify it is a valid email address.\n *\n * @param email - the email address to validate.\n * @param options - optional settings.\n *\n * @return - true when valid, otherwise false.\n */\nexport function isEmailValid(email, options) {\n return !validateEmail(email, options);\n}\nfunction validateEmail(email, options = {}) {\n if (typeof email !== 'string') {\n throw new Error('Invalid input: email must be a string');\n }\n if (!email) {\n return errorCode('EMPTY_STRING');\n }\n // Unicode\n const ascii = !NON_ASCII_RX.test(email);\n if (!ascii) {\n if (options.allowUnicode === false) {\n // Defaults to true\n return errorCode('FORBIDDEN_UNICODE');\n }\n email = email.normalize('NFC');\n }\n // Basic structure\n const parts = email.split('@');\n if (parts.length !== 2) {\n return parts.length > 2 ? errorCode('MULTIPLE_AT_CHAR') : errorCode('MISSING_AT_CHAR');\n }\n const [local, domain] = parts;\n if (!local) {\n return errorCode('EMPTY_LOCAL');\n }\n if (!options.ignoreLength) {\n if (email.length > 254) {\n // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.3\n return errorCode('ADDRESS_TOO_LONG');\n }\n if (ENCODER_IMPL.encode(local).length > 64) {\n // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1\n return errorCode('LOCAL_TOO_LONG');\n }\n }\n // Validate parts\n return validateLocal(local, ascii) || analyzeDomain(domain, options);\n}\nfunction validateLocal(local, ascii) {\n const segments = local.split('.');\n for (const segment of segments) {\n if (!segment.length) {\n return errorCode('EMPTY_LOCAL_SEGMENT');\n }\n if (ascii) {\n if (!ATEXT_RX.test(segment)) {\n return errorCode('INVALID_LOCAL_CHARS');\n }\n continue;\n }\n for (const char of segment) {\n if (ATEXT_RX.test(char)) {\n continue;\n }\n const binary = toBinary(char);\n if (!ATOM_RX.test(binary)) {\n return errorCode('INVALID_LOCAL_CHARS');\n }\n }\n }\n return null;\n}\nfunction toBinary(char) {\n return Array.from(ENCODER_IMPL.encode(char), (v) => String.fromCharCode(v)).join('');\n}\n/*\n From RFC 5321:\n\n Mailbox = Local-part \"@\" ( Domain / address-literal )\n\n Local-part = Dot-string / Quoted-string\n Dot-string = Atom *(\".\" Atom)\n Atom = 1*atext\n atext = ALPHA / DIGIT / \"!\" / \"#\" / \"$\" / \"%\" / \"&\" / \"'\" / \"*\" / \"+\" / \"-\" / \"/\" / \"=\" / \"?\" / \"^\" / \"_\" / \"`\" / \"{\" / \"|\" / \"}\" / \"~\"\n\n Domain = sub-domain *(\".\" sub-domain)\n sub-domain = Let-dig [Ldh-str]\n Let-dig = ALPHA / DIGIT\n Ldh-str = *( ALPHA / DIGIT / \"-\" ) Let-dig\n\n ALPHA = %x41-5A / %x61-7A ; a-z, A-Z\n DIGIT = %x30-39 ; 0-9\n\n From RFC 6531:\n\n sub-domain =/ U-label\n atext =/ UTF8-non-ascii\n\n UTF8-non-ascii = UTF8-2 / UTF8-3 / UTF8-4\n\n UTF8-2 = %xC2-DF UTF8-tail\n UTF8-3 = %xE0 %xA0-BF UTF8-tail /\n %xE1-EC 2( UTF8-tail ) /\n %xED %x80-9F UTF8-tail /\n %xEE-EF 2( UTF8-tail )\n UTF8-4 = %xF0 %x90-BF 2( UTF8-tail ) /\n %xF1-F3 3( UTF8-tail ) /\n %xF4 %x80-8F 2( UTF8-tail )\n\n UTF8-tail = %x80-BF\n\n Note: The following are not supported:\n\n RFC 5321: address-literal, Quoted-string\n RFC 5322: obs-*, CFWS\n*/\nconst ATEXT_RX = /^[\\w!#\\$%&'\\*\\+\\-/=\\?\\^`\\{\\|\\}~]+$/; // _ included in \\w\nconst ATOM_RX = new RegExp([\n // %xC2-DF UTF8-tail\n '(?:[\\\\xc2-\\\\xdf][\\\\x80-\\\\xbf])',\n // %xE0 %xA0-BF UTF8-tail %xE1-EC 2( UTF8-tail ) %xED %x80-9F UTF8-tail %xEE-EF 2( UTF8-tail )\n '(?:\\\\xe0[\\\\xa0-\\\\xbf][\\\\x80-\\\\xbf])|(?:[\\\\xe1-\\\\xec][\\\\x80-\\\\xbf]{2})|(?:\\\\xed[\\\\x80-\\\\x9f][\\\\x80-\\\\xbf])|(?:[\\\\xee-\\\\xef][\\\\x80-\\\\xbf]{2})',\n // %xF0 %x90-BF 2( UTF8-tail ) %xF1-F3 3( UTF8-tail ) %xF4 %x80-8F 2( UTF8-tail )\n '(?:\\\\xf0[\\\\x90-\\\\xbf][\\\\x80-\\\\xbf]{2})|(?:[\\\\xf1-\\\\xf3][\\\\x80-\\\\xbf]{3})|(?:\\\\xf4[\\\\x80-\\\\x8f][\\\\x80-\\\\xbf]{2})'\n].join('|'));\n//# sourceMappingURL=email.js.map","export { default as applyToDefaults } from './applyToDefaults.js';\n\nexport { default as assert } from './assert.js';\n\nexport { default as Bench } from './bench.js';\n\nexport { default as block } from './block.js';\n\nexport { default as clone } from './clone.js';\n\nexport { default as contain } from './contain.js';\n\nexport { default as deepEqual } from './deepEqual.js';\n\nexport { default as AssertError } from './assertError.js';\n\nexport { default as escapeHeaderAttribute } from './escapeHeaderAttribute.js';\n\nexport { default as escapeHtml } from './escapeHtml.js';\n\nexport { default as escapeJson } from './escapeJson.js';\n\nexport { default as escapeRegex } from './escapeRegex.js';\n\nexport { default as flatten } from './flatten.js';\n\nexport { default as ignore } from './ignore.js';\n\nexport { default as intersect } from './intersect.js';\n\nexport { default as isPromise } from './isPromise.js';\n\nexport { default as merge } from './merge.js';\n\nexport { default as once } from './once.js';\n\nexport { default as reach } from './reach.js';\n\nexport { default as reachTemplate } from './reachTemplate.js';\n\nexport { default as stringify } from './stringify.js';\n\nexport { default as wait } from './wait.js';\n","import { assert, escapeRegex } from '@hapi/hoek';\nfunction generate() {\n const rfc3986 = {};\n const hexDigit = '\\\\dA-Fa-f'; // HEXDIG = DIGIT / \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n const hexDigitOnly = '[' + hexDigit + ']';\n const unreserved = '\\\\w-\\\\.~'; // unreserved = ALPHA / DIGIT / \"-\" / \".\" / \"_\" / \"~\"\n const subDelims = \"!\\\\$&'\\\\(\\\\)\\\\*\\\\+,;=\"; // sub-delims = \"!\" / \"$\" / \"&\" / \"'\" / \"(\" / \")\" / \"*\" / \"+\" / \",\" / \";\" / \"=\"\n const pctEncoded = '%' + hexDigit; // pct-encoded = \"%\" HEXDIG HEXDIG\n const pchar = unreserved + pctEncoded + subDelims + ':@'; // pchar = unreserved / pct-encoded / sub-delims / \":\" / \"@\"\n const pcharOnly = '[' + pchar + ']';\n const decOctect = '(?:0{0,2}\\\\d|0?[1-9]\\\\d|1\\\\d\\\\d|2[0-4]\\\\d|25[0-5])'; // dec-octet = DIGIT / %x31-39 DIGIT / \"1\" 2DIGIT / \"2\" %x30-34 DIGIT / \"25\" %x30-35 ; 0-9 / 10-99 / 100-199 / 200-249 / 250-255\n rfc3986.ipv4address = '(?:' + decOctect + '\\\\.){3}' + decOctect; // IPv4address = dec-octet \".\" dec-octet \".\" dec-octet \".\" dec-octet\n /*\n h16 = 1*4HEXDIG ; 16 bits of address represented in hexadecimal\n ls32 = ( h16 \":\" h16 ) / IPv4address ; least-significant 32 bits of address\n IPv6address = 6( h16 \":\" ) ls32\n / \"::\" 5( h16 \":\" ) ls32\n / [ h16 ] \"::\" 4( h16 \":\" ) ls32\n / [ *1( h16 \":\" ) h16 ] \"::\" 3( h16 \":\" ) ls32\n / [ *2( h16 \":\" ) h16 ] \"::\" 2( h16 \":\" ) ls32\n / [ *3( h16 \":\" ) h16 ] \"::\" h16 \":\" ls32\n / [ *4( h16 \":\" ) h16 ] \"::\" ls32\n / [ *5( h16 \":\" ) h16 ] \"::\" h16\n / [ *6( h16 \":\" ) h16 ] \"::\"\n */\n const h16 = hexDigitOnly + '{1,4}';\n const ls32 = '(?:' + h16 + ':' + h16 + '|' + rfc3986.ipv4address + ')';\n const IPv6SixHex = '(?:' + h16 + ':){6}' + ls32;\n const IPv6FiveHex = '::(?:' + h16 + ':){5}' + ls32;\n const IPv6FourHex = '(?:' + h16 + ')?::(?:' + h16 + ':){4}' + ls32;\n const IPv6ThreeHex = '(?:(?:' + h16 + ':){0,1}' + h16 + ')?::(?:' + h16 + ':){3}' + ls32;\n const IPv6TwoHex = '(?:(?:' + h16 + ':){0,2}' + h16 + ')?::(?:' + h16 + ':){2}' + ls32;\n const IPv6OneHex = '(?:(?:' + h16 + ':){0,3}' + h16 + ')?::' + h16 + ':' + ls32;\n const IPv6NoneHex = '(?:(?:' + h16 + ':){0,4}' + h16 + ')?::' + ls32;\n const IPv6NoneHex2 = '(?:(?:' + h16 + ':){0,5}' + h16 + ')?::' + h16;\n const IPv6NoneHex3 = '(?:(?:' + h16 + ':){0,6}' + h16 + ')?::';\n rfc3986.ipv4Cidr = '(?:\\\\d|[1-2]\\\\d|3[0-2])'; // IPv4 cidr = DIGIT / %x31-32 DIGIT / \"3\" %x30-32 ; 0-9 / 10-29 / 30-32\n rfc3986.ipv6Cidr = '(?:0{0,2}\\\\d|0?[1-9]\\\\d|1[01]\\\\d|12[0-8])'; // IPv6 cidr = DIGIT / %x31-39 DIGIT / \"1\" %x0-1 DIGIT / \"12\" %x0-8; 0-9 / 10-99 / 100-119 / 120-128\n rfc3986.ipv6address =\n '(?:' +\n IPv6SixHex +\n '|' +\n IPv6FiveHex +\n '|' +\n IPv6FourHex +\n '|' +\n IPv6ThreeHex +\n '|' +\n IPv6TwoHex +\n '|' +\n IPv6OneHex +\n '|' +\n IPv6NoneHex +\n '|' +\n IPv6NoneHex2 +\n '|' +\n IPv6NoneHex3 +\n ')';\n rfc3986.ipvFuture = 'v' + hexDigitOnly + '+\\\\.[' + unreserved + subDelims + ':]+'; // IPvFuture = \"v\" 1*HEXDIG \".\" 1*( unreserved / sub-delims / \":\" )\n rfc3986.scheme = '[a-zA-Z][a-zA-Z\\\\d+-\\\\.]*'; // scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n rfc3986.schemeRegex = new RegExp(rfc3986.scheme);\n const userinfo = '[' + unreserved + pctEncoded + subDelims + ':]*'; // userinfo = *( unreserved / pct-encoded / sub-delims / \":\" )\n const IPLiteral = '\\\\[(?:' + rfc3986.ipv6address + '|' + rfc3986.ipvFuture + ')\\\\]'; // IP-literal = \"[\" ( IPv6address / IPvFuture ) \"]\"\n const regName = '[' + unreserved + pctEncoded + subDelims + ']{1,255}'; // reg-name = *( unreserved / pct-encoded / sub-delims )\n const host = '(?:' + IPLiteral + '|' + rfc3986.ipv4address + '|' + regName + ')'; // host = IP-literal / IPv4address / reg-name\n const port = '\\\\d*'; // port = *DIGIT\n const authority = '(?:' + userinfo + '@)?' + host + '(?::' + port + ')?'; // authority = [ userinfo \"@\" ] host [ \":\" port ]\n const authorityCapture = '(?:' + userinfo + '@)?(' + host + ')(?::' + port + ')?';\n /*\n segment = *pchar\n segment-nz = 1*pchar\n path = path-abempty ; begins with \"/\" '|' is empty\n / path-absolute ; begins with \"/\" but not \"//\"\n / path-noscheme ; begins with a non-colon segment\n / path-rootless ; begins with a segment\n / path-empty ; zero characters\n path-abempty = *( \"/\" segment )\n path-absolute = \"/\" [ segment-nz *( \"/\" segment ) ]\n path-rootless = segment-nz *( \"/\" segment )\n */\n const segment = pcharOnly + '*';\n const segmentNz = pcharOnly + '+';\n const segmentNzNc = '[' + unreserved + pctEncoded + subDelims + '@' + ']+';\n const pathEmpty = '';\n const pathAbEmpty = '(?:\\\\/' + segment + ')*';\n const pathAbsolute = '\\\\/(?:' + segmentNz + pathAbEmpty + ')?';\n const pathRootless = segmentNz + pathAbEmpty;\n const pathNoScheme = segmentNzNc + pathAbEmpty;\n const pathAbNoAuthority = '(?:\\\\/\\\\/\\\\/' + segment + pathAbEmpty + ')'; // Used by file:///\n // hier-part = \"//\" authority path\n rfc3986.hierPart =\n '(?:' +\n '(?:\\\\/\\\\/' +\n authority +\n pathAbEmpty +\n ')' +\n '|' +\n pathAbsolute +\n '|' +\n pathRootless +\n '|' +\n pathAbNoAuthority +\n ')';\n rfc3986.hierPartCapture =\n '(?:' + '(?:\\\\/\\\\/' + authorityCapture + pathAbEmpty + ')' + '|' + pathAbsolute + '|' + pathRootless + ')';\n // relative-part = \"//\" authority path-abempty / path-absolute / path-noscheme / path-empty\n rfc3986.relativeRef =\n '(?:' +\n '(?:\\\\/\\\\/' +\n authority +\n pathAbEmpty +\n ')' +\n '|' +\n pathAbsolute +\n '|' +\n pathNoScheme +\n '|' +\n pathEmpty +\n ')';\n rfc3986.relativeRefCapture =\n '(?:' +\n '(?:\\\\/\\\\/' +\n authorityCapture +\n pathAbEmpty +\n ')' +\n '|' +\n pathAbsolute +\n '|' +\n pathNoScheme +\n '|' +\n pathEmpty +\n ')';\n // query = *( pchar / \"/\" / \"?\" )\n // query = *( pchar / \"[\" / \"]\" / \"/\" / \"?\" )\n rfc3986.query = '[' + pchar + '\\\\/\\\\?]*(?=#|$)'; //Finish matching either at the fragment part '|' end of the line.\n rfc3986.queryWithSquareBrackets = '[' + pchar + '\\\\[\\\\]\\\\/\\\\?]*(?=#|$)';\n // fragment = *( pchar / \"/\" / \"?\" )\n rfc3986.fragment = '[' + pchar + '\\\\/\\\\?]*';\n return rfc3986;\n}\nconst rfc3986 = generate();\nexport const ipVersions = {\n v4Cidr: rfc3986.ipv4Cidr,\n v6Cidr: rfc3986.ipv6Cidr,\n ipv4: rfc3986.ipv4address,\n ipv6: rfc3986.ipv6address,\n ipvfuture: rfc3986.ipvFuture\n};\nfunction createRegex(options) {\n const rfc = rfc3986;\n // Construct expression\n const query = options.allowQuerySquareBrackets ? rfc.queryWithSquareBrackets : rfc.query;\n const suffix = '(?:\\\\?' + query + ')?' + '(?:#' + rfc.fragment + ')?';\n // relative-ref = relative-part [ \"?\" query ] [ \"#\" fragment ]\n const relative = options.domain ? rfc.relativeRefCapture : rfc.relativeRef;\n if (options.relativeOnly) {\n return wrap(relative + suffix);\n }\n // Custom schemes\n let customScheme = '';\n if (options.scheme) {\n assert(options.scheme instanceof RegExp || typeof options.scheme === 'string' || Array.isArray(options.scheme), 'scheme must be a RegExp, String, or Array');\n const schemes = [].concat(options.scheme);\n assert(schemes.length >= 1, 'scheme must have at least 1 scheme specified');\n // Flatten the array into a string to be used to match the schemes\n const selections = [];\n for (let i = 0; i < schemes.length; ++i) {\n const scheme = schemes[i];\n assert(scheme instanceof RegExp || typeof scheme === 'string', 'scheme at position ' + i + ' must be a RegExp or String');\n if (scheme instanceof RegExp) {\n selections.push(scheme.source.toString());\n }\n else {\n assert(rfc.schemeRegex.test(scheme), 'scheme at position ' + i + ' must be a valid scheme');\n selections.push(escapeRegex(scheme));\n }\n }\n customScheme = selections.join('|');\n }\n // URI = scheme \":\" hier-part [ \"?\" query ] [ \"#\" fragment ]\n const scheme = customScheme ? '(?:' + customScheme + ')' : rfc.scheme;\n const absolute = '(?:' + scheme + ':' + (options.domain ? rfc.hierPartCapture : rfc.hierPart) + ')';\n const prefix = options.allowRelative ? '(?:' + absolute + '|' + relative + ')' : absolute;\n return wrap(prefix + suffix, customScheme);\n}\nfunction wrap(raw, scheme = null) {\n raw = `(?=.)(?!https?\\:/(?:$|[^/]))(?!https?\\:///)(?!https?\\:[^/])${raw}`; // Require at least one character and explicitly forbid 'http:/' or HTTP with empty domain\n return {\n raw,\n regex: new RegExp(`^${raw}$`),\n scheme\n };\n}\nconst genericUriRegex = createRegex({});\n/**\n * Generates a regular expression used to validate URI addresses.\n *\n * @param options - optional settings.\n *\n * @returns an object with the regular expression and meta data.\n */\nexport function uriRegex(options = {}) {\n if (options.scheme ||\n options.allowRelative ||\n options.relativeOnly ||\n options.allowQuerySquareBrackets ||\n options.domain) {\n return createRegex(options);\n }\n return genericUriRegex;\n}\n//# sourceMappingURL=uri.js.map","import { assert } from '@hapi/hoek';\nimport { ipVersions } from './uri';\n/**\n * Generates a regular expression used to validate IP addresses.\n *\n * @param options - optional settings.\n *\n * @returns an object with the regular expression and meta data.\n */\nexport function ipRegex(options = {}) {\n // CIDR\n const cidr = options.cidr || 'optional';\n assert(['required', 'optional', 'forbidden'].includes(cidr), 'options.cidr must be one of required, optional, forbidden');\n // Versions\n assert(options.version === undefined || typeof options.version === 'string' || Array.isArray(options.version), 'options.version must be a string or an array of string');\n let versions = options.version || ['ipv4', 'ipv6', 'ipvfuture'];\n if (!Array.isArray(versions)) {\n versions = [versions];\n }\n assert(versions.length >= 1, 'options.version must have at least 1 version specified');\n for (const version of versions) {\n assert(typeof version === 'string' && version === version.toLowerCase(), 'Invalid options.version value');\n assert(['ipv4', 'ipv6', 'ipvfuture'].includes(version), 'options.version contains unknown version ' + version + ' - must be one of ipv4, ipv6, ipvfuture');\n }\n versions = Array.from(new Set(versions));\n // Regex\n const parts = versions.map((version) => {\n // Forbidden\n if (cidr === 'forbidden') {\n return ipVersions[version];\n }\n // Required\n const cidrpart = `\\\\/${version === 'ipv4' ? ipVersions.v4Cidr : ipVersions.v6Cidr}`;\n if (cidr === 'required') {\n return `${ipVersions[version]}${cidrpart}`;\n }\n // Optional\n return `${ipVersions[version]}(?:${cidrpart})?`;\n });\n const raw = `(?:${parts.join('|')})`;\n const regex = new RegExp(`^${raw}$`);\n return { cidr, versions, regex, raw };\n}\n//# sourceMappingURL=ip.js.map","export * from './domain';\nexport * from './email';\nexport { errorCodes } from './errors';\nexport { ipRegex } from './ip';\nexport { uriRegex } from './uri';\nexport { uriDecode } from './decode';\n//# sourceMappingURL=index.js.map","'use strict';\n\nconst { assert, escapeRegex } = require('@hapi/hoek');\nconst { isDomainValid, isEmailValid, ipRegex, uriRegex } = require('@hapi/address');\nconst Tlds = require('@hapi/tlds');\n\nconst Any = require('./any');\nconst Common = require('../common');\n\n\nconst internals = {\n tlds: Tlds.tlds instanceof Set ? { tlds: { allow: Tlds.tlds, deny: null } } : false, // $lab:coverage:ignore$\n base64Regex: {\n // paddingRequired\n true: {\n // urlSafe\n true: /^(?:[\\w\\-]{2}[\\w\\-]{2})*(?:[\\w\\-]{2}==|[\\w\\-]{3}=)?$/,\n false: /^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}==|[A-Za-z0-9+\\/]{3}=)?$/\n },\n false: {\n true: /^(?:[\\w\\-]{2}[\\w\\-]{2})*(?:[\\w\\-]{2}(==)?|[\\w\\-]{3}=?)?$/,\n false: /^(?:[A-Za-z0-9+\\/]{2}[A-Za-z0-9+\\/]{2})*(?:[A-Za-z0-9+\\/]{2}(==)?|[A-Za-z0-9+\\/]{3}=?)?$/\n }\n },\n dataUriRegex: /^data:[\\w+.-]+\\/[\\w+.-]+;((charset=[\\w-]+|base64),)?(.*)$/,\n hexRegex: {\n withPrefix: /^0x[0-9a-f]+$/i,\n withOptionalPrefix: /^(?:0x)?[0-9a-f]+$/i,\n withoutPrefix: /^[0-9a-f]+$/i\n },\n ipRegex: ipRegex({ cidr: 'forbidden' }).regex,\n isoDurationRegex: /^P(?!$)(\\d+Y)?(\\d+M)?(\\d+W)?(\\d+D)?(T(?=\\d)(\\d+H)?(\\d+M)?(\\d+S)?)?$/,\n\n guidBrackets: {\n '{': '}', '[': ']', '(': ')', '': ''\n },\n guidVersions: {\n uuidv1: '1',\n uuidv2: '2',\n uuidv3: '3',\n uuidv4: '4',\n uuidv5: '5',\n uuidv6: '6',\n uuidv7: '7',\n uuidv8: '8'\n },\n guidSeparators: new Set([undefined, true, false, '-', ':']),\n\n normalizationForms: ['NFC', 'NFD', 'NFKC', 'NFKD']\n};\n\n\nmodule.exports = Any.extend({\n\n type: 'string',\n\n flags: {\n\n insensitive: { default: false },\n truncate: { default: false }\n },\n\n terms: {\n\n replacements: { init: null }\n },\n\n coerce: {\n from: 'string',\n method(value, { schema, state, prefs }) {\n\n const normalize = schema.$_getRule('normalize');\n if (normalize) {\n value = value.normalize(normalize.args.form);\n }\n\n const casing = schema.$_getRule('case');\n if (casing) {\n value = casing.args.direction === 'upper' ? value.toLocaleUpperCase() : value.toLocaleLowerCase();\n }\n\n const trim = schema.$_getRule('trim');\n if (trim &&\n trim.args.enabled) {\n\n value = value.trim();\n }\n\n if (schema.$_terms.replacements) {\n for (const replacement of schema.$_terms.replacements) {\n value = value.replace(replacement.pattern, replacement.replacement);\n }\n }\n\n const hex = schema.$_getRule('hex');\n if (hex &&\n hex.args.options.byteAligned &&\n value.length % 2 !== 0) {\n\n value = `0${value}`;\n }\n\n if (schema.$_getRule('isoDate')) {\n const iso = internals.isoDate(value);\n if (iso) {\n value = iso;\n }\n }\n\n if (schema._flags.truncate) {\n const rule = schema.$_getRule('max');\n if (rule) {\n let limit = rule.args.limit;\n if (Common.isResolvable(limit)) {\n limit = limit.resolve(value, state, prefs);\n if (!Common.limit(limit)) {\n return { value, errors: schema.$_createError('any.ref', limit, { ref: rule.args.limit, arg: 'limit', reason: 'must be a positive integer' }, state, prefs) };\n }\n }\n\n value = value.slice(0, limit);\n }\n }\n\n return { value };\n }\n },\n\n validate(value, { schema, error }) {\n\n if (typeof value !== 'string') {\n return { value, errors: error('string.base') };\n }\n\n if (value === '') {\n const min = schema.$_getRule('min');\n if (min &&\n min.args.limit === 0) {\n\n return;\n }\n\n return { value, errors: error('string.empty') };\n }\n },\n\n jsonSchema(schema, res, mode, options) {\n\n const noEmpty = !schema._valids?.has('') && !schema._flags.only;\n if (noEmpty) {\n const min = schema.$_getRule('min');\n const length = schema.$_getRule('length');\n\n if ((!min || min.args.limit > 0) &&\n (!length || length.args.limit > 0)) {\n\n res.minLength = 1;\n }\n }\n\n return res;\n },\n\n rules: {\n\n alphanum: {\n method() {\n\n return this.$_addRule('alphanum');\n },\n validate(value, helpers) {\n\n if (/^[a-zA-Z0-9]+$/.test(value)) {\n return value;\n }\n\n return helpers.error('string.alphanum');\n }\n },\n\n base64: {\n method(options = {}) {\n\n Common.assertOptions(options, ['paddingRequired', 'urlSafe']);\n\n options = { urlSafe: false, paddingRequired: true, ...options };\n assert(typeof options.paddingRequired === 'boolean', 'paddingRequired must be boolean');\n assert(typeof options.urlSafe === 'boolean', 'urlSafe must be boolean');\n\n return this.$_addRule({ name: 'base64', args: { options } });\n },\n validate(value, helpers, { options }) {\n\n const regex = internals.base64Regex[options.paddingRequired][options.urlSafe];\n if (regex.test(value)) {\n return value;\n }\n\n return helpers.error('string.base64');\n },\n jsonSchema(rule, res) {\n\n res.format = 'base64';\n return res;\n }\n },\n\n case: {\n method(direction) {\n\n assert(['lower', 'upper'].includes(direction), 'Invalid case:', direction);\n\n return this.$_addRule({ name: 'case', args: { direction } });\n },\n validate(value, helpers, { direction }) {\n\n if (direction === 'lower' && value === value.toLocaleLowerCase() ||\n direction === 'upper' && value === value.toLocaleUpperCase()) {\n\n return value;\n }\n\n return helpers.error(`string.${direction}case`);\n },\n convert: true\n },\n\n creditCard: {\n method() {\n\n return this.$_addRule('creditCard');\n },\n validate(value, helpers) {\n\n let i = value.length;\n let sum = 0;\n let mul = 1;\n\n while (i--) {\n const char = value.charAt(i) * mul;\n sum = sum + (char - (char > 9) * 9);\n mul = mul ^ 3;\n }\n\n if (sum > 0 &&\n sum % 10 === 0) {\n\n return value;\n }\n\n return helpers.error('string.creditCard');\n }\n },\n\n dataUri: {\n method(options = {}) {\n\n Common.assertOptions(options, ['paddingRequired']);\n\n options = { paddingRequired: true, ...options };\n assert(typeof options.paddingRequired === 'boolean', 'paddingRequired must be boolean');\n\n return this.$_addRule({ name: 'dataUri', args: { options } });\n },\n validate(value, helpers, { options }) {\n\n const matches = value.match(internals.dataUriRegex);\n\n if (matches) {\n if (!matches[2]) {\n return value;\n }\n\n if (matches[2] !== 'base64') {\n return value;\n }\n\n const base64regex = internals.base64Regex[options.paddingRequired].false;\n if (base64regex.test(matches[3])) {\n return value;\n }\n }\n\n return helpers.error('string.dataUri');\n },\n jsonSchema(rule, res) {\n\n res.format = 'data-uri';\n return res;\n }\n },\n\n domain: {\n method(options) {\n\n if (options) {\n Common.assertOptions(options, ['allowFullyQualified', 'allowUnicode', 'allowUnderscore', 'maxDomainSegments', 'minDomainSegments', 'tlds']);\n }\n\n const address = internals.addressOptions(options);\n return this.$_addRule({ name: 'domain', args: { options }, address });\n },\n validate(value, helpers, args, { address }) {\n\n if (isDomainValid(value, address)) {\n return value;\n }\n\n return helpers.error('string.domain');\n }\n },\n\n email: {\n method(options = {}) {\n\n Common.assertOptions(options, ['allowFullyQualified', 'allowUnicode', 'ignoreLength', 'maxDomainSegments', 'minDomainSegments', 'multiple', 'separator', 'tlds']);\n assert(options.multiple === undefined || typeof options.multiple === 'boolean', 'multiple option must be an boolean');\n\n const address = internals.addressOptions(options);\n const regex = new RegExp(`\\\\s*[${options.separator ? escapeRegex(options.separator) : ','}]\\\\s*`);\n\n return this.$_addRule({ name: 'email', args: { options }, regex, address });\n },\n validate(value, helpers, { options }, { regex, address }) {\n\n const emails = options.multiple ? value.split(regex) : [value];\n const invalids = [];\n for (const email of emails) {\n if (!isEmailValid(email, address)) {\n invalids.push(email);\n }\n }\n\n if (!invalids.length) {\n return value;\n }\n\n return helpers.error('string.email', { value, invalids });\n },\n jsonSchema(rule, res) {\n\n res.format = 'email';\n return res;\n }\n },\n\n guid: {\n alias: 'uuid',\n method(options = {}) {\n\n Common.assertOptions(options, ['version', 'separator', 'wrapper']);\n\n assert(\n options.wrapper === undefined ||\n typeof options.wrapper === 'boolean' ||\n (typeof options.wrapper === 'string' && typeof internals.guidBrackets[options.wrapper] === 'string'),\n `\"wrapper\" must be true, false, or one of \"${Object.keys(internals.guidBrackets).filter(Boolean).join('\", \"')}\"`\n );\n\n let versionNumbers = '';\n\n if (options.version) {\n const versions = [].concat(options.version);\n\n assert(versions.length >= 1, 'version must have at least 1 valid version specified');\n const set = new Set();\n\n for (let i = 0; i < versions.length; ++i) {\n const version = versions[i];\n assert(typeof version === 'string', 'version at position ' + i + ' must be a string');\n const versionNumber = internals.guidVersions[version.toLowerCase()];\n assert(versionNumber, 'version at position ' + i + ' must be one of ' + Object.keys(internals.guidVersions).join(', '));\n assert(!set.has(versionNumber), 'version at position ' + i + ' must not be a duplicate');\n\n versionNumbers += versionNumber;\n set.add(versionNumber);\n }\n }\n\n assert(internals.guidSeparators.has(options.separator), 'separator must be one of true, false, \"-\", or \":\"');\n const separator = options.separator === undefined ? '[:-]?' :\n options.separator === true ? '[:-]' :\n options.separator === false ? '[]?' : `\\\\${options.separator}`;\n\n let wrapperStart;\n let wrapperEnd;\n\n if (options.wrapper === undefined) {\n wrapperStart = '[\\\\[{\\\\(]?';\n wrapperEnd = '[\\\\]}\\\\)]?';\n }\n else if (options.wrapper === true) {\n wrapperStart = '[\\\\[{\\\\(]';\n wrapperEnd = '[\\\\]}\\\\)]';\n }\n else if (options.wrapper === false) {\n wrapperStart = '';\n wrapperEnd = '';\n }\n else {\n wrapperStart = escapeRegex(options.wrapper);\n wrapperEnd = escapeRegex(internals.guidBrackets[options.wrapper]);\n }\n\n const regex = new RegExp(\n `^(${wrapperStart})[0-9A-F]{8}(${separator})[0-9A-F]{4}\\\\2?[${\n versionNumbers || '0-9A-F'\n }][0-9A-F]{3}\\\\2?[${\n versionNumbers ? '89AB' : '0-9A-F'\n }][0-9A-F]{3}\\\\2?[0-9A-F]{12}(${wrapperEnd})$`,\n 'i'\n );\n\n return this.$_addRule({ name: 'guid', args: { options }, regex });\n },\n\n validate(value, helpers, args, { regex }) {\n\n const results = regex.exec(value);\n\n if (!results) {\n return helpers.error('string.guid');\n }\n\n const open = results[1];\n const close = results[results.length - 1];\n\n if ((open || close) && internals.guidBrackets[open] !== close) {\n return helpers.error('string.guid');\n }\n\n return value;\n },\n jsonSchema(rule, res) {\n\n res.format = 'uuid';\n return res;\n }\n },\n\n hex: {\n method(options = {}) {\n\n Common.assertOptions(options, ['byteAligned', 'prefix']);\n\n options = { byteAligned: false, prefix: false, ...options };\n assert(typeof options.byteAligned === 'boolean', 'byteAligned must be boolean');\n assert(typeof options.prefix === 'boolean' || options.prefix === 'optional', 'prefix must be boolean or \"optional\"');\n\n return this.$_addRule({ name: 'hex', args: { options } });\n },\n validate(value, helpers, { options }) {\n\n const re = options.prefix === 'optional' ?\n internals.hexRegex.withOptionalPrefix :\n options.prefix === true ?\n internals.hexRegex.withPrefix :\n internals.hexRegex.withoutPrefix;\n if (!re.test(value)) {\n return helpers.error('string.hex');\n }\n\n if (options.byteAligned &&\n value.length % 2 !== 0) {\n\n return helpers.error('string.hexAlign');\n }\n\n return value;\n },\n jsonSchema(rule, res) {\n\n res.format = 'hex';\n return res;\n }\n },\n\n hostname: {\n method() {\n\n return this.$_addRule('hostname');\n },\n validate(value, helpers) {\n\n if (isDomainValid(value, { minDomainSegments: 1 }) ||\n internals.ipRegex.test(value)) {\n\n return value;\n }\n\n return helpers.error('string.hostname');\n },\n jsonSchema(rule, res) {\n\n res.format = 'hostname';\n return res;\n }\n },\n\n insensitive: {\n method() {\n\n return this.$_setFlag('insensitive', true);\n }\n },\n\n ip: {\n method(options = {}) {\n\n Common.assertOptions(options, ['cidr', 'version']);\n\n const { cidr, versions, regex } = ipRegex(options);\n const version = options.version ? versions : undefined;\n return this.$_addRule({ name: 'ip', args: { options: { cidr, version } }, regex });\n },\n validate(value, helpers, { options }, { regex }) {\n\n if (regex.test(value)) {\n return value;\n }\n\n if (options.version) {\n return helpers.error('string.ipVersion', { value, cidr: options.cidr, version: options.version });\n }\n\n return helpers.error('string.ip', { value, cidr: options.cidr });\n },\n jsonSchema(rule, res) {\n\n const version = rule.args.options.version;\n if (version && version.length === 1) {\n res.format = version[0];\n }\n else {\n res.format = 'ip';\n }\n\n return res;\n }\n },\n\n isoDate: {\n method() {\n\n return this.$_addRule('isoDate');\n },\n validate(value, { error }) {\n\n if (internals.isoDate(value)) {\n return value;\n }\n\n return error('string.isoDate');\n },\n jsonSchema(rule, res) {\n\n res.format = 'date-time';\n return res;\n }\n },\n\n isoDuration: {\n method() {\n\n return this.$_addRule('isoDuration');\n },\n validate(value, helpers) {\n\n if (internals.isoDurationRegex.test(value)) {\n return value;\n }\n\n return helpers.error('string.isoDuration');\n },\n jsonSchema(rule, res) {\n\n res.format = 'duration';\n return res;\n }\n },\n\n length: {\n method(limit, encoding) {\n\n return internals.length(this, 'length', limit, '=', encoding);\n },\n validate(value, helpers, { limit, encoding }, { name, operator, args }) {\n\n const length = encoding ? Buffer && Buffer.byteLength(value, encoding) : value.length; // $lab:coverage:ignore$\n if (Common.compare(length, limit, operator)) {\n return value;\n }\n\n return helpers.error('string.' + name, { limit: args.limit, value, encoding });\n },\n jsonSchema(rule, res) {\n\n res.minLength = rule.args.limit;\n res.maxLength = rule.args.limit;\n return res;\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: Common.limit,\n message: 'must be a positive integer'\n },\n 'encoding'\n ]\n },\n\n lowercase: {\n method() {\n\n return this.case('lower');\n }\n },\n\n max: {\n method(limit, encoding) {\n\n return internals.length(this, 'max', limit, '<=', encoding);\n },\n jsonSchema(rule, res) {\n\n res.maxLength = rule.args.limit;\n return res;\n },\n args: ['limit', 'encoding']\n },\n\n min: {\n method(limit, encoding) {\n\n return internals.length(this, 'min', limit, '>=', encoding);\n },\n jsonSchema(rule, res) {\n\n if (rule.args.limit > 0) {\n\n res.minLength = rule.args.limit;\n }\n\n return res;\n },\n args: ['limit', 'encoding']\n },\n\n normalize: {\n method(form = 'NFC') {\n\n assert(internals.normalizationForms.includes(form), 'normalization form must be one of ' + internals.normalizationForms.join(', '));\n\n return this.$_addRule({ name: 'normalize', args: { form } });\n },\n validate(value, { error }, { form }) {\n\n if (value === value.normalize(form)) {\n return value;\n }\n\n return error('string.normalize', { value, form });\n },\n convert: true\n },\n\n pattern: {\n alias: 'regex',\n method(regex, options = {}) {\n\n assert(regex instanceof RegExp, 'regex must be a RegExp');\n assert(!regex.flags.includes('g') && !regex.flags.includes('y'), 'regex should not use global or sticky mode');\n\n if (typeof options === 'string') {\n options = { name: options };\n }\n\n Common.assertOptions(options, ['invert', 'name']);\n\n const errorCode = ['string.pattern', options.invert ? '.invert' : '', options.name ? '.name' : '.base'].join('');\n return this.$_addRule({ name: 'pattern', args: { regex, options }, errorCode });\n },\n validate(value, helpers, { regex, options }, { errorCode }) {\n\n const patternMatch = regex.test(value);\n\n if (patternMatch ^ options.invert) {\n return value;\n }\n\n return helpers.error(errorCode, { name: options.name, regex, value });\n },\n jsonSchema(rule, res) {\n\n res.pattern = rule.args.regex.source;\n return res;\n },\n args: ['regex', 'options'],\n multi: true\n },\n\n replace: {\n method(pattern, replacement) {\n\n if (typeof pattern === 'string') {\n pattern = new RegExp(escapeRegex(pattern), 'g');\n }\n\n assert(pattern instanceof RegExp, 'pattern must be a RegExp');\n assert(typeof replacement === 'string', 'replacement must be a String');\n\n const obj = this.clone();\n\n if (!obj.$_terms.replacements) {\n obj.$_terms.replacements = [];\n }\n\n obj.$_terms.replacements.push({ pattern, replacement });\n return obj;\n }\n },\n\n token: {\n method() {\n\n return this.$_addRule('token');\n },\n validate(value, helpers) {\n\n if (/^\\w+$/.test(value)) {\n return value;\n }\n\n return helpers.error('string.token');\n },\n jsonSchema(rule, res) {\n\n res.format = 'token';\n return res;\n }\n },\n\n trim: {\n method(enabled = true) {\n\n assert(typeof enabled === 'boolean', 'enabled must be a boolean');\n\n return this.$_addRule({ name: 'trim', args: { enabled } });\n },\n validate(value, helpers, { enabled }) {\n\n if (!enabled ||\n value === value.trim()) {\n\n return value;\n }\n\n return helpers.error('string.trim');\n },\n convert: true\n },\n\n truncate: {\n method(enabled = true) {\n\n assert(typeof enabled === 'boolean', 'enabled must be a boolean');\n\n return this.$_setFlag('truncate', enabled);\n }\n },\n\n uppercase: {\n method() {\n\n return this.case('upper');\n }\n },\n\n uri: {\n method(options = {}) {\n\n Common.assertOptions(options, ['allowRelative', 'allowQuerySquareBrackets', 'domain', 'relativeOnly', 'scheme', 'encodeUri']);\n\n if (options.domain) {\n Common.assertOptions(options.domain, ['allowFullyQualified', 'allowUnicode', 'maxDomainSegments', 'minDomainSegments', 'tlds']);\n }\n\n const { regex, scheme } = uriRegex(options);\n const domain = options.domain ? internals.addressOptions(options.domain) : null;\n return this.$_addRule({ name: 'uri', args: { options }, regex, domain, scheme });\n },\n validate(value, helpers, { options }, { regex, domain, scheme }) {\n\n if (['http:/', 'https:/'].includes(value)) { // scheme:/ is technically valid but makes no sense\n return helpers.error('string.uri');\n }\n\n let match = regex.exec(value);\n\n if (!match && helpers.prefs.convert && options.encodeUri) {\n const encoded = encodeURI(value);\n match = regex.exec(encoded);\n if (match) {\n value = encoded;\n }\n }\n\n if (match) {\n const matched = match[1] || match[2];\n if (domain &&\n (!options.allowRelative || matched) &&\n !isDomainValid(matched, domain)) {\n\n return helpers.error('string.domain', { value: matched });\n }\n\n return value;\n }\n\n if (options.relativeOnly) {\n return helpers.error('string.uriRelativeOnly');\n }\n\n if (options.scheme) {\n return helpers.error('string.uriCustomScheme', { scheme, value });\n }\n\n return helpers.error('string.uri');\n },\n jsonSchema(rule, res) {\n\n res.format = 'uri';\n return res;\n }\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.replacements) {\n for (const { pattern, replacement } of desc.replacements) {\n obj = obj.replace(pattern, replacement);\n }\n }\n\n return obj;\n }\n },\n\n messages: {\n 'string.alphanum': '{{#label}} must only contain alpha-numeric characters',\n 'string.base': '{{#label}} must be a string',\n 'string.base64': '{{#label}} must be a valid base64 string',\n 'string.creditCard': '{{#label}} must be a credit card',\n 'string.dataUri': '{{#label}} must be a valid dataUri string',\n 'string.domain': '{{#label}} must contain a valid domain name',\n 'string.email': '{{#label}} must be a valid email',\n 'string.empty': '{{#label}} is not allowed to be empty',\n 'string.guid': '{{#label}} must be a valid GUID',\n 'string.hex': '{{#label}} must only contain hexadecimal characters',\n 'string.hexAlign': '{{#label}} hex decoded representation must be byte aligned',\n 'string.hostname': '{{#label}} must be a valid hostname',\n 'string.ip': '{{#label}} must be a valid ip address with a {{#cidr}} CIDR',\n 'string.ipVersion': '{{#label}} must be a valid ip address of one of the following versions {{#version}} with a {{#cidr}} CIDR',\n 'string.isoDate': '{{#label}} must be in iso format',\n 'string.isoDuration': '{{#label}} must be a valid ISO 8601 duration',\n 'string.length': '{{#label}} length must be {{#limit}} characters long',\n 'string.lowercase': '{{#label}} must only contain lowercase characters',\n 'string.max': '{{#label}} length must be less than or equal to {{#limit}} characters long',\n 'string.min': '{{#label}} length must be at least {{#limit}} characters long',\n 'string.normalize': '{{#label}} must be unicode normalized in the {{#form}} form',\n 'string.token': '{{#label}} must only contain alpha-numeric and underscore characters',\n 'string.pattern.base': '{{#label}} with value {:[.]} fails to match the required pattern: {{#regex}}',\n 'string.pattern.name': '{{#label}} with value {:[.]} fails to match the {{#name}} pattern',\n 'string.pattern.invert.base': '{{#label}} with value {:[.]} matches the inverted pattern: {{#regex}}',\n 'string.pattern.invert.name': '{{#label}} with value {:[.]} matches the inverted {{#name}} pattern',\n 'string.trim': '{{#label}} must not have leading or trailing whitespace',\n 'string.uri': '{{#label}} must be a valid uri',\n 'string.uriCustomScheme': '{{#label}} must be a valid uri with a scheme matching the {{#scheme}} pattern',\n 'string.uriRelativeOnly': '{{#label}} must be a valid relative uri',\n 'string.uppercase': '{{#label}} must only contain uppercase characters'\n }\n});\n\n\n// Helpers\n\ninternals.addressOptions = function (options) {\n\n if (!options) {\n return internals.tlds || options; // $lab:coverage:ignore$\n }\n\n // minDomainSegments\n\n assert(options.minDomainSegments === undefined ||\n Number.isSafeInteger(options.minDomainSegments) && options.minDomainSegments > 0, 'minDomainSegments must be a positive integer');\n\n // maxDomainSegments\n\n assert(options.maxDomainSegments === undefined ||\n Number.isSafeInteger(options.maxDomainSegments) && options.maxDomainSegments > 0, 'maxDomainSegments must be a positive integer');\n\n // tlds\n\n if (options.tlds === false) {\n return options;\n }\n\n if (options.tlds === true ||\n options.tlds === undefined) {\n\n assert(internals.tlds, 'Built-in TLD list disabled');\n return Object.assign({}, options, internals.tlds);\n }\n\n assert(typeof options.tlds === 'object', 'tlds must be true, false, or an object');\n\n const deny = options.tlds.deny;\n if (deny) {\n if (Array.isArray(deny)) {\n options = Object.assign({}, options, { tlds: { deny: new Set(deny) } });\n }\n\n assert(options.tlds.deny instanceof Set, 'tlds.deny must be an array, Set, or boolean');\n assert(!options.tlds.allow, 'Cannot specify both tlds.allow and tlds.deny lists');\n internals.validateTlds(options.tlds.deny, 'tlds.deny');\n return options;\n }\n\n const allow = options.tlds.allow;\n if (!allow) {\n return { ...options, tlds: false };\n }\n\n if (allow === true) {\n assert(internals.tlds, 'Built-in TLD list disabled');\n return Object.assign({}, options, internals.tlds);\n }\n\n if (Array.isArray(allow)) {\n options = Object.assign({}, options, { tlds: { allow: new Set(allow) } });\n }\n\n assert(options.tlds.allow instanceof Set, 'tlds.allow must be an array, Set, or boolean');\n internals.validateTlds(options.tlds.allow, 'tlds.allow');\n return options;\n};\n\n\ninternals.validateTlds = function (set, source) {\n\n for (const tld of set) {\n assert(isDomainValid(tld, { minDomainSegments: 1, maxDomainSegments: 1 }), `${source} must contain valid top level domain names`);\n }\n};\n\n\ninternals.isoDate = function (value) {\n\n if (!Common.isIsoDate(value)) {\n return null;\n }\n\n if (/.*T.*[+-]\\d\\d$/.test(value)) { // Add missing trailing zeros to timeshift\n value += '00';\n }\n\n const date = new Date(value);\n if (isNaN(date.getTime())) {\n return null;\n }\n\n return date.toISOString();\n};\n\n\ninternals.length = function (schema, name, limit, operator, encoding) {\n\n assert(!encoding || Buffer && Buffer.isEncoding(encoding), 'Invalid encoding:', encoding); // $lab:coverage:ignore$\n\n return schema.$_addRule({ name, method: 'length', args: { limit, encoding }, operator });\n};\n","'use strict';\n\nconst { assert } = require('@hapi/hoek');\n\nconst Any = require('./any');\n\n\nconst internals = {};\n\n\ninternals.Map = class extends Map {\n\n slice() {\n\n return new internals.Map(this);\n }\n};\n\n\nmodule.exports = Any.extend({\n\n type: 'symbol',\n\n terms: {\n\n map: { init: new internals.Map() }\n },\n\n coerce: {\n method(value, { schema, error }) {\n\n const lookup = schema.$_terms.map.get(value);\n if (lookup) {\n value = lookup;\n }\n\n if (!schema._flags.only ||\n typeof value === 'symbol') {\n\n return { value };\n }\n\n return { value, errors: error('symbol.map', { map: schema.$_terms.map }) };\n }\n },\n\n validate(value, { error }) {\n\n if (typeof value !== 'symbol') {\n return { value, errors: error('symbol.base') };\n }\n },\n\n rules: {\n map: {\n method(iterable) {\n\n if (iterable &&\n !iterable[Symbol.iterator] &&\n typeof iterable === 'object') {\n\n iterable = Object.entries(iterable);\n }\n\n assert(iterable && iterable[Symbol.iterator], 'Iterable must be an iterable or object');\n\n const obj = this.clone();\n\n const symbols = [];\n for (const entry of iterable) {\n assert(entry && entry[Symbol.iterator], 'Entry must be an iterable');\n const [key, value] = entry;\n\n assert(typeof key !== 'object' && typeof key !== 'function' && typeof key !== 'symbol', 'Key must not be of type object, function, or Symbol');\n assert(typeof value === 'symbol', 'Value must be a Symbol');\n\n obj.$_terms.map.set(key, value);\n symbols.push(value);\n }\n\n return obj.valid(...symbols);\n }\n }\n },\n\n manifest: {\n\n build(obj, desc) {\n\n if (desc.map) {\n obj = obj.map(desc.map);\n }\n\n return obj;\n }\n },\n\n jsonSchema(schema, json, mode, options) {\n\n const map = schema.$_terms.map;\n if (!map.size) {\n return {};\n }\n\n return {\n anyOf: Array.from(map.keys()).map((key) => ({ const: key }))\n };\n },\n\n messages: {\n 'symbol.base': '{{#label}} must be a symbol',\n 'symbol.map': '{{#label}} must be one of {{#map}}'\n }\n});\n","'use strict';\n\nconst { assert, clone } = require('@hapi/hoek');\n\nconst Cache = require('./cache');\nconst Common = require('./common');\nconst Compile = require('./compile');\nconst Errors = require('./errors');\nconst Extend = require('./extend');\nconst Manifest = require('./manifest');\nconst Ref = require('./ref');\nconst Template = require('./template');\nconst Trace = require('./trace');\n\nlet Schemas;\n\n\nconst internals = {\n types: {\n alternatives: require('./types/alternatives'),\n any: require('./types/any'),\n array: require('./types/array'),\n boolean: require('./types/boolean'),\n date: require('./types/date'),\n function: require('./types/function'),\n link: require('./types/link'),\n number: require('./types/number'),\n object: require('./types/object'),\n string: require('./types/string'),\n symbol: require('./types/symbol')\n },\n aliases: {\n alt: 'alternatives',\n bool: 'boolean',\n func: 'function'\n }\n};\n\n\nif (Buffer) { // $lab:coverage:ignore$\n internals.types.binary = require('./types/binary');\n}\n\n\ninternals.root = function () {\n\n const root = {\n _types: new Set(Object.keys(internals.types))\n };\n\n // Types\n\n for (const type of root._types) {\n root[type] = function (...args) {\n\n assert(!args.length || ['alternatives', 'link', 'object'].includes(type), 'The', type, 'type does not allow arguments');\n return internals.generate(this, internals.types[type], args);\n };\n }\n\n // Shortcuts\n\n for (const method of ['allow', 'custom', 'disallow', 'equal', 'exist', 'forbidden', 'invalid', 'not', 'only', 'optional', 'options', 'prefs', 'preferences', 'required', 'strip', 'valid', 'when']) {\n root[method] = function (...args) {\n\n return this.any()[method](...args);\n };\n }\n\n // Methods\n\n Object.assign(root, internals.methods);\n\n // Aliases\n\n for (const alias in internals.aliases) {\n const target = internals.aliases[alias];\n root[alias] = root[target];\n }\n\n root.x = root.expression;\n\n // Trace\n\n if (Trace.setup) { // $lab:coverage:ignore$\n Trace.setup(root);\n }\n\n return root;\n};\n\n\ninternals.methods = {\n\n ValidationError: Errors.ValidationError,\n version: Common.version,\n cache: Cache.provider,\n\n assert(value, schema, ...args /* [message], [options] */) {\n\n internals.assert(value, schema, true, args);\n },\n\n attempt(value, schema, ...args /* [message], [options] */) {\n\n return internals.assert(value, schema, false, args);\n },\n\n build(desc) {\n\n assert(typeof Manifest.build === 'function', 'Manifest functionality disabled');\n return Manifest.build(this, desc);\n },\n\n checkPreferences(prefs) {\n\n Common.checkPreferences(prefs);\n },\n\n compile(schema, options) {\n\n return Compile.compile(this, schema, options);\n },\n\n defaults(modifier) {\n\n assert(typeof modifier === 'function', 'modifier must be a function');\n\n const joi = Object.assign({}, this);\n for (const type of joi._types) {\n const schema = modifier(joi[type]());\n assert(Common.isSchema(schema), 'modifier must return a valid schema object');\n\n joi[type] = function (...args) {\n\n return internals.generate(this, schema, args);\n };\n }\n\n return joi;\n },\n\n expression(...args) {\n\n return new Template(...args);\n },\n\n extend(...extensions) {\n\n Common.verifyFlat(extensions, 'extend');\n\n Schemas = Schemas || require('./schemas');\n\n assert(extensions.length, 'You need to provide at least one extension');\n this.assert(extensions, Schemas.extensions);\n\n const joi = Object.assign({}, this);\n joi._types = new Set(joi._types);\n\n for (let extension of extensions) {\n if (typeof extension === 'function') {\n extension = extension(joi);\n }\n\n this.assert(extension, Schemas.extension);\n\n const expanded = internals.expandExtension(extension, joi);\n for (const item of expanded) {\n assert(joi[item.type] === undefined || joi._types.has(item.type), 'Cannot override name', item.type);\n\n const base = item.base || this.any();\n const schema = Extend.type(base, item);\n\n joi._types.add(item.type);\n joi[item.type] = function (...args) {\n\n return internals.generate(this, schema, args);\n };\n }\n }\n\n return joi;\n },\n\n isError: Errors.ValidationError.isError,\n isExpression: Template.isTemplate,\n isRef: Ref.isRef,\n isSchema: Common.isSchema,\n\n in(...args) {\n\n return Ref.in(...args);\n },\n\n override: Common.symbols.override,\n\n ref(...args) {\n\n return Ref.create(...args);\n },\n\n types() {\n\n const types = {};\n for (const type of this._types) {\n types[type] = this[type]();\n }\n\n for (const target in internals.aliases) {\n types[target] = this[target]();\n }\n\n return types;\n }\n};\n\n\n// Helpers\n\ninternals.assert = function (value, schema, annotate, args /* [message], [options] */) {\n\n const message = args[0] instanceof Error || typeof args[0] === 'string' ? args[0] : null;\n const options = message !== null ? args[1] : args[0];\n const result = schema.validate(value, Common.preferences({ errors: { stack: true } }, options || {}));\n\n let error = result.error;\n if (!error) {\n return result.value;\n }\n\n if (message instanceof Error) {\n throw message;\n }\n\n const display = annotate && typeof error.annotate === 'function' ? error.annotate() : error.message;\n\n if (error instanceof Errors.ValidationError === false) {\n error = clone(error);\n }\n\n error.message = message ? `${message} ${display}` : display;\n throw error;\n};\n\n\ninternals.generate = function (root, schema, args) {\n\n assert(root, 'Must be invoked on a Joi instance.');\n\n schema.$_root = root;\n\n if (!schema._definition.args ||\n !args.length) {\n\n return schema;\n }\n\n return schema._definition.args(schema, ...args);\n};\n\n\ninternals.expandExtension = function (extension, joi) {\n\n if (typeof extension.type === 'string') {\n return [extension];\n }\n\n const extended = [];\n for (const type of joi._types) {\n if (extension.type.test(type)) {\n const item = Object.assign({}, extension);\n item.type = type;\n item.base = joi[type]();\n extended.push(item);\n }\n }\n\n return extended;\n};\n\n\nmodule.exports = internals.root();\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,10,11,12,13,14,16,35,41,42,43,44,45,46,47],"mappings":"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"}