Files
boc/vims-backend/node_modules/joi/dist/joi-browser.min.mjs.map
T
Bernt 6de2455917 v1.2.0: Add Global Markets footer, translated to 9 languages
- Added GLOBAL_MARKETS_TITLE to all translation files
- Updated footer with 12 markets (4 active + 8 upcoming)
- Translated market section to: zh-cn, zh-tw, ja, ko, th, vi, id, ms, hi
- Built and deployed to production
- CloudFront invalidation: I3RTMXVFDJXWLG3SYX208OP1CC
2026-07-08 19:56:03 +00:00

1 line
537 KiB
Plaintext

{"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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"}