@nhtio/validation 0.1.0-master-5ddd6b01

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.mjs.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.mjs","names":["err","Stringify","AssertError","Assert","internals","i","internals","Reach","Types","Utils","internals","clone","keys","proto","Joi","internals","internals","i","internals","i","name","set","Clone","Common","internals","i","keys","Common","Template","messages","lang","message","err","Assert","Clone","Reach","Common","Template","internals","i","Assert","Clone","Common","Errors","Ref","internals","err","i","wrap","messages","Assert","Clone","Template","messages","Assert","AssertError","Messages","Schemas","internals","keys","name","err","assert","Assert","Clone","Common","internals","Assert","Common","Ref","internals","Joi","err","valid","rule","i","Assert","Clone","Common","Messages","internals","from","name","aliases","Assert","Clone","Common","Messages","Ref","Template","Schemas","internals","to","from","keys","name","Types","internals","i","err","ignore","DeepEqual","Errors","internals","set","name","to","from","Assert","Clone","Utils","internals","i","keys","Assert","Common","Ref","internals","clone","name","i","Clone","Reach","Common","internals","debug","i","Assert","Clone","Ignore","Reach","Common","Errors","internals","messages","err","debug","match","Assert","DeepEqual","Common","internals","set","from","map","Assert","Clone","DeepEqual","Merge","Cache","Common","Compile","Errors","Extend","Manifest","Messages","Ref","Trace","Values","internals","to","err","description","name","cache","i","messages","id","Assert","Common","description","err","messages","Assert","Merge","Any","Common","Compile","Errors","Ref","internals","i","match","name","valid","Assert","DeepEqual","Reach","Any","Common","Compile","internals","sort","i","isValid","name","compare","err","Assert","Any","Common","internals","i","Assert","Any","Common","Template","internals","format","to","name","Assert","Clone","Merge","Reach","internals","defaults","keys","merge","src","i","Assert","internals","sort","valid","i","Assert","Clone","Any","Common","Compile","Errors","Ref","Template","internals","keys","name","from","to","clone","main","match","i","Assert","Keys","n","Assert","Any","Common","Compile","Errors","internals","Assert","Any","Common","internals","name","sign","Errors","internals","ascii","tlds","i","err","Domain","Errors","internals","ascii","Assert","EscapeRegex","internals","rfc3986","i","scheme","Assert","Uri","i","version","internals","Assert","EscapeRegex","Any","Common","internals","min","i","set","version","re","name","errorCode","match","Assert","Any","internals","Assert","Common","name","Assert","Clone","internals","types","INVALID","Big","n","x","parse","i","round","stringify","s","l","cmp","t","value: Big","limit: Big","operator: '>' | '<' | '>=' | '<=' | 'multiple'","bigint: ExtensionFactory","joi: Root","format","singleton","format","locale","i","name","s","format","locale","locale","calendar","i","Locale","format","offset","s","format","defaultZone","offset","i","min","max","now","n","locale","t","ordinal","i","isUndefined","isNumber","isString","isDate","compare","keys","x","n","isLeapYear","daysInYear","daysInMonth","firstWeekOffset","untruncateYear","locale","offset","format","hours","minutes","sign","months","numeric","s","token","locale","i","n","formatOffset","meridiem","tokens","t","regexes","parse","s","keys","match","i","obsOffsets","rfc2822","offset","preprocessRFC2822","INVALID","orderedUnits","clone","Duration","l","n","s","i","eq","INVALID","s","e","i","x","proto","locale","days","i","s","offset","token","t","untruncateYear","re","locale","tokens","format","clone","offset","format","round","milliseconds","seconds","t","calendar","locale","Duration","i","t","n","i","s","l","e","r","u","a","M","m","f","$","y","v","g","D","o","d","c","h","value: unknown","type: string","ctor?: new (...args: any[]) => T","value: DateTime","limit: DateTime","operator: '===' | '=' | '>' | '<' | '>=' | '<='","value: unknown","format?: Tokens","helpers: CustomHelpers","datetime: ExtensionFactory","joi: Root","zone: string | Zone","format: Tokens","formatOpts: LocaleOptions","locale: string","i","format","locale","to","from","Moment","name","now","sign","token","ordinal","diff","localeData","s","n","x","weekdays","hours","minutes","l","match","tokens","meridiem","max","years","months","weeks","days","seconds","milliseconds","offset","clone","datetime","eras","erasNarrow","clone$1","thresholds","t","format","MAX_LENGTH","MAX_SAFE_INTEGER","MAX_SAFE_COMPONENT_LENGTH","MAX_SAFE_BUILD_LENGTH","debug","debug","re","t","MAX_LENGTH","token","max","name","parseOptions","compareIdentifiers","debug","re","parseOptions","SemVer","version","t","i","match","prerelease","SemVer","parse","version","parse","valid","version","parse","clean","version","s","SemVer","inc","version","parse","diff","SemVer","major","SemVer","minor","SemVer","patch","parse","prerelease","version","SemVer","compare","compare","rcompare","compare","compareLoose","SemVer","compareBuild","compareBuild","sort","compareBuild","rsort","compare","gt","compare","lt","compare","eq","compare","neq","compare","gte","compare","lte","eq","neq","gt","gte","lt","lte","cmp","SemVer","parse","re","coerce","version","match","t","major","minor","patch","prerelease","Range","Comparator","i","re","t","version","SemVer","parseOptions","debug","from","to","set","ANY","Comparator","SemVer","version","Range","cmp","Range","satisfies","version","Range","toComparators","SemVer","Range","maxSatisfying","max","SemVer","Range","minSatisfying","min","SemVer","Range","gt","minVersion","i","Range","validRange","SemVer","Comparator","Range","satisfies","gt","lt","lte","gte","outside","version","i","ANY","outside","gtr","version","outside","ltr","version","Range","intersects","satisfies","compare","set","version","min","max","Range","Comparator","satisfies","compare","subset","gt","lt","eq","i","s","l","t","n","lt","add","_a","_b","fl","data: string","base64: string","value: any","schema: AnySchema","rule: any","validator: ValidationRoot","NON_ASCII_RX","Url","tlds","ascii","i","err","Util","ascii","AssertError","err","AssertError","assert","Assert","internals","i","internals","Reach","Types","Utils","internals","clone","keys","proto","err","Assert","Clone","Utils","internals","i","keys","Assert","Reach","internals","defaults","keys","merge","src","i","internals","internals","i","err","Assert","internals","compare","map","match","keys","set","internals","i","internals","internals","internals","internals","once","internals","rfc3986","i","scheme","version","i","i","name","set","ignore"],"sources":["../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/stringify.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/error.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/assert.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/reach.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/types.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/utils.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/clone.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/package.json","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/schemas.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/escapeHtml.js","../node_modules/.pnpm/@sideway+formula@3.0.1/node_modules/@sideway/formula/lib/index.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/annotate.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/errors.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/ref.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/template.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/messages.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/common.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/cache.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/compile.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/extend.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/manifest.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/deepEqual.js","../node_modules/.pnpm/@sideway+pinpoint@2.0.0/node_modules/@sideway/pinpoint/lib/index.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/trace.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/merge.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/modify.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/ignore.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/state.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/validator.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/values.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/base.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/any.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/alternatives.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/array.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/boolean.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/date.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/applyToDefaults.js","../node_modules/.pnpm/@hapi+topo@5.1.0/node_modules/@hapi/topo/lib/index.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/keys.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/function.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/link.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/number.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/object.js","../__vite-browser-external","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/errors.js","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/domain.js","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/email.js","../node_modules/.pnpm/@hapi+hoek@9.3.0/node_modules/@hapi/hoek/lib/escapeRegex.js","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/uri.js","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/ip.js","../node_modules/.pnpm/@sideway+address@4.1.5/node_modules/@sideway/address/lib/tlds.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/string.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/symbol.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/types/binary.js","../node_modules/.pnpm/joi@17.13.3/node_modules/joi/lib/index.js","../node_modules/.pnpm/big.js@7.0.1/node_modules/big.js/big.mjs","../src/private/schemas/bigint.ts","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/errors.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/formats.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/zone.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/zones/systemZone.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/zones/IANAZone.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/locale.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/zones/fixedOffsetZone.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/zones/invalidZone.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/zoneUtil.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/digits.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/settings.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/invalid.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/conversions.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/util.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/english.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/formatter.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/regexParser.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/duration.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/interval.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/info.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/diff.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/impl/tokenParser.js","../node_modules/.pnpm/luxon@3.7.1/node_modules/luxon/src/datetime.js","../node_modules/.pnpm/dayjs@1.11.13/node_modules/dayjs/dayjs.min.js","../src/private/guards.ts","../src/private/schemas/datetime.ts","../node_modules/.pnpm/moment@2.30.1/node_modules/moment/dist/moment.js","../node_modules/.pnpm/@joi+date@2.1.1/node_modules/@joi/date/lib/index.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/constants.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/debug.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/re.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/parse-options.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/identifiers.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/semver.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/parse.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/valid.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/clean.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/inc.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/diff.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/major.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/minor.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/patch.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/prerelease.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rcompare.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-loose.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/compare-build.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/sort.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/rsort.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gt.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lt.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/eq.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/neq.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/gte.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/lte.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/cmp.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/coerce.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/internal/lrucache.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/range.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/classes/comparator.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/functions/satisfies.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/to-comparators.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/max-satisfying.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-satisfying.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/min-version.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/valid.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/outside.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/gtr.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/ltr.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/intersects.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/simplify.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/ranges/subset.js","../node_modules/.pnpm/semver@7.7.2/node_modules/semver/index.js","../node_modules/.pnpm/fflate@0.8.2/node_modules/fflate/esm/browser.js","../src/private/utils.ts","../src/private/index.ts","../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/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","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/bench.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/block.js","../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/escapeRegex.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/contain.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/escapeHeaderAttribute.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/escapeJson.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/flatten.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/intersect.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/isPromise.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/once.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/reachTemplate.js","../node_modules/.pnpm/@hapi+hoek@11.0.7/node_modules/@hapi/hoek/lib/wait.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/decode.js","../node_modules/.pnpm/@hapi+address@5.1.1/node_modules/@hapi/address/esm/index.js","../node_modules/.pnpm/@hapi+formula@3.0.2/node_modules/@hapi/formula/lib/index.js","../node_modules/.pnpm/@hapi+pinpoint@2.0.1/node_modules/@hapi/pinpoint/lib/index.js","../node_modules/.pnpm/@hapi+tlds@1.1.2/node_modules/@hapi/tlds/dist/esm/tlds.js","../node_modules/.pnpm/@hapi+tlds@1.1.2/node_modules/@hapi/tlds/dist/esm/index.js","../src/index.ts"],"sourcesContent":["'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 Stringify = require('./stringify');\n\n\nconst internals = {};\n\n\nmodule.exports = class extends Error {\n\n constructor(args) {\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 super(msgs.join(' ') || 'Unknown error');\n\n if (typeof Error.captureStackTrace === 'function') { // $lab:coverage:ignore$\n Error.captureStackTrace(this, exports.assert);\n }\n }\n};\n","'use strict';\n\nconst AssertError = require('./error');\n\n\nconst internals = {};\n\n\nmodule.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 throw new AssertError(args);\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 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 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};\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 if (baseProto === Types.buffer) {\n return Buffer && Buffer.from(obj); // $lab:coverage:ignore$\n }\n\n if (baseProto === Types.date) {\n return new Date(obj.getTime());\n }\n\n if (baseProto === Types.regex) {\n return new RegExp(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 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\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","{\n \"name\": \"joi\",\n \"description\": \"Object schema validation\",\n \"version\": \"17.13.3\",\n \"repository\": \"git://github.com/hapijs/joi\",\n \"main\": \"lib/index.js\",\n \"types\": \"lib/index.d.ts\",\n \"browser\": \"dist/joi-browser.min.js\",\n \"files\": [\n \"lib/**/*\",\n \"dist/*\"\n ],\n \"keywords\": [\n \"schema\",\n \"validation\"\n ],\n \"dependencies\": {\n \"@hapi/hoek\": \"^9.3.0\",\n \"@hapi/topo\": \"^5.1.0\",\n \"@sideway/address\": \"^4.1.5\",\n \"@sideway/formula\": \"^3.0.1\",\n \"@sideway/pinpoint\": \"^2.0.0\"\n },\n \"devDependencies\": {\n \"@hapi/bourne\": \"2.x.x\",\n \"@hapi/code\": \"8.x.x\",\n \"@hapi/joi-legacy-test\": \"npm:@hapi/joi@15.x.x\",\n \"@hapi/lab\": \"^25.1.3\",\n \"@types/node\": \"^14.18.63\",\n \"typescript\": \"4.3.x\"\n },\n \"scripts\": {\n \"prepublishOnly\": \"cd browser && npm install && npm run build\",\n \"test\": \"lab -t 100 -a @hapi/code -L -Y\",\n \"test-cov-html\": \"lab -r html -o coverage.html -a @hapi/code\"\n },\n \"license\": \"BSD-3-Clause\"\n}\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});\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 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),\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\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 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 Clone = require('@hapi/hoek/lib/clone');\n\nconst Common = require('./common');\n\n\nconst internals = {\n annotations: Symbol('annotations')\n};\n\n\nexports.error = function (stripColorCodes) {\n\n if (!this._original ||\n typeof this._original !== 'object') {\n\n return this.details[0].message;\n }\n\n const redFgEscape = stripColorCodes ? '' : '\\u001b[31m';\n const redBgEscape = stripColorCodes ? '' : '\\u001b[41m';\n const endColor = stripColorCodes ? '' : '\\u001b[0m';\n\n const obj = Clone(this._original);\n\n for (let i = this.details.length - 1; i >= 0; --i) { // Reverse order to process deepest child first\n const pos = i + 1;\n const error = this.details[i];\n const path = error.path;\n let node = obj;\n for (let j = 0; ; ++j) {\n const seg = path[j];\n\n if (Common.isSchema(node)) {\n node = node.clone(); // joi schemas are not cloned by hoek, we have to take this extra step\n }\n\n if (j + 1 < path.length &&\n typeof node[seg] !== 'string') {\n\n node = node[seg];\n }\n else {\n const refAnnotations = node[internals.annotations] || { errors: {}, missing: {} };\n node[internals.annotations] = refAnnotations;\n\n const cacheKey = seg || error.context.key;\n\n if (node[seg] !== undefined) {\n refAnnotations.errors[cacheKey] = refAnnotations.errors[cacheKey] || [];\n refAnnotations.errors[cacheKey].push(pos);\n }\n else {\n refAnnotations.missing[cacheKey] = pos;\n }\n\n break;\n }\n }\n }\n\n const replacers = {\n key: /_\\$key\\$_([, \\d]+)_\\$end\\$_\"/g,\n missing: /\"_\\$miss\\$_([^|]+)\\|(\\d+)_\\$end\\$_\": \"__missing__\"/g,\n arrayIndex: /\\s*\"_\\$idx\\$_([, \\d]+)_\\$end\\$_\",?\\n(.*)/g,\n specials: /\"\\[(NaN|Symbol.*|-?Infinity|function.*|\\(.*)]\"/g\n };\n\n let message = internals.safeStringify(obj, 2)\n .replace(replacers.key, ($0, $1) => `\" ${redFgEscape}[${$1}]${endColor}`)\n .replace(replacers.missing, ($0, $1, $2) => `${redBgEscape}\"${$1}\"${endColor}${redFgEscape} [${$2}]: -- missing --${endColor}`)\n .replace(replacers.arrayIndex, ($0, $1, $2) => `\\n${$2} ${redFgEscape}[${$1}]${endColor}`)\n .replace(replacers.specials, ($0, $1) => $1);\n\n message = `${message}\\n${redFgEscape}`;\n\n for (let i = 0; i < this.details.length; ++i) {\n const pos = i + 1;\n message = `${message}\\n[${pos}] ${this.details[i].message}`;\n }\n\n message = message + endColor;\n\n return message;\n};\n\n\n// Inspired by json-stringify-safe\n\ninternals.safeStringify = function (obj, spaces) {\n\n return JSON.stringify(obj, internals.serializer(), spaces);\n};\n\n\ninternals.serializer = function () {\n\n const keys = [];\n const stack = [];\n\n const cycleReplacer = (key, value) => {\n\n if (stack[0] === value) {\n return '[Circular ~]';\n }\n\n return '[Circular ~.' + keys.slice(0, stack.indexOf(value)).join('.') + ']';\n };\n\n return function (key, value) {\n\n if (stack.length > 0) {\n const thisPos = stack.indexOf(this);\n if (~thisPos) {\n stack.length = thisPos + 1;\n keys.length = thisPos + 1;\n keys[thisPos] = key;\n }\n else {\n stack.push(this);\n keys.push(key);\n }\n\n if (~stack.indexOf(value)) {\n value = cycleReplacer.call(this, key, value);\n }\n }\n else {\n stack.push(value);\n }\n\n if (value) {\n const annotations = value[internals.annotations];\n if (annotations) {\n if (Array.isArray(value)) {\n const annotated = [];\n\n for (let i = 0; i < value.length; ++i) {\n if (annotations.errors[i]) {\n annotated.push(`_$idx$_${annotations.errors[i].sort().join(', ')}_$end$_`);\n }\n\n annotated.push(value[i]);\n }\n\n value = annotated;\n }\n else {\n for (const errorKey in annotations.errors) {\n value[`${errorKey}_$key$_${annotations.errors[errorKey].sort().join(', ')}_$end$_`] = value[errorKey];\n value[errorKey] = undefined;\n }\n\n for (const missingKey in annotations.missing) {\n value[`_$miss$_${missingKey}|${annotations.missing[missingKey]}_$end$_`] = '__missing__';\n }\n }\n\n return value;\n }\n }\n\n if (value === Infinity ||\n value === -Infinity ||\n Number.isNaN(value) ||\n typeof value === 'function' ||\n typeof value === 'symbol') {\n\n return '[' + value.toString() + ']';\n }\n\n return value;\n };\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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\nconst Reach = require('@hapi/hoek/lib/reach');\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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\nconst EscapeHtml = require('@hapi/hoek/lib/escapeHtml');\nconst Formula = require('@sideway/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(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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\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 = require('@hapi/hoek/lib/assert');\nconst AssertError = require('@hapi/hoek/lib/error');\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.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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\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/lib/assert');\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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\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 // 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/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\n\nconst Common = require('./common');\nconst Messages = require('./messages');\nconst Ref = require('./ref');\nconst Template = require('./template');\n\nlet Schemas;\n\n\nconst internals = {};\n\n\nexports.describe = function (schema) {\n\n const def = schema._definition;\n\n // Type\n\n const desc = {\n type: schema.type,\n flags: {},\n rules: []\n };\n\n // Flags\n\n for (const flag in schema._flags) {\n if (flag[0] !== '_') {\n desc.flags[flag] = internals.describe(schema._flags[flag]);\n }\n }\n\n if (!Object.keys(desc.flags).length) {\n delete desc.flags;\n }\n\n // Preferences\n\n if (schema._preferences) {\n desc.preferences = Clone(schema._preferences, { shallow: ['messages'] });\n delete desc.preferences[Common.symbols.prefs];\n if (desc.preferences.messages) {\n desc.preferences.messages = Messages.decompile(desc.preferences.messages);\n }\n }\n\n // Allow / Invalid\n\n if (schema._valids) {\n desc.allow = schema._valids.describe();\n }\n\n if (schema._invalids) {\n desc.invalid = schema._invalids.describe();\n }\n\n // Rules\n\n for (const rule of schema._rules) {\n const ruleDef = def.rules[rule.name];\n if (ruleDef.manifest === false) { // Defaults to true\n continue;\n }\n\n const item = { name: rule.name };\n\n for (const custom in def.modifiers) {\n if (rule[custom] !== undefined) {\n item[custom] = internals.describe(rule[custom]);\n }\n }\n\n if (rule.args) {\n item.args = {};\n for (const key in rule.args) {\n const arg = rule.args[key];\n if (key === 'options' &&\n !Object.keys(arg).length) {\n\n continue;\n }\n\n item.args[key] = internals.describe(arg, { assign: key });\n }\n\n if (!Object.keys(item.args).length) {\n delete item.args;\n }\n }\n\n desc.rules.push(item);\n }\n\n if (!desc.rules.length) {\n delete desc.rules;\n }\n\n // Terms (must be last to verify no name conflicts)\n\n for (const term in schema.$_terms) {\n if (term[0] === '_') {\n continue;\n }\n\n Assert(!desc[term], 'Cannot describe schema due to internal name conflict with', term);\n\n const items = schema.$_terms[term];\n if (!items) {\n continue;\n }\n\n if (items instanceof Map) {\n if (items.size) {\n desc[term] = [...items.entries()];\n }\n\n continue;\n }\n\n if (Common.isValues(items)) {\n desc[term] = items.describe();\n continue;\n }\n\n Assert(def.terms[term], 'Term', term, 'missing configuration');\n const manifest = def.terms[term].manifest;\n const mapped = typeof manifest === 'object';\n if (!items.length &&\n !mapped) {\n\n continue;\n }\n\n const normalized = [];\n for (const item of items) {\n normalized.push(internals.describe(item));\n }\n\n // Mapped\n\n if (mapped) {\n const { from, to } = manifest.mapped;\n desc[term] = {};\n for (const item of normalized) {\n desc[term][item[to]] = item[from];\n }\n\n continue;\n }\n\n // Single\n\n if (manifest === 'single') {\n Assert(normalized.length === 1, 'Term', term, 'contains more than one item');\n desc[term] = normalized[0];\n continue;\n }\n\n // Array\n\n desc[term] = normalized;\n }\n\n internals.validate(schema.$_root, desc);\n return desc;\n};\n\n\ninternals.describe = function (item, options = {}) {\n\n if (Array.isArray(item)) {\n return item.map(internals.describe);\n }\n\n if (item === Common.symbols.deepDefault) {\n return { special: 'deep' };\n }\n\n if (typeof item !== 'object' ||\n item === null) {\n\n return item;\n }\n\n if (options.assign === 'options') {\n return Clone(item);\n }\n\n if (Buffer && Buffer.isBuffer(item)) { // $lab:coverage:ignore$\n return { buffer: item.toString('binary') };\n }\n\n if (item instanceof Date) {\n return item.toISOString();\n }\n\n if (item instanceof Error) {\n return item;\n }\n\n if (item instanceof RegExp) {\n if (options.assign === 'regex') {\n return item.toString();\n }\n\n return { regex: item.toString() };\n }\n\n if (item[Common.symbols.literal]) {\n return { function: item.literal };\n }\n\n if (typeof item.describe === 'function') {\n if (options.assign === 'ref') {\n return item.describe().ref;\n }\n\n return item.describe();\n }\n\n const normalized = {};\n for (const key in item) {\n const value = item[key];\n if (value === undefined) {\n continue;\n }\n\n normalized[key] = internals.describe(value, { assign: key });\n }\n\n return normalized;\n};\n\n\nexports.build = function (joi, desc) {\n\n const builder = new internals.Builder(joi);\n return builder.parse(desc);\n};\n\n\ninternals.Builder = class {\n\n constructor(joi) {\n\n this.joi = joi;\n }\n\n parse(desc) {\n\n internals.validate(this.joi, desc);\n\n // Type\n\n let schema = this.joi[desc.type]()._bare();\n const def = schema._definition;\n\n // Flags\n\n if (desc.flags) {\n for (const flag in desc.flags) {\n const setter = def.flags[flag] && def.flags[flag].setter || flag;\n Assert(typeof schema[setter] === 'function', 'Invalid flag', flag, 'for type', desc.type);\n schema = schema[setter](this.build(desc.flags[flag]));\n }\n }\n\n // Preferences\n\n if (desc.preferences) {\n schema = schema.preferences(this.build(desc.preferences));\n }\n\n // Allow / Invalid\n\n if (desc.allow) {\n schema = schema.allow(...this.build(desc.allow));\n }\n\n if (desc.invalid) {\n schema = schema.invalid(...this.build(desc.invalid));\n }\n\n // Rules\n\n if (desc.rules) {\n for (const rule of desc.rules) {\n Assert(typeof schema[rule.name] === 'function', 'Invalid rule', rule.name, 'for type', desc.type);\n\n const args = [];\n if (rule.args) {\n const built = {};\n for (const key in rule.args) {\n built[key] = this.build(rule.args[key], { assign: key });\n }\n\n const keys = Object.keys(built);\n const definition = def.rules[rule.name].args;\n if (definition) {\n Assert(keys.length <= definition.length, 'Invalid number of arguments for', desc.type, rule.name, '(expected up to', definition.length, ', found', keys.length, ')');\n for (const { name } of definition) {\n args.push(built[name]);\n }\n }\n else {\n Assert(keys.length === 1, 'Invalid number of arguments for', desc.type, rule.name, '(expected up to 1, found', keys.length, ')');\n args.push(built[keys[0]]);\n }\n }\n\n // Apply\n\n schema = schema[rule.name](...args);\n\n // Ruleset\n\n const options = {};\n for (const custom in def.modifiers) {\n if (rule[custom] !== undefined) {\n options[custom] = this.build(rule[custom]);\n }\n }\n\n if (Object.keys(options).length) {\n schema = schema.rule(options);\n }\n }\n }\n\n // Terms\n\n const terms = {};\n for (const key in desc) {\n if (['allow', 'flags', 'invalid', 'whens', 'preferences', 'rules', 'type'].includes(key)) {\n continue;\n }\n\n Assert(def.terms[key], 'Term', key, 'missing configuration');\n const manifest = def.terms[key].manifest;\n\n if (manifest === 'schema') {\n terms[key] = desc[key].map((item) => this.parse(item));\n continue;\n }\n\n if (manifest === 'values') {\n terms[key] = desc[key].map((item) => this.build(item));\n continue;\n }\n\n if (manifest === 'single') {\n terms[key] = this.build(desc[key]);\n continue;\n }\n\n if (typeof manifest === 'object') {\n terms[key] = {};\n for (const name in desc[key]) {\n const value = desc[key][name];\n terms[key][name] = this.parse(value);\n }\n\n continue;\n }\n\n terms[key] = this.build(desc[key]);\n }\n\n if (desc.whens) {\n terms.whens = desc.whens.map((when) => this.build(when));\n }\n\n schema = def.manifest.build(schema, terms);\n schema.$_temp.ruleset = false;\n return schema;\n }\n\n build(desc, options = {}) {\n\n if (desc === null) {\n return null;\n }\n\n if (Array.isArray(desc)) {\n return desc.map((item) => this.build(item));\n }\n\n if (desc instanceof Error) {\n return desc;\n }\n\n if (options.assign === 'options') {\n return Clone(desc);\n }\n\n if (options.assign === 'regex') {\n return internals.regex(desc);\n }\n\n if (options.assign === 'ref') {\n return Ref.build(desc);\n }\n\n if (typeof desc !== 'object') {\n return desc;\n }\n\n if (Object.keys(desc).length === 1) {\n if (desc.buffer) {\n Assert(Buffer, 'Buffers are not supported');\n return Buffer && Buffer.from(desc.buffer, 'binary'); // $lab:coverage:ignore$\n }\n\n if (desc.function) {\n return { [Common.symbols.literal]: true, literal: desc.function };\n }\n\n if (desc.override) {\n return Common.symbols.override;\n }\n\n if (desc.ref) {\n return Ref.build(desc.ref);\n }\n\n if (desc.regex) {\n return internals.regex(desc.regex);\n }\n\n if (desc.special) {\n Assert(['deep'].includes(desc.special), 'Unknown special value', desc.special);\n return Common.symbols.deepDefault;\n }\n\n if (desc.value) {\n return Clone(desc.value);\n }\n }\n\n if (desc.type) {\n return this.parse(desc);\n }\n\n if (desc.template) {\n return Template.build(desc);\n }\n\n const normalized = {};\n for (const key in desc) {\n normalized[key] = this.build(desc[key], { assign: key });\n }\n\n return normalized;\n }\n};\n\n\ninternals.regex = function (string) {\n\n const end = string.lastIndexOf('/');\n const exp = string.slice(1, end);\n const flags = string.slice(end + 1);\n return new RegExp(exp, flags);\n};\n\n\ninternals.validate = function (joi, desc) {\n\n Schemas = Schemas || require('./schemas');\n\n joi.assert(desc, Schemas.description);\n};\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 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 ||\n !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\nexports.location = function (depth = 0) {\n\n const orig = Error.prepareStackTrace;\n Error.prepareStackTrace = (ignore, stack) => stack;\n\n const capture = {};\n Error.captureStackTrace(capture, this);\n const line = capture.stack[depth + 1];\n\n Error.prepareStackTrace = orig;\n\n return {\n filename: line.getFileName(),\n line: line.getLineNumber()\n };\n};\n","'use strict';\n\nconst DeepEqual = require('@hapi/hoek/lib/deepEqual');\nconst Pinpoint = require('@sideway/pinpoint');\n\nconst Errors = require('./errors');\n\n\nconst internals = {\n codes: {\n error: 1,\n pass: 2,\n full: 3\n },\n labels: {\n 0: 'never used',\n 1: 'always error',\n 2: 'always pass'\n }\n};\n\n\nexports.setup = function (root) {\n\n const trace = function () {\n\n root._tracer = root._tracer || new internals.Tracer();\n return root._tracer;\n };\n\n root.trace = trace;\n root[Symbol.for('@hapi/lab/coverage/initialize')] = trace;\n\n root.untrace = () => {\n\n root._tracer = null;\n };\n};\n\n\nexports.location = function (schema) {\n\n return schema.$_setFlag('_tracerLocation', Pinpoint.location(2)); // base.tracer(), caller\n};\n\n\ninternals.Tracer = class {\n\n constructor() {\n\n this.name = 'Joi';\n this._schemas = new Map();\n }\n\n _register(schema) {\n\n const existing = this._schemas.get(schema);\n if (existing) {\n return existing.store;\n }\n\n const store = new internals.Store(schema);\n const { filename, line } = schema._flags._tracerLocation || Pinpoint.location(5); // internals.tracer(), internals.entry(), exports.entry(), validate(), caller\n this._schemas.set(schema, { filename, line, store });\n return store;\n }\n\n _combine(merged, sources) {\n\n for (const { store } of this._schemas.values()) {\n store._combine(merged, sources);\n }\n }\n\n report(file) {\n\n const coverage = [];\n\n // Process each registered schema\n\n for (const { filename, line, store } of this._schemas.values()) {\n if (file &&\n file !== filename) {\n\n continue;\n }\n\n // Process sub schemas of the registered root\n\n const missing = [];\n const skipped = [];\n\n for (const [schema, log] of store._sources.entries()) {\n\n // Check if sub schema parent skipped\n\n if (internals.sub(log.paths, skipped)) {\n continue;\n }\n\n // Check if sub schema reached\n\n if (!log.entry) {\n missing.push({\n status: 'never reached',\n paths: [...log.paths]\n });\n\n skipped.push(...log.paths);\n continue;\n }\n\n // Check values\n\n for (const type of ['valid', 'invalid']) {\n const set = schema[`_${type}s`];\n if (!set) {\n continue;\n }\n\n const values = new Set(set._values);\n const refs = new Set(set._refs);\n for (const { value, ref } of log[type]) {\n values.delete(value);\n refs.delete(ref);\n }\n\n if (values.size ||\n refs.size) {\n\n missing.push({\n status: [...values, ...[...refs].map((ref) => ref.display)],\n rule: `${type}s`\n });\n }\n }\n\n // Check rules status\n\n const rules = schema._rules.map((rule) => rule.name);\n for (const type of ['default', 'failover']) {\n if (schema._flags[type] !== undefined) {\n rules.push(type);\n }\n }\n\n for (const name of rules) {\n const status = internals.labels[log.rule[name] || 0];\n if (status) {\n const report = { rule: name, status };\n if (log.paths.size) {\n report.paths = [...log.paths];\n }\n\n missing.push(report);\n }\n }\n }\n\n if (missing.length) {\n coverage.push({\n filename,\n line,\n missing,\n severity: 'error',\n message: `Schema missing tests for ${missing.map(internals.message).join(', ')}`\n });\n }\n }\n\n return coverage.length ? coverage : null;\n }\n};\n\n\ninternals.Store = class {\n\n constructor(schema) {\n\n this.active = true;\n this._sources = new Map(); // schema -> { paths, entry, rule, valid, invalid }\n this._combos = new Map(); // merged -> [sources]\n this._scan(schema);\n }\n\n debug(state, source, name, result) {\n\n state.mainstay.debug && state.mainstay.debug.push({ type: source, name, result, path: state.path });\n }\n\n entry(schema, state) {\n\n internals.debug(state, { type: 'entry' });\n\n this._record(schema, (log) => {\n\n log.entry = true;\n });\n }\n\n filter(schema, state, source, value) {\n\n internals.debug(state, { type: source, ...value });\n\n this._record(schema, (log) => {\n\n log[source].add(value);\n });\n }\n\n log(schema, state, source, name, result) {\n\n internals.debug(state, { type: source, name, result: result === 'full' ? 'pass' : result });\n\n this._record(schema, (log) => {\n\n log[source][name] = log[source][name] || 0;\n log[source][name] |= internals.codes[result];\n });\n }\n\n resolve(state, ref, to) {\n\n if (!state.mainstay.debug) {\n return;\n }\n\n const log = { type: 'resolve', ref: ref.display, to, path: state.path };\n state.mainstay.debug.push(log);\n }\n\n value(state, by, from, to, name) {\n\n if (!state.mainstay.debug ||\n DeepEqual(from, to)) {\n\n return;\n }\n\n const log = { type: 'value', by, from, to, path: state.path };\n if (name) {\n log.name = name;\n }\n\n state.mainstay.debug.push(log);\n }\n\n _record(schema, each) {\n\n const log = this._sources.get(schema);\n if (log) {\n each(log);\n return;\n }\n\n const sources = this._combos.get(schema);\n for (const source of sources) {\n this._record(source, each);\n }\n }\n\n _scan(schema, _path) {\n\n const path = _path || [];\n\n let log = this._sources.get(schema);\n if (!log) {\n log = {\n paths: new Set(),\n entry: false,\n rule: {},\n valid: new Set(),\n invalid: new Set()\n };\n\n this._sources.set(schema, log);\n }\n\n if (path.length) {\n log.paths.add(path);\n }\n\n const each = (sub, source) => {\n\n const subId = internals.id(sub, source);\n this._scan(sub, path.concat(subId));\n };\n\n schema.$_modify({ each, ref: false });\n }\n\n _combine(merged, sources) {\n\n this._combos.set(merged, sources);\n }\n};\n\n\ninternals.message = function (item) {\n\n const path = item.paths ? Errors.path(item.paths[0]) + (item.rule ? ':' : '') : '';\n return `${path}${item.rule || ''} (${item.status})`;\n};\n\n\ninternals.id = function (schema, { source, name, path, key }) {\n\n if (schema._flags.id) {\n return schema._flags.id;\n }\n\n if (key) {\n return key;\n }\n\n name = `@${name}`;\n\n if (source === 'terms') {\n return [name, path[Math.min(path.length - 1, 1)]];\n }\n\n return name;\n};\n\n\ninternals.sub = function (paths, skipped) {\n\n for (const path of paths) {\n for (const skip of skipped) {\n if (DeepEqual(path.slice(0, skip.length), skip)) {\n return true;\n }\n }\n }\n\n return false;\n};\n\n\ninternals.debug = function (state, event) {\n\n if (state.mainstay.debug) {\n event.path = state.debug ? [...state.path, state.debug] : state.path;\n state.mainstay.debug.push(event);\n }\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('@hapi/hoek/lib/assert');\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 internals = {};\n\n\nmodule.exports = function () { };\n","'use strict';\n\nconst Clone = require('@hapi/hoek/lib/clone');\nconst Reach = require('@hapi/hoek/lib/reach');\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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\nconst Ignore = require('@hapi/hoek/lib/ignore');\nconst Reach = require('@hapi/hoek/lib/reach');\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\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 = require('@hapi/hoek/lib/assert');\nconst DeepEqual = require('@hapi/hoek/lib/deepEqual');\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 = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\nconst DeepEqual = require('@hapi/hoek/lib/deepEqual');\nconst Merge = require('@hapi/hoek/lib/merge');\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\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 // 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 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\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/lib/assert');\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 = require('@hapi/hoek/lib/assert');\nconst Merge = require('@hapi/hoek/lib/merge');\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 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\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 = require('@hapi/hoek/lib/assert');\nconst DeepEqual = require('@hapi/hoek/lib/deepEqual');\nconst Reach = require('@hapi/hoek/lib/reach');\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 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 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 },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'length', args: { limit }, operator: '>=' });\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 args: ['comparator', 'options'],\n multi: true\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/lib/assert');\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 normalized = schema._flags.sensitive ? value : value.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/lib/assert');\n\nconst Any = require('./any');\nconst Common = require('../common');\nconst Template = require('../template');\n\n\nconst internals = {};\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 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(['iso', 'javascript', 'unix'].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 },\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 },\n\n max: {\n method(date) {\n\n return this.$_addRule({ name: 'max', method: 'compare', args: { date }, operator: '<=' });\n }\n },\n\n min: {\n method(date) {\n\n return this.$_addRule({ name: 'min', method: 'compare', args: { date }, operator: '>=' });\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('./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","'use strict';\n\nconst Assert = require('@hapi/hoek/lib/assert');\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 = require('@hapi/hoek/lib/applyToDefaults');\nconst Assert = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\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 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 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 },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'length', args: { limit }, operator: '>=' });\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\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/lib/assert');\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/lib/assert');\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 validate(value, { schema, state, prefs }) {\n\n Assert(schema.$_terms.link, 'Uninitialized link schema');\n\n const linked = internals.generate(schema, value, state, prefs);\n const ref = schema.$_terms.link[0].ref;\n return linked.$_validate(value, state.nest(linked, `link:${ref.display}:${linked.type}`), prefs);\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\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 (ignoreErr) {\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/lib/assert');\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 },\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 },\n\n less: {\n method(limit) {\n\n return this.$_addRule({ name: 'less', method: 'compare', args: { limit }, operator: '<' });\n }\n },\n\n max: {\n method(limit) {\n\n return this.$_addRule({ name: 'max', method: 'compare', args: { limit }, operator: '<=' });\n }\n },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'compare', args: { limit }, operator: '>=' });\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 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 },\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 },\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","module.exports = {}","'use strict';\n\nexports.codes = {\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};\n\n\nexports.code = function (code) {\n\n return { code, error: exports.codes[code] };\n};\n","'use strict';\n\nconst Url = require('url');\n\nconst Errors = require('./errors');\n\n\nconst internals = {\n minDomainSegments: 2,\n nonAsciiRx: /[^\\x00-\\x7f]/,\n domainControlRx: /[\\x00-\\x20@\\:\\/\\\\#!\\$&\\'\\(\\)\\*\\+,;=\\?]/, // Control + space + separators\n tldSegmentRx: /^[a-zA-Z](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?$/,\n domainSegmentRx: /^[a-zA-Z0-9](?:[a-zA-Z0-9\\-]*[a-zA-Z0-9])?$/,\n URL: Url.URL || URL // $lab:coverage:ignore$\n};\n\n\nexports.analyze = function (domain, options = {}) {\n\n if (!domain) { // Catch null / undefined\n return Errors.code('DOMAIN_NON_EMPTY_STRING');\n }\n\n if (typeof domain !== 'string') {\n throw new Error('Invalid input: domain must be a string');\n }\n\n if (domain.length > 256) {\n return Errors.code('DOMAIN_TOO_LONG');\n }\n\n const ascii = !internals.nonAsciiRx.test(domain);\n if (!ascii) {\n if (options.allowUnicode === false) { // Defaults to true\n return Errors.code('DOMAIN_INVALID_UNICODE_CHARS');\n }\n\n domain = domain.normalize('NFC');\n }\n\n if (internals.domainControlRx.test(domain)) {\n return Errors.code('DOMAIN_INVALID_CHARS');\n }\n\n domain = internals.punycode(domain);\n\n // https://tools.ietf.org/html/rfc1035 section 2.3.1\n\n if (options.allowFullyQualified &&\n domain[domain.length - 1] === '.') {\n\n domain = domain.slice(0, -1);\n }\n\n const minDomainSegments = options.minDomainSegments || internals.minDomainSegments;\n\n const segments = domain.split('.');\n if (segments.length < minDomainSegments) {\n return Errors.code('DOMAIN_SEGMENTS_COUNT');\n }\n\n if (options.maxDomainSegments) {\n if (segments.length > options.maxDomainSegments) {\n return Errors.code('DOMAIN_SEGMENTS_COUNT_MAX');\n }\n }\n\n const tlds = options.tlds;\n if (tlds) {\n const tld = segments[segments.length - 1].toLowerCase();\n if (tlds.deny && tlds.deny.has(tld) ||\n tlds.allow && !tlds.allow.has(tld)) {\n\n return Errors.code('DOMAIN_FORBIDDEN_TLDS');\n }\n }\n\n for (let i = 0; i < segments.length; ++i) {\n const segment = segments[i];\n\n if (!segment.length) {\n return Errors.code('DOMAIN_EMPTY_SEGMENT');\n }\n\n if (segment.length > 63) {\n return Errors.code('DOMAIN_LONG_SEGMENT');\n }\n\n if (i < segments.length - 1) {\n if (!internals.domainSegmentRx.test(segment)) {\n return Errors.code('DOMAIN_INVALID_CHARS');\n }\n }\n else {\n if (!internals.tldSegmentRx.test(segment)) {\n return Errors.code('DOMAIN_INVALID_TLDS_CHARS');\n }\n }\n }\n\n return null;\n};\n\n\nexports.isValid = function (domain, options) {\n\n return !exports.analyze(domain, options);\n};\n\n\ninternals.punycode = function (domain) {\n\n if (domain.includes('%')) {\n domain = domain.replace(/%/g, '%25');\n }\n\n try {\n return new internals.URL(`http://${domain}`).host;\n }\n catch (err) {\n return domain;\n }\n};\n","'use strict';\n\nconst Util = require('util');\n\nconst Domain = require('./domain');\nconst Errors = require('./errors');\n\n\nconst internals = {\n nonAsciiRx: /[^\\x00-\\x7f]/,\n encoder: new (Util.TextEncoder || TextEncoder)() // $lab:coverage:ignore$\n};\n\n\nexports.analyze = function (email, options) {\n\n return internals.email(email, options);\n};\n\n\nexports.isValid = function (email, options) {\n\n return !internals.email(email, options);\n};\n\n\ninternals.email = function (email, options = {}) {\n\n if (typeof email !== 'string') {\n throw new Error('Invalid input: email must be a string');\n }\n\n if (!email) {\n return Errors.code('EMPTY_STRING');\n }\n\n // Unicode\n\n const ascii = !internals.nonAsciiRx.test(email);\n if (!ascii) {\n if (options.allowUnicode === false) { // Defaults to true\n return Errors.code('FORBIDDEN_UNICODE');\n }\n\n email = email.normalize('NFC');\n }\n\n // Basic structure\n\n const parts = email.split('@');\n if (parts.length !== 2) {\n return parts.length > 2 ? Errors.code('MULTIPLE_AT_CHAR') : Errors.code('MISSING_AT_CHAR');\n }\n\n const [local, domain] = parts;\n\n if (!local) {\n return Errors.code('EMPTY_LOCAL');\n }\n\n if (!options.ignoreLength) {\n if (email.length > 254) { // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.3\n return Errors.code('ADDRESS_TOO_LONG');\n }\n\n if (internals.encoder.encode(local).length > 64) { // http://tools.ietf.org/html/rfc5321#section-4.5.3.1.1\n return Errors.code('LOCAL_TOO_LONG');\n }\n }\n\n // Validate parts\n\n return internals.local(local, ascii) || Domain.analyze(domain, options);\n};\n\n\ninternals.local = function (local, ascii) {\n\n const segments = local.split('.');\n for (const segment of segments) {\n if (!segment.length) {\n return Errors.code('EMPTY_LOCAL_SEGMENT');\n }\n\n if (ascii) {\n if (!internals.atextRx.test(segment)) {\n return Errors.code('INVALID_LOCAL_CHARS');\n }\n\n continue;\n }\n\n for (const char of segment) {\n if (internals.atextRx.test(char)) {\n continue;\n }\n\n const binary = internals.binary(char);\n if (!internals.atomRx.test(binary)) {\n return Errors.code('INVALID_LOCAL_CHARS');\n }\n }\n }\n};\n\n\ninternals.binary = function (char) {\n\n return Array.from(internals.encoder.encode(char)).map((v) => String.fromCharCode(v)).join('');\n};\n\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*/\n\n\ninternals.atextRx = /^[\\w!#\\$%&'\\*\\+\\-/=\\?\\^`\\{\\|\\}~]+$/; // _ included in \\w\n\n\ninternals.atomRx = new RegExp([\n\n // %xC2-DF UTF8-tail\n '(?:[\\\\xc2-\\\\xdf][\\\\x80-\\\\xbf])',\n\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\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\n].join('|'));\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 Assert = require('@hapi/hoek/lib/assert');\nconst EscapeRegex = require('@hapi/hoek/lib/escapeRegex');\n\n\nconst internals = {};\n\n\ninternals.generate = function () {\n\n const rfc3986 = {};\n\n const hexDigit = '\\\\dA-Fa-f'; // HEXDIG = DIGIT / \"A\" / \"B\" / \"C\" / \"D\" / \"E\" / \"F\"\n const hexDigitOnly = '[' + hexDigit + ']';\n\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\n rfc3986.ipv4address = '(?:' + decOctect + '\\\\.){3}' + decOctect; // IPv4address = dec-octet \".\" dec-octet \".\" dec-octet \".\" dec-octet\n\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\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\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 = '(?:' + IPv6SixHex + '|' + IPv6FiveHex + '|' + IPv6FourHex + '|' + IPv6ThreeHex + '|' + IPv6TwoHex + '|' + IPv6OneHex + '|' + IPv6NoneHex + '|' + IPv6NoneHex2 + '|' + IPv6NoneHex3 + ')';\n rfc3986.ipvFuture = 'v' + hexDigitOnly + '+\\\\.[' + unreserved + subDelims + ':]+'; // IPvFuture = \"v\" 1*HEXDIG \".\" 1*( unreserved / sub-delims / \":\" )\n\n rfc3986.scheme = '[a-zA-Z][a-zA-Z\\\\d+-\\\\.]*'; // scheme = ALPHA *( ALPHA / DIGIT / \"+\" / \"-\" / \".\" )\n rfc3986.schemeRegex = new RegExp(rfc3986.scheme);\n\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 /*\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\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\n // hier-part = \"//\" authority path\n\n rfc3986.hierPart = '(?:' + '(?:\\\\/\\\\/' + authority + pathAbEmpty + ')' + '|' + pathAbsolute + '|' + pathRootless + '|' + pathAbNoAuthority + ')';\n rfc3986.hierPartCapture = '(?:' + '(?:\\\\/\\\\/' + authorityCapture + pathAbEmpty + ')' + '|' + pathAbsolute + '|' + pathRootless + ')';\n\n // relative-part = \"//\" authority path-abempty / path-absolute / path-noscheme / path-empty\n\n rfc3986.relativeRef = '(?:' + '(?:\\\\/\\\\/' + authority + pathAbEmpty + ')' + '|' + pathAbsolute + '|' + pathNoScheme + '|' + pathEmpty + ')';\n rfc3986.relativeRefCapture = '(?:' + '(?:\\\\/\\\\/' + authorityCapture + pathAbEmpty + ')' + '|' + pathAbsolute + '|' + pathNoScheme + '|' + pathEmpty + ')';\n\n // query = *( pchar / \"/\" / \"?\" )\n // query = *( pchar / \"[\" / \"]\" / \"/\" / \"?\" )\n\n rfc3986.query = '[' + pchar + '\\\\/\\\\?]*(?=#|$)'; //Finish matching either at the fragment part '|' end of the line.\n rfc3986.queryWithSquareBrackets = '[' + pchar + '\\\\[\\\\]\\\\/\\\\?]*(?=#|$)';\n\n // fragment = *( pchar / \"/\" / \"?\" )\n\n rfc3986.fragment = '[' + pchar + '\\\\/\\\\?]*';\n\n return rfc3986;\n};\n\ninternals.rfc3986 = internals.generate();\n\n\nexports.ip = {\n v4Cidr: internals.rfc3986.ipv4Cidr,\n v6Cidr: internals.rfc3986.ipv6Cidr,\n ipv4: internals.rfc3986.ipv4address,\n ipv6: internals.rfc3986.ipv6address,\n ipvfuture: internals.rfc3986.ipvFuture\n};\n\n\ninternals.createRegex = function (options) {\n\n const rfc = internals.rfc3986;\n\n // Construct expression\n\n const query = options.allowQuerySquareBrackets ? rfc.queryWithSquareBrackets : rfc.query;\n const suffix = '(?:\\\\?' + query + ')?' + '(?:#' + rfc.fragment + ')?';\n\n // relative-ref = relative-part [ \"?\" query ] [ \"#\" fragment ]\n\n const relative = options.domain ? rfc.relativeRefCapture : rfc.relativeRef;\n\n if (options.relativeOnly) {\n return internals.wrap(relative + suffix);\n }\n\n // Custom schemes\n\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\n const schemes = [].concat(options.scheme);\n Assert(schemes.length >= 1, 'scheme must have at least 1 scheme specified');\n\n // Flatten the array into a string to be used to match the schemes\n\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\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\n customScheme = selections.join('|');\n }\n\n // URI = scheme \":\" hier-part [ \"?\" query ] [ \"#\" fragment ]\n\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 internals.wrap(prefix + suffix, customScheme);\n};\n\n\ninternals.wrap = function (raw, scheme) {\n\n raw = `(?=.)(?!https?\\:/(?:$|[^/]))(?!https?\\:///)(?!https?\\:[^/])${raw}`; // Require at least one character and explicitly forbid 'http:/' or HTTP with empty domain\n\n return {\n raw,\n regex: new RegExp(`^${raw}$`),\n scheme\n };\n};\n\n\ninternals.uriRegex = internals.createRegex({});\n\n\nexports.regex = function (options = {}) {\n\n if (options.scheme ||\n options.allowRelative ||\n options.relativeOnly ||\n options.allowQuerySquareBrackets ||\n options.domain) {\n\n return internals.createRegex(options);\n }\n\n return internals.uriRegex;\n};\n","'use strict';\n\nconst Assert = require('@hapi/hoek/lib/assert');\n\nconst Uri = require('./uri');\n\n\nconst internals = {};\n\n\nexports.regex = function (options = {}) {\n\n // CIDR\n\n Assert(options.cidr === undefined || typeof options.cidr === 'string', 'options.cidr must be a string');\n const cidr = options.cidr ? options.cidr.toLowerCase() : 'optional';\n Assert(['required', 'optional', 'forbidden'].includes(cidr), 'options.cidr must be one of required, optional, forbidden');\n\n // Versions\n\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\n Assert(versions.length >= 1, 'options.version must have at least 1 version specified');\n\n for (let i = 0; i < versions.length; ++i) {\n Assert(typeof versions[i] === 'string', 'options.version must only contain strings');\n versions[i] = versions[i].toLowerCase();\n Assert(['ipv4', 'ipv6', 'ipvfuture'].includes(versions[i]), 'options.version contains unknown version ' + versions[i] + ' - must be one of ipv4, ipv6, ipvfuture');\n }\n\n versions = Array.from(new Set(versions));\n\n // Regex\n\n const parts = versions.map((version) => {\n\n // Forbidden\n\n if (cidr === 'forbidden') {\n return Uri.ip[version];\n }\n\n // Required\n\n const cidrpart = `\\\\/${version === 'ipv4' ? Uri.ip.v4Cidr : Uri.ip.v6Cidr}`;\n\n if (cidr === 'required') {\n return `${Uri.ip[version]}${cidrpart}`;\n }\n\n // Optional\n\n return `${Uri.ip[version]}(?:${cidrpart})?`;\n });\n\n const raw = `(?:${parts.join('|')})`;\n const regex = new RegExp(`^${raw}$`);\n return { cidr, versions, regex, raw };\n};\n","'use strict';\n\nconst internals = {};\n\n\n// http://data.iana.org/TLD/tlds-alpha-by-domain.txt\n// # Version 2024012900, Last Updated Mon Jan 29 07:07:01 2024 UTC\n\n\ninternals.tlds = [\n 'AAA',\n 'AARP',\n 'ABB',\n 'ABBOTT',\n 'ABBVIE',\n 'ABC',\n 'ABLE',\n 'ABOGADO',\n 'ABUDHABI',\n 'AC',\n 'ACADEMY',\n 'ACCENTURE',\n 'ACCOUNTANT',\n 'ACCOUNTANTS',\n 'ACO',\n 'ACTOR',\n 'AD',\n 'ADS',\n 'ADULT',\n 'AE',\n 'AEG',\n 'AERO',\n 'AETNA',\n 'AF',\n 'AFL',\n 'AFRICA',\n 'AG',\n 'AGAKHAN',\n 'AGENCY',\n 'AI',\n 'AIG',\n 'AIRBUS',\n 'AIRFORCE',\n 'AIRTEL',\n 'AKDN',\n 'AL',\n 'ALIBABA',\n 'ALIPAY',\n 'ALLFINANZ',\n 'ALLSTATE',\n 'ALLY',\n 'ALSACE',\n 'ALSTOM',\n 'AM',\n 'AMAZON',\n 'AMERICANEXPRESS',\n 'AMERICANFAMILY',\n 'AMEX',\n 'AMFAM',\n 'AMICA',\n 'AMSTERDAM',\n 'ANALYTICS',\n 'ANDROID',\n 'ANQUAN',\n 'ANZ',\n 'AO',\n 'AOL',\n 'APARTMENTS',\n 'APP',\n 'APPLE',\n 'AQ',\n 'AQUARELLE',\n 'AR',\n 'ARAB',\n 'ARAMCO',\n 'ARCHI',\n 'ARMY',\n 'ARPA',\n 'ART',\n 'ARTE',\n 'AS',\n 'ASDA',\n 'ASIA',\n 'ASSOCIATES',\n 'AT',\n 'ATHLETA',\n 'ATTORNEY',\n 'AU',\n 'AUCTION',\n 'AUDI',\n 'AUDIBLE',\n 'AUDIO',\n 'AUSPOST',\n 'AUTHOR',\n 'AUTO',\n 'AUTOS',\n 'AVIANCA',\n 'AW',\n 'AWS',\n 'AX',\n 'AXA',\n 'AZ',\n 'AZURE',\n 'BA',\n 'BABY',\n 'BAIDU',\n 'BANAMEX',\n 'BAND',\n 'BANK',\n 'BAR',\n 'BARCELONA',\n 'BARCLAYCARD',\n 'BARCLAYS',\n 'BAREFOOT',\n 'BARGAINS',\n 'BASEBALL',\n 'BASKETBALL',\n 'BAUHAUS',\n 'BAYERN',\n 'BB',\n 'BBC',\n 'BBT',\n 'BBVA',\n 'BCG',\n 'BCN',\n 'BD',\n 'BE',\n 'BEATS',\n 'BEAUTY',\n 'BEER',\n 'BENTLEY',\n 'BERLIN',\n 'BEST',\n 'BESTBUY',\n 'BET',\n 'BF',\n 'BG',\n 'BH',\n 'BHARTI',\n 'BI',\n 'BIBLE',\n 'BID',\n 'BIKE',\n 'BING',\n 'BINGO',\n 'BIO',\n 'BIZ',\n 'BJ',\n 'BLACK',\n 'BLACKFRIDAY',\n 'BLOCKBUSTER',\n 'BLOG',\n 'BLOOMBERG',\n 'BLUE',\n 'BM',\n 'BMS',\n 'BMW',\n 'BN',\n 'BNPPARIBAS',\n 'BO',\n 'BOATS',\n 'BOEHRINGER',\n 'BOFA',\n 'BOM',\n 'BOND',\n 'BOO',\n 'BOOK',\n 'BOOKING',\n 'BOSCH',\n 'BOSTIK',\n 'BOSTON',\n 'BOT',\n 'BOUTIQUE',\n 'BOX',\n 'BR',\n 'BRADESCO',\n 'BRIDGESTONE',\n 'BROADWAY',\n 'BROKER',\n 'BROTHER',\n 'BRUSSELS',\n 'BS',\n 'BT',\n 'BUILD',\n 'BUILDERS',\n 'BUSINESS',\n 'BUY',\n 'BUZZ',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'BZH',\n 'CA',\n 'CAB',\n 'CAFE',\n 'CAL',\n 'CALL',\n 'CALVINKLEIN',\n 'CAM',\n 'CAMERA',\n 'CAMP',\n 'CANON',\n 'CAPETOWN',\n 'CAPITAL',\n 'CAPITALONE',\n 'CAR',\n 'CARAVAN',\n 'CARDS',\n 'CARE',\n 'CAREER',\n 'CAREERS',\n 'CARS',\n 'CASA',\n 'CASE',\n 'CASH',\n 'CASINO',\n 'CAT',\n 'CATERING',\n 'CATHOLIC',\n 'CBA',\n 'CBN',\n 'CBRE',\n 'CC',\n 'CD',\n 'CENTER',\n 'CEO',\n 'CERN',\n 'CF',\n 'CFA',\n 'CFD',\n 'CG',\n 'CH',\n 'CHANEL',\n 'CHANNEL',\n 'CHARITY',\n 'CHASE',\n 'CHAT',\n 'CHEAP',\n 'CHINTAI',\n 'CHRISTMAS',\n 'CHROME',\n 'CHURCH',\n 'CI',\n 'CIPRIANI',\n 'CIRCLE',\n 'CISCO',\n 'CITADEL',\n 'CITI',\n 'CITIC',\n 'CITY',\n 'CK',\n 'CL',\n 'CLAIMS',\n 'CLEANING',\n 'CLICK',\n 'CLINIC',\n 'CLINIQUE',\n 'CLOTHING',\n 'CLOUD',\n 'CLUB',\n 'CLUBMED',\n 'CM',\n 'CN',\n 'CO',\n 'COACH',\n 'CODES',\n 'COFFEE',\n 'COLLEGE',\n 'COLOGNE',\n 'COM',\n 'COMCAST',\n 'COMMBANK',\n 'COMMUNITY',\n 'COMPANY',\n 'COMPARE',\n 'COMPUTER',\n 'COMSEC',\n 'CONDOS',\n 'CONSTRUCTION',\n 'CONSULTING',\n 'CONTACT',\n 'CONTRACTORS',\n 'COOKING',\n 'COOL',\n 'COOP',\n 'CORSICA',\n 'COUNTRY',\n 'COUPON',\n 'COUPONS',\n 'COURSES',\n 'CPA',\n 'CR',\n 'CREDIT',\n 'CREDITCARD',\n 'CREDITUNION',\n 'CRICKET',\n 'CROWN',\n 'CRS',\n 'CRUISE',\n 'CRUISES',\n 'CU',\n 'CUISINELLA',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CYMRU',\n 'CYOU',\n 'CZ',\n 'DABUR',\n 'DAD',\n 'DANCE',\n 'DATA',\n 'DATE',\n 'DATING',\n 'DATSUN',\n 'DAY',\n 'DCLK',\n 'DDS',\n 'DE',\n 'DEAL',\n 'DEALER',\n 'DEALS',\n 'DEGREE',\n 'DELIVERY',\n 'DELL',\n 'DELOITTE',\n 'DELTA',\n 'DEMOCRAT',\n 'DENTAL',\n 'DENTIST',\n 'DESI',\n 'DESIGN',\n 'DEV',\n 'DHL',\n 'DIAMONDS',\n 'DIET',\n 'DIGITAL',\n 'DIRECT',\n 'DIRECTORY',\n 'DISCOUNT',\n 'DISCOVER',\n 'DISH',\n 'DIY',\n 'DJ',\n 'DK',\n 'DM',\n 'DNP',\n 'DO',\n 'DOCS',\n 'DOCTOR',\n 'DOG',\n 'DOMAINS',\n 'DOT',\n 'DOWNLOAD',\n 'DRIVE',\n 'DTV',\n 'DUBAI',\n 'DUNLOP',\n 'DUPONT',\n 'DURBAN',\n 'DVAG',\n 'DVR',\n 'DZ',\n 'EARTH',\n 'EAT',\n 'EC',\n 'ECO',\n 'EDEKA',\n 'EDU',\n 'EDUCATION',\n 'EE',\n 'EG',\n 'EMAIL',\n 'EMERCK',\n 'ENERGY',\n 'ENGINEER',\n 'ENGINEERING',\n 'ENTERPRISES',\n 'EPSON',\n 'EQUIPMENT',\n 'ER',\n 'ERICSSON',\n 'ERNI',\n 'ES',\n 'ESQ',\n 'ESTATE',\n 'ET',\n 'EU',\n 'EUROVISION',\n 'EUS',\n 'EVENTS',\n 'EXCHANGE',\n 'EXPERT',\n 'EXPOSED',\n 'EXPRESS',\n 'EXTRASPACE',\n 'FAGE',\n 'FAIL',\n 'FAIRWINDS',\n 'FAITH',\n 'FAMILY',\n 'FAN',\n 'FANS',\n 'FARM',\n 'FARMERS',\n 'FASHION',\n 'FAST',\n 'FEDEX',\n 'FEEDBACK',\n 'FERRARI',\n 'FERRERO',\n 'FI',\n 'FIDELITY',\n 'FIDO',\n 'FILM',\n 'FINAL',\n 'FINANCE',\n 'FINANCIAL',\n 'FIRE',\n 'FIRESTONE',\n 'FIRMDALE',\n 'FISH',\n 'FISHING',\n 'FIT',\n 'FITNESS',\n 'FJ',\n 'FK',\n 'FLICKR',\n 'FLIGHTS',\n 'FLIR',\n 'FLORIST',\n 'FLOWERS',\n 'FLY',\n 'FM',\n 'FO',\n 'FOO',\n 'FOOD',\n 'FOOTBALL',\n 'FORD',\n 'FOREX',\n 'FORSALE',\n 'FORUM',\n 'FOUNDATION',\n 'FOX',\n 'FR',\n 'FREE',\n 'FRESENIUS',\n 'FRL',\n 'FROGANS',\n 'FRONTIER',\n 'FTR',\n 'FUJITSU',\n 'FUN',\n 'FUND',\n 'FURNITURE',\n 'FUTBOL',\n 'FYI',\n 'GA',\n 'GAL',\n 'GALLERY',\n 'GALLO',\n 'GALLUP',\n 'GAME',\n 'GAMES',\n 'GAP',\n 'GARDEN',\n 'GAY',\n 'GB',\n 'GBIZ',\n 'GD',\n 'GDN',\n 'GE',\n 'GEA',\n 'GENT',\n 'GENTING',\n 'GEORGE',\n 'GF',\n 'GG',\n 'GGEE',\n 'GH',\n 'GI',\n 'GIFT',\n 'GIFTS',\n 'GIVES',\n 'GIVING',\n 'GL',\n 'GLASS',\n 'GLE',\n 'GLOBAL',\n 'GLOBO',\n 'GM',\n 'GMAIL',\n 'GMBH',\n 'GMO',\n 'GMX',\n 'GN',\n 'GODADDY',\n 'GOLD',\n 'GOLDPOINT',\n 'GOLF',\n 'GOO',\n 'GOODYEAR',\n 'GOOG',\n 'GOOGLE',\n 'GOP',\n 'GOT',\n 'GOV',\n 'GP',\n 'GQ',\n 'GR',\n 'GRAINGER',\n 'GRAPHICS',\n 'GRATIS',\n 'GREEN',\n 'GRIPE',\n 'GROCERY',\n 'GROUP',\n 'GS',\n 'GT',\n 'GU',\n 'GUARDIAN',\n 'GUCCI',\n 'GUGE',\n 'GUIDE',\n 'GUITARS',\n 'GURU',\n 'GW',\n 'GY',\n 'HAIR',\n 'HAMBURG',\n 'HANGOUT',\n 'HAUS',\n 'HBO',\n 'HDFC',\n 'HDFCBANK',\n 'HEALTH',\n 'HEALTHCARE',\n 'HELP',\n 'HELSINKI',\n 'HERE',\n 'HERMES',\n 'HIPHOP',\n 'HISAMITSU',\n 'HITACHI',\n 'HIV',\n 'HK',\n 'HKT',\n 'HM',\n 'HN',\n 'HOCKEY',\n 'HOLDINGS',\n 'HOLIDAY',\n 'HOMEDEPOT',\n 'HOMEGOODS',\n 'HOMES',\n 'HOMESENSE',\n 'HONDA',\n 'HORSE',\n 'HOSPITAL',\n 'HOST',\n 'HOSTING',\n 'HOT',\n 'HOTELS',\n 'HOTMAIL',\n 'HOUSE',\n 'HOW',\n 'HR',\n 'HSBC',\n 'HT',\n 'HU',\n 'HUGHES',\n 'HYATT',\n 'HYUNDAI',\n 'IBM',\n 'ICBC',\n 'ICE',\n 'ICU',\n 'ID',\n 'IE',\n 'IEEE',\n 'IFM',\n 'IKANO',\n 'IL',\n 'IM',\n 'IMAMAT',\n 'IMDB',\n 'IMMO',\n 'IMMOBILIEN',\n 'IN',\n 'INC',\n 'INDUSTRIES',\n 'INFINITI',\n 'INFO',\n 'ING',\n 'INK',\n 'INSTITUTE',\n 'INSURANCE',\n 'INSURE',\n 'INT',\n 'INTERNATIONAL',\n 'INTUIT',\n 'INVESTMENTS',\n 'IO',\n 'IPIRANGA',\n 'IQ',\n 'IR',\n 'IRISH',\n 'IS',\n 'ISMAILI',\n 'IST',\n 'ISTANBUL',\n 'IT',\n 'ITAU',\n 'ITV',\n 'JAGUAR',\n 'JAVA',\n 'JCB',\n 'JE',\n 'JEEP',\n 'JETZT',\n 'JEWELRY',\n 'JIO',\n 'JLL',\n 'JM',\n 'JMP',\n 'JNJ',\n 'JO',\n 'JOBS',\n 'JOBURG',\n 'JOT',\n 'JOY',\n 'JP',\n 'JPMORGAN',\n 'JPRS',\n 'JUEGOS',\n 'JUNIPER',\n 'KAUFEN',\n 'KDDI',\n 'KE',\n 'KERRYHOTELS',\n 'KERRYLOGISTICS',\n 'KERRYPROPERTIES',\n 'KFH',\n 'KG',\n 'KH',\n 'KI',\n 'KIA',\n 'KIDS',\n 'KIM',\n 'KINDLE',\n 'KITCHEN',\n 'KIWI',\n 'KM',\n 'KN',\n 'KOELN',\n 'KOMATSU',\n 'KOSHER',\n 'KP',\n 'KPMG',\n 'KPN',\n 'KR',\n 'KRD',\n 'KRED',\n 'KUOKGROUP',\n 'KW',\n 'KY',\n 'KYOTO',\n 'KZ',\n 'LA',\n 'LACAIXA',\n 'LAMBORGHINI',\n 'LAMER',\n 'LANCASTER',\n 'LAND',\n 'LANDROVER',\n 'LANXESS',\n 'LASALLE',\n 'LAT',\n 'LATINO',\n 'LATROBE',\n 'LAW',\n 'LAWYER',\n 'LB',\n 'LC',\n 'LDS',\n 'LEASE',\n 'LECLERC',\n 'LEFRAK',\n 'LEGAL',\n 'LEGO',\n 'LEXUS',\n 'LGBT',\n 'LI',\n 'LIDL',\n 'LIFE',\n 'LIFEINSURANCE',\n 'LIFESTYLE',\n 'LIGHTING',\n 'LIKE',\n 'LILLY',\n 'LIMITED',\n 'LIMO',\n 'LINCOLN',\n 'LINK',\n 'LIPSY',\n 'LIVE',\n 'LIVING',\n 'LK',\n 'LLC',\n 'LLP',\n 'LOAN',\n 'LOANS',\n 'LOCKER',\n 'LOCUS',\n 'LOL',\n 'LONDON',\n 'LOTTE',\n 'LOTTO',\n 'LOVE',\n 'LPL',\n 'LPLFINANCIAL',\n 'LR',\n 'LS',\n 'LT',\n 'LTD',\n 'LTDA',\n 'LU',\n 'LUNDBECK',\n 'LUXE',\n 'LUXURY',\n 'LV',\n 'LY',\n 'MA',\n 'MADRID',\n 'MAIF',\n 'MAISON',\n 'MAKEUP',\n 'MAN',\n 'MANAGEMENT',\n 'MANGO',\n 'MAP',\n 'MARKET',\n 'MARKETING',\n 'MARKETS',\n 'MARRIOTT',\n 'MARSHALLS',\n 'MATTEL',\n 'MBA',\n 'MC',\n 'MCKINSEY',\n 'MD',\n 'ME',\n 'MED',\n 'MEDIA',\n 'MEET',\n 'MELBOURNE',\n 'MEME',\n 'MEMORIAL',\n 'MEN',\n 'MENU',\n 'MERCKMSD',\n 'MG',\n 'MH',\n 'MIAMI',\n 'MICROSOFT',\n 'MIL',\n 'MINI',\n 'MINT',\n 'MIT',\n 'MITSUBISHI',\n 'MK',\n 'ML',\n 'MLB',\n 'MLS',\n 'MM',\n 'MMA',\n 'MN',\n 'MO',\n 'MOBI',\n 'MOBILE',\n 'MODA',\n 'MOE',\n 'MOI',\n 'MOM',\n 'MONASH',\n 'MONEY',\n 'MONSTER',\n 'MORMON',\n 'MORTGAGE',\n 'MOSCOW',\n 'MOTO',\n 'MOTORCYCLES',\n 'MOV',\n 'MOVIE',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MSD',\n 'MT',\n 'MTN',\n 'MTR',\n 'MU',\n 'MUSEUM',\n 'MUSIC',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NAB',\n 'NAGOYA',\n 'NAME',\n 'NATURA',\n 'NAVY',\n 'NBA',\n 'NC',\n 'NE',\n 'NEC',\n 'NET',\n 'NETBANK',\n 'NETFLIX',\n 'NETWORK',\n 'NEUSTAR',\n 'NEW',\n 'NEWS',\n 'NEXT',\n 'NEXTDIRECT',\n 'NEXUS',\n 'NF',\n 'NFL',\n 'NG',\n 'NGO',\n 'NHK',\n 'NI',\n 'NICO',\n 'NIKE',\n 'NIKON',\n 'NINJA',\n 'NISSAN',\n 'NISSAY',\n 'NL',\n 'NO',\n 'NOKIA',\n 'NORTON',\n 'NOW',\n 'NOWRUZ',\n 'NOWTV',\n 'NP',\n 'NR',\n 'NRA',\n 'NRW',\n 'NTT',\n 'NU',\n 'NYC',\n 'NZ',\n 'OBI',\n 'OBSERVER',\n 'OFFICE',\n 'OKINAWA',\n 'OLAYAN',\n 'OLAYANGROUP',\n 'OLLO',\n 'OM',\n 'OMEGA',\n 'ONE',\n 'ONG',\n 'ONL',\n 'ONLINE',\n 'OOO',\n 'OPEN',\n 'ORACLE',\n 'ORANGE',\n 'ORG',\n 'ORGANIC',\n 'ORIGINS',\n 'OSAKA',\n 'OTSUKA',\n 'OTT',\n 'OVH',\n 'PA',\n 'PAGE',\n 'PANASONIC',\n 'PARIS',\n 'PARS',\n 'PARTNERS',\n 'PARTS',\n 'PARTY',\n 'PAY',\n 'PCCW',\n 'PE',\n 'PET',\n 'PF',\n 'PFIZER',\n 'PG',\n 'PH',\n 'PHARMACY',\n 'PHD',\n 'PHILIPS',\n 'PHONE',\n 'PHOTO',\n 'PHOTOGRAPHY',\n 'PHOTOS',\n 'PHYSIO',\n 'PICS',\n 'PICTET',\n 'PICTURES',\n 'PID',\n 'PIN',\n 'PING',\n 'PINK',\n 'PIONEER',\n 'PIZZA',\n 'PK',\n 'PL',\n 'PLACE',\n 'PLAY',\n 'PLAYSTATION',\n 'PLUMBING',\n 'PLUS',\n 'PM',\n 'PN',\n 'PNC',\n 'POHL',\n 'POKER',\n 'POLITIE',\n 'PORN',\n 'POST',\n 'PR',\n 'PRAMERICA',\n 'PRAXI',\n 'PRESS',\n 'PRIME',\n 'PRO',\n 'PROD',\n 'PRODUCTIONS',\n 'PROF',\n 'PROGRESSIVE',\n 'PROMO',\n 'PROPERTIES',\n 'PROPERTY',\n 'PROTECTION',\n 'PRU',\n 'PRUDENTIAL',\n 'PS',\n 'PT',\n 'PUB',\n 'PW',\n 'PWC',\n 'PY',\n 'QA',\n 'QPON',\n 'QUEBEC',\n 'QUEST',\n 'RACING',\n 'RADIO',\n 'RE',\n 'READ',\n 'REALESTATE',\n 'REALTOR',\n 'REALTY',\n 'RECIPES',\n 'RED',\n 'REDSTONE',\n 'REDUMBRELLA',\n 'REHAB',\n 'REISE',\n 'REISEN',\n 'REIT',\n 'RELIANCE',\n 'REN',\n 'RENT',\n 'RENTALS',\n 'REPAIR',\n 'REPORT',\n 'REPUBLICAN',\n 'REST',\n 'RESTAURANT',\n 'REVIEW',\n 'REVIEWS',\n 'REXROTH',\n 'RICH',\n 'RICHARDLI',\n 'RICOH',\n 'RIL',\n 'RIO',\n 'RIP',\n 'RO',\n 'ROCKS',\n 'RODEO',\n 'ROGERS',\n 'ROOM',\n 'RS',\n 'RSVP',\n 'RU',\n 'RUGBY',\n 'RUHR',\n 'RUN',\n 'RW',\n 'RWE',\n 'RYUKYU',\n 'SA',\n 'SAARLAND',\n 'SAFE',\n 'SAFETY',\n 'SAKURA',\n 'SALE',\n 'SALON',\n 'SAMSCLUB',\n 'SAMSUNG',\n 'SANDVIK',\n 'SANDVIKCOROMANT',\n 'SANOFI',\n 'SAP',\n 'SARL',\n 'SAS',\n 'SAVE',\n 'SAXO',\n 'SB',\n 'SBI',\n 'SBS',\n 'SC',\n 'SCB',\n 'SCHAEFFLER',\n 'SCHMIDT',\n 'SCHOLARSHIPS',\n 'SCHOOL',\n 'SCHULE',\n 'SCHWARZ',\n 'SCIENCE',\n 'SCOT',\n 'SD',\n 'SE',\n 'SEARCH',\n 'SEAT',\n 'SECURE',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SENER',\n 'SERVICES',\n 'SEVEN',\n 'SEW',\n 'SEX',\n 'SEXY',\n 'SFR',\n 'SG',\n 'SH',\n 'SHANGRILA',\n 'SHARP',\n 'SHAW',\n 'SHELL',\n 'SHIA',\n 'SHIKSHA',\n 'SHOES',\n 'SHOP',\n 'SHOPPING',\n 'SHOUJI',\n 'SHOW',\n 'SI',\n 'SILK',\n 'SINA',\n 'SINGLES',\n 'SITE',\n 'SJ',\n 'SK',\n 'SKI',\n 'SKIN',\n 'SKY',\n 'SKYPE',\n 'SL',\n 'SLING',\n 'SM',\n 'SMART',\n 'SMILE',\n 'SN',\n 'SNCF',\n 'SO',\n 'SOCCER',\n 'SOCIAL',\n 'SOFTBANK',\n 'SOFTWARE',\n 'SOHU',\n 'SOLAR',\n 'SOLUTIONS',\n 'SONG',\n 'SONY',\n 'SOY',\n 'SPA',\n 'SPACE',\n 'SPORT',\n 'SPOT',\n 'SR',\n 'SRL',\n 'SS',\n 'ST',\n 'STADA',\n 'STAPLES',\n 'STAR',\n 'STATEBANK',\n 'STATEFARM',\n 'STC',\n 'STCGROUP',\n 'STOCKHOLM',\n 'STORAGE',\n 'STORE',\n 'STREAM',\n 'STUDIO',\n 'STUDY',\n 'STYLE',\n 'SU',\n 'SUCKS',\n 'SUPPLIES',\n 'SUPPLY',\n 'SUPPORT',\n 'SURF',\n 'SURGERY',\n 'SUZUKI',\n 'SV',\n 'SWATCH',\n 'SWISS',\n 'SX',\n 'SY',\n 'SYDNEY',\n 'SYSTEMS',\n 'SZ',\n 'TAB',\n 'TAIPEI',\n 'TALK',\n 'TAOBAO',\n 'TARGET',\n 'TATAMOTORS',\n 'TATAR',\n 'TATTOO',\n 'TAX',\n 'TAXI',\n 'TC',\n 'TCI',\n 'TD',\n 'TDK',\n 'TEAM',\n 'TECH',\n 'TECHNOLOGY',\n 'TEL',\n 'TEMASEK',\n 'TENNIS',\n 'TEVA',\n 'TF',\n 'TG',\n 'TH',\n 'THD',\n 'THEATER',\n 'THEATRE',\n 'TIAA',\n 'TICKETS',\n 'TIENDA',\n 'TIPS',\n 'TIRES',\n 'TIROL',\n 'TJ',\n 'TJMAXX',\n 'TJX',\n 'TK',\n 'TKMAXX',\n 'TL',\n 'TM',\n 'TMALL',\n 'TN',\n 'TO',\n 'TODAY',\n 'TOKYO',\n 'TOOLS',\n 'TOP',\n 'TORAY',\n 'TOSHIBA',\n 'TOTAL',\n 'TOURS',\n 'TOWN',\n 'TOYOTA',\n 'TOYS',\n 'TR',\n 'TRADE',\n 'TRADING',\n 'TRAINING',\n 'TRAVEL',\n 'TRAVELERS',\n 'TRAVELERSINSURANCE',\n 'TRUST',\n 'TRV',\n 'TT',\n 'TUBE',\n 'TUI',\n 'TUNES',\n 'TUSHU',\n 'TV',\n 'TVS',\n 'TW',\n 'TZ',\n 'UA',\n 'UBANK',\n 'UBS',\n 'UG',\n 'UK',\n 'UNICOM',\n 'UNIVERSITY',\n 'UNO',\n 'UOL',\n 'UPS',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VACATIONS',\n 'VANA',\n 'VANGUARD',\n 'VC',\n 'VE',\n 'VEGAS',\n 'VENTURES',\n 'VERISIGN',\n 'VERSICHERUNG',\n 'VET',\n 'VG',\n 'VI',\n 'VIAJES',\n 'VIDEO',\n 'VIG',\n 'VIKING',\n 'VILLAS',\n 'VIN',\n 'VIP',\n 'VIRGIN',\n 'VISA',\n 'VISION',\n 'VIVA',\n 'VIVO',\n 'VLAANDEREN',\n 'VN',\n 'VODKA',\n 'VOLVO',\n 'VOTE',\n 'VOTING',\n 'VOTO',\n 'VOYAGE',\n 'VU',\n 'WALES',\n 'WALMART',\n 'WALTER',\n 'WANG',\n 'WANGGOU',\n 'WATCH',\n 'WATCHES',\n 'WEATHER',\n 'WEATHERCHANNEL',\n 'WEBCAM',\n 'WEBER',\n 'WEBSITE',\n 'WED',\n 'WEDDING',\n 'WEIBO',\n 'WEIR',\n 'WF',\n 'WHOSWHO',\n 'WIEN',\n 'WIKI',\n 'WILLIAMHILL',\n 'WIN',\n 'WINDOWS',\n 'WINE',\n 'WINNERS',\n 'WME',\n 'WOLTERSKLUWER',\n 'WOODSIDE',\n 'WORK',\n 'WORKS',\n 'WORLD',\n 'WOW',\n 'WS',\n 'WTC',\n 'WTF',\n 'XBOX',\n 'XEROX',\n 'XFINITY',\n 'XIHUAN',\n 'XIN',\n 'XN--11B4C3D',\n 'XN--1CK2E1B',\n 'XN--1QQW23A',\n 'XN--2SCRJ9C',\n 'XN--30RR7Y',\n 'XN--3BST00M',\n 'XN--3DS443G',\n 'XN--3E0B707E',\n 'XN--3HCRJ9C',\n 'XN--3PXU8K',\n 'XN--42C2D9A',\n 'XN--45BR5CYL',\n 'XN--45BRJ9C',\n 'XN--45Q11C',\n 'XN--4DBRK0CE',\n 'XN--4GBRIM',\n 'XN--54B7FTA0CC',\n 'XN--55QW42G',\n 'XN--55QX5D',\n 'XN--5SU34J936BGSG',\n 'XN--5TZM5G',\n 'XN--6FRZ82G',\n 'XN--6QQ986B3XL',\n 'XN--80ADXHKS',\n 'XN--80AO21A',\n 'XN--80AQECDR1A',\n 'XN--80ASEHDB',\n 'XN--80ASWG',\n 'XN--8Y0A063A',\n 'XN--90A3AC',\n 'XN--90AE',\n 'XN--90AIS',\n 'XN--9DBQ2A',\n 'XN--9ET52U',\n 'XN--9KRT00A',\n 'XN--B4W605FERD',\n 'XN--BCK1B9A5DRE4C',\n 'XN--C1AVG',\n 'XN--C2BR7G',\n 'XN--CCK2B3B',\n 'XN--CCKWCXETD',\n 'XN--CG4BKI',\n 'XN--CLCHC0EA0B2G2A9GCD',\n 'XN--CZR694B',\n 'XN--CZRS0T',\n 'XN--CZRU2D',\n 'XN--D1ACJ3B',\n 'XN--D1ALF',\n 'XN--E1A4C',\n 'XN--ECKVDTC9D',\n 'XN--EFVY88H',\n 'XN--FCT429K',\n 'XN--FHBEI',\n 'XN--FIQ228C5HS',\n 'XN--FIQ64B',\n 'XN--FIQS8S',\n 'XN--FIQZ9S',\n 'XN--FJQ720A',\n 'XN--FLW351E',\n 'XN--FPCRJ9C3D',\n 'XN--FZC2C9E2C',\n 'XN--FZYS8D69UVGM',\n 'XN--G2XX48C',\n 'XN--GCKR3F0F',\n 'XN--GECRJ9C',\n 'XN--GK3AT1E',\n 'XN--H2BREG3EVE',\n 'XN--H2BRJ9C',\n 'XN--H2BRJ9C8C',\n 'XN--HXT814E',\n 'XN--I1B6B1A6A2E',\n 'XN--IMR513N',\n 'XN--IO0A7I',\n 'XN--J1AEF',\n 'XN--J1AMH',\n 'XN--J6W193G',\n 'XN--JLQ480N2RG',\n 'XN--JVR189M',\n 'XN--KCRX77D1X4A',\n 'XN--KPRW13D',\n 'XN--KPRY57D',\n 'XN--KPUT3I',\n 'XN--L1ACC',\n 'XN--LGBBAT1AD8J',\n 'XN--MGB9AWBF',\n 'XN--MGBA3A3EJT',\n 'XN--MGBA3A4F16A',\n 'XN--MGBA7C0BBN0A',\n 'XN--MGBAAM7A8H',\n 'XN--MGBAB2BD',\n 'XN--MGBAH1A3HJKRD',\n 'XN--MGBAI9AZGQP6J',\n 'XN--MGBAYH7GPA',\n 'XN--MGBBH1A',\n 'XN--MGBBH1A71E',\n 'XN--MGBC0A9AZCG',\n 'XN--MGBCA7DZDO',\n 'XN--MGBCPQ6GPA1A',\n 'XN--MGBERP4A5D4AR',\n 'XN--MGBGU82A',\n 'XN--MGBI4ECEXP',\n 'XN--MGBPL2FH',\n 'XN--MGBT3DHD',\n 'XN--MGBTX2B',\n 'XN--MGBX4CD0AB',\n 'XN--MIX891F',\n 'XN--MK1BU44C',\n 'XN--MXTQ1M',\n 'XN--NGBC5AZD',\n 'XN--NGBE9E0A',\n 'XN--NGBRX',\n 'XN--NODE',\n 'XN--NQV7F',\n 'XN--NQV7FS00EMA',\n 'XN--NYQY26A',\n 'XN--O3CW4H',\n 'XN--OGBPF8FL',\n 'XN--OTU796D',\n 'XN--P1ACF',\n 'XN--P1AI',\n 'XN--PGBS0DH',\n 'XN--PSSY2U',\n 'XN--Q7CE6A',\n 'XN--Q9JYB4C',\n 'XN--QCKA1PMC',\n 'XN--QXA6A',\n 'XN--QXAM',\n 'XN--RHQV96G',\n 'XN--ROVU88B',\n 'XN--RVC1E0AM3E',\n 'XN--S9BRJ9C',\n 'XN--SES554G',\n 'XN--T60B56A',\n 'XN--TCKWE',\n 'XN--TIQ49XQYJ',\n 'XN--UNUP4Y',\n 'XN--VERMGENSBERATER-CTB',\n 'XN--VERMGENSBERATUNG-PWB',\n 'XN--VHQUV',\n 'XN--VUQ861B',\n 'XN--W4R85EL8FHU5DNRA',\n 'XN--W4RS40L',\n 'XN--WGBH1C',\n 'XN--WGBL6A',\n 'XN--XHQ521B',\n 'XN--XKC2AL3HYE2A',\n 'XN--XKC2DL3A5EE0H',\n 'XN--Y9A3AQ',\n 'XN--YFRO4I67O',\n 'XN--YGBI2AMMX',\n 'XN--ZFR164B',\n 'XXX',\n 'XYZ',\n 'YACHTS',\n 'YAHOO',\n 'YAMAXUN',\n 'YANDEX',\n 'YE',\n 'YODOBASHI',\n 'YOGA',\n 'YOKOHAMA',\n 'YOU',\n 'YOUTUBE',\n 'YT',\n 'YUN',\n 'ZA',\n 'ZAPPOS',\n 'ZARA',\n 'ZERO',\n 'ZIP',\n 'ZM',\n 'ZONE',\n 'ZUERICH',\n 'ZW'\n];\n\n\n// Keep as upper-case to make updating from source easier\n\nmodule.exports = new Set(internals.tlds.map((tld) => tld.toLowerCase()));\n","'use strict';\n\nconst Assert = require('@hapi/hoek/lib/assert');\nconst Domain = require('@sideway/address/lib/domain');\nconst Email = require('@sideway/address/lib/email');\nconst Ip = require('@sideway/address/lib/ip');\nconst EscapeRegex = require('@hapi/hoek/lib/escapeRegex');\nconst Tlds = require('@sideway/address/lib/tlds');\nconst Uri = require('@sideway/address/lib/uri');\n\nconst Any = require('./any');\nconst Common = require('../common');\n\n\nconst internals = {\n tlds: Tlds instanceof Set ? { tlds: { allow: 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: Ip.regex({ 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 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 },\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 },\n\n domain: {\n method(options) {\n\n if (options) {\n Common.assertOptions(options, ['allowFullyQualified', 'allowUnicode', '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 (Domain.isValid(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 (!Email.isValid(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 },\n\n guid: {\n alias: 'uuid',\n method(options = {}) {\n\n Common.assertOptions(options, ['version', 'separator']);\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 const regex = new RegExp(`^([\\\\[{\\\\(]?)[0-9A-F]{8}(${separator})[0-9A-F]{4}\\\\2?[${versionNumbers || '0-9A-F'}][0-9A-F]{3}\\\\2?[${versionNumbers ? '89AB' : '0-9A-F'}][0-9A-F]{3}\\\\2?[0-9A-F]{12}([\\\\]}\\\\)]?)$`, 'i');\n\n return this.$_addRule({ name: 'guid', args: { options }, regex });\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 // Matching braces\n\n if (internals.guidBrackets[results[1]] !== results[results.length - 1]) {\n return helpers.error('string.guid');\n }\n\n return value;\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 },\n\n hostname: {\n method() {\n\n return this.$_addRule('hostname');\n },\n validate(value, helpers) {\n\n if (Domain.isValid(value, { minDomainSegments: 1 }) ||\n internals.ipRegex.test(value)) {\n\n return value;\n }\n\n return helpers.error('string.hostname');\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 } = Ip.regex(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 },\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 },\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 },\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 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 args: ['limit', 'encoding']\n },\n\n min: {\n method(limit, encoding) {\n\n return internals.length(this, 'min', limit, '>=', encoding);\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 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 },\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 } = Uri.regex(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 !Domain.isValid(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 }\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;\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(Domain.isValid(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/lib/assert');\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 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 = require('@hapi/hoek/lib/assert');\n\nconst Any = require('./any');\nconst Common = require('../common');\n\n\nconst internals = {};\n\n\nmodule.exports = Any.extend({\n\n type: 'binary',\n\n coerce: {\n from: ['string', 'object'],\n method(value, { schema }) {\n\n if (typeof value === 'string' || (value !== null && value.type === 'Buffer')) {\n try {\n return { value: Buffer.from(value, schema._flags.encoding) };\n }\n catch (ignoreErr) { }\n }\n }\n },\n\n validate(value, { error }) {\n\n if (!Buffer.isBuffer(value)) {\n return { value, errors: error('binary.base') };\n }\n },\n\n rules: {\n encoding: {\n method(encoding) {\n\n Assert(Buffer.isEncoding(encoding), 'Invalid encoding:', encoding);\n\n return this.$_setFlag('encoding', encoding);\n }\n },\n\n length: {\n method(limit) {\n\n return this.$_addRule({ name: 'length', method: '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('binary.' + name, { limit: args.limit, value });\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 },\n\n min: {\n method(limit) {\n\n return this.$_addRule({ name: 'min', method: 'length', args: { limit }, operator: '>=' });\n }\n }\n },\n\n cast: {\n string: {\n from: (value) => Buffer.isBuffer(value),\n to(value, helpers) {\n\n return value.toString();\n }\n }\n },\n\n messages: {\n 'binary.base': '{{#label}} must be a buffer or a string',\n 'binary.length': '{{#label}} must be {{#limit}} bytes',\n 'binary.max': '{{#label}} must be less than or equal to {{#limit}} bytes',\n 'binary.min': '{{#label}} must be at least {{#limit}} bytes'\n }\n});\n","'use strict';\n\nconst Assert = require('@hapi/hoek/lib/assert');\nconst Clone = require('@hapi/hoek/lib/clone');\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","/*\r\n * big.js v7.0.1\r\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\r\n * Copyright (c) 2025 Michael Mclaughlin\r\n * https://github.com/MikeMcl/big.js/LICENCE.md\r\n */\r\n\r\n\r\n/************************************** EDITABLE DEFAULTS *****************************************/\r\n\r\n\r\n // The default values below must be integers within the stated ranges.\r\n\r\n /*\r\n * The maximum number of decimal places (DP) of the results of operations involving division:\r\n * div and sqrt, and pow with negative exponents.\r\n */\r\nvar DP = 20, // 0 to MAX_DP\r\n\r\n /*\r\n * The rounding mode (RM) used when rounding to the above decimal places.\r\n *\r\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\r\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\r\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\r\n * 3 Away from zero. (ROUND_UP)\r\n */\r\n RM = 1, // 0, 1, 2 or 3\r\n\r\n // The maximum value of DP and Big.DP.\r\n MAX_DP = 1E6, // 0 to 1000000\r\n\r\n // The maximum magnitude of the exponent argument to the pow method.\r\n MAX_POWER = 1E6, // 1 to 1000000\r\n\r\n /*\r\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\r\n * (JavaScript numbers: -7)\r\n * -1000000 is the minimum recommended exponent value of a Big.\r\n */\r\n NE = -7, // 0 to -1000000\r\n\r\n /*\r\n * The positive exponent (PE) at and above which toString returns exponential notation.\r\n * (JavaScript numbers: 21)\r\n * 1000000 is the maximum recommended exponent value of a Big, but this limit is not enforced.\r\n */\r\n PE = 21, // 0 to 1000000\r\n\r\n /*\r\n * When true, an error will be thrown if a primitive number is passed to the Big constructor,\r\n * or if valueOf is called, or if toNumber is called on a Big which cannot be converted to a\r\n * primitive number without a loss of precision.\r\n */\r\n STRICT = false, // true or false\r\n\r\n\r\n/**************************************************************************************************/\r\n\r\n\r\n // Error messages.\r\n NAME = '[big.js] ',\r\n INVALID = NAME + 'Invalid ',\r\n INVALID_DP = INVALID + 'decimal places',\r\n INVALID_RM = INVALID + 'rounding mode',\r\n DIV_BY_ZERO = NAME + 'Division by zero',\r\n\r\n // The shared prototype object.\r\n P = {},\r\n UNDEFINED = void 0,\r\n NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\r\n\r\n\r\n/*\r\n * Create and return a Big constructor.\r\n */\r\nfunction _Big_() {\r\n\r\n /*\r\n * The Big constructor and exported function.\r\n * Create and return a new instance of a Big number object.\r\n *\r\n * n {number|string|Big} A numeric value.\r\n */\r\n function Big(n) {\r\n var x = this;\r\n\r\n // Enable constructor usage without new.\r\n if (!(x instanceof Big)) {\r\n return n === UNDEFINED && arguments.length === 0 ? _Big_() : new Big(n);\r\n }\r\n\r\n\r\n // Duplicate.\r\n if (n instanceof Big) {\r\n x.s = n.s;\r\n x.e = n.e;\r\n x.c = n.c.slice();\r\n } else {\r\n if (typeof n !== 'string') {\r\n if (Big.strict === true && typeof n !== 'bigint') {\r\n throw TypeError(INVALID + 'value');\r\n }\r\n\r\n // Minus zero?\r\n n = n === 0 && 1 / n < 0 ? '-0' : String(n);\r\n }\r\n\r\n parse(x, n);\r\n }\r\n\r\n // Retain a reference to this Big constructor.\r\n // Shadow Big.prototype.constructor which points to Object.\r\n x.constructor = Big;\r\n }\r\n\r\n Big.prototype = P;\r\n Big.DP = DP;\r\n Big.RM = RM;\r\n Big.NE = NE;\r\n Big.PE = PE;\r\n Big.strict = STRICT;\r\n Big.roundDown = 0;\r\n Big.roundHalfUp = 1;\r\n Big.roundHalfEven = 2;\r\n Big.roundUp = 3;\r\n\r\n return Big;\r\n}\r\n\r\n\r\n/*\r\n * Parse the number or string value passed to a Big constructor.\r\n *\r\n * x {Big} A Big number instance.\r\n * n {number|string} A numeric value.\r\n */\r\nfunction parse(x, n) {\r\n var e, i, nl;\r\n\r\n if (!NUMERIC.test(n)) {\r\n throw Error(INVALID + 'number');\r\n }\r\n\r\n // Determine sign.\r\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\r\n\r\n // Decimal point?\r\n if ((e = n.indexOf('.')) > -1) n = n.replace('.', '');\r\n\r\n // Exponential form?\r\n if ((i = n.search(/e/i)) > 0) {\r\n\r\n // Determine exponent.\r\n if (e < 0) e = i;\r\n e += +n.slice(i + 1);\r\n n = n.substring(0, i);\r\n } else if (e < 0) {\r\n\r\n // Integer.\r\n e = n.length;\r\n }\r\n\r\n nl = n.length;\r\n\r\n // Determine leading zeros.\r\n for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\r\n\r\n if (i == nl) {\r\n\r\n // Zero.\r\n x.c = [x.e = 0];\r\n } else {\r\n\r\n // Determine trailing zeros.\r\n for (; nl > 0 && n.charAt(--nl) == '0';);\r\n x.e = e - i - 1;\r\n x.c = [];\r\n\r\n // Convert string to array of digits without leading/trailing zeros.\r\n for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Round Big x to a maximum of sd significant digits using rounding mode rm.\r\n *\r\n * x {Big} The Big to round.\r\n * sd {number} Significant digits: integer, 0 to MAX_DP inclusive.\r\n * rm {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n * [more] {boolean} Whether the result of division was truncated.\r\n */\r\nfunction round(x, sd, rm, more) {\r\n var xc = x.c;\r\n\r\n if (rm === UNDEFINED) rm = x.constructor.RM;\r\n if (rm !== 0 && rm !== 1 && rm !== 2 && rm !== 3) {\r\n throw Error(INVALID_RM);\r\n }\r\n\r\n if (sd < 1) {\r\n more =\r\n rm === 3 && (more || !!xc[0]) || sd === 0 && (\r\n rm === 1 && xc[0] >= 5 ||\r\n rm === 2 && (xc[0] > 5 || xc[0] === 5 && (more || xc[1] !== UNDEFINED))\r\n );\r\n\r\n xc.length = 1;\r\n\r\n if (more) {\r\n\r\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\r\n x.e = x.e - sd + 1;\r\n xc[0] = 1;\r\n } else {\r\n\r\n // Zero.\r\n xc[0] = x.e = 0;\r\n }\r\n } else if (sd < xc.length) {\r\n\r\n // xc[sd] is the digit after the digit that may be rounded up.\r\n more =\r\n rm === 1 && xc[sd] >= 5 ||\r\n rm === 2 && (xc[sd] > 5 || xc[sd] === 5 &&\r\n (more || xc[sd + 1] !== UNDEFINED || xc[sd - 1] & 1)) ||\r\n rm === 3 && (more || !!xc[0]);\r\n\r\n // Remove any digits after the required precision.\r\n xc.length = sd;\r\n\r\n // Round up?\r\n if (more) {\r\n\r\n // Rounding up may mean the previous digit has to be rounded up.\r\n for (; ++xc[--sd] > 9;) {\r\n xc[sd] = 0;\r\n if (sd === 0) {\r\n ++x.e;\r\n xc.unshift(1);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (sd = xc.length; !xc[--sd];) xc.pop();\r\n }\r\n\r\n return x;\r\n}\r\n\r\n\r\n/*\r\n * Return a string representing the value of Big x in normal or exponential notation.\r\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\r\n */\r\nfunction stringify(x, doExponential, isNonzero) {\r\n var e = x.e,\r\n s = x.c.join(''),\r\n n = s.length;\r\n\r\n // Exponential notation?\r\n if (doExponential) {\r\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\r\n\r\n // Normal notation.\r\n } else if (e < 0) {\r\n for (; ++e;) s = '0' + s;\r\n s = '0.' + s;\r\n } else if (e > 0) {\r\n if (++e > n) {\r\n for (e -= n; e--;) s += '0';\r\n } else if (e < n) {\r\n s = s.slice(0, e) + '.' + s.slice(e);\r\n }\r\n } else if (n > 1) {\r\n s = s.charAt(0) + '.' + s.slice(1);\r\n }\r\n\r\n return x.s < 0 && isNonzero ? '-' + s : s;\r\n}\r\n\r\n\r\n// Prototype/instance methods\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the absolute value of this Big.\r\n */\r\nP.abs = function () {\r\n var x = new this.constructor(this);\r\n x.s = 1;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return 1 if the value of this Big is greater than the value of Big y,\r\n * -1 if the value of this Big is less than the value of Big y, or\r\n * 0 if they have the same value.\r\n */\r\nP.cmp = function (y) {\r\n var isneg,\r\n x = this,\r\n xc = x.c,\r\n yc = (y = new x.constructor(y)).c,\r\n i = x.s,\r\n j = y.s,\r\n k = x.e,\r\n l = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) return !xc[0] ? !yc[0] ? 0 : -j : i;\r\n\r\n // Signs differ?\r\n if (i != j) return i;\r\n\r\n isneg = i < 0;\r\n\r\n // Compare exponents.\r\n if (k != l) return k > l ^ isneg ? 1 : -1;\r\n\r\n j = (k = xc.length) < (l = yc.length) ? k : l;\r\n\r\n // Compare digit by digit.\r\n for (i = -1; ++i < j;) {\r\n if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\r\n }\r\n\r\n // Compare lengths.\r\n return k == l ? 0 : k > l ^ isneg ? 1 : -1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\r\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.div = function (y) {\r\n var x = this,\r\n Big = x.constructor,\r\n a = x.c, // dividend\r\n b = (y = new Big(y)).c, // divisor\r\n k = x.s == y.s ? 1 : -1,\r\n dp = Big.DP;\r\n\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n\r\n // Divisor is zero?\r\n if (!b[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n // Dividend is 0? Return +-0.\r\n if (!a[0]) {\r\n y.s = k;\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n var bl, bt, n, cmp, ri,\r\n bz = b.slice(),\r\n ai = bl = b.length,\r\n al = a.length,\r\n r = a.slice(0, bl), // remainder\r\n rl = r.length,\r\n q = y, // quotient\r\n qc = q.c = [],\r\n qi = 0,\r\n p = dp + (q.e = x.e - y.e) + 1; // precision of the result\r\n\r\n q.s = k;\r\n k = p < 0 ? 0 : p;\r\n\r\n // Create version of divisor with leading zero.\r\n bz.unshift(0);\r\n\r\n // Add zeros to make remainder as long as divisor.\r\n for (; rl++ < bl;) r.push(0);\r\n\r\n do {\r\n\r\n // n is how many times the divisor goes into current remainder.\r\n for (n = 0; n < 10; n++) {\r\n\r\n // Compare divisor and remainder.\r\n if (bl != (rl = r.length)) {\r\n cmp = bl > rl ? 1 : -1;\r\n } else {\r\n for (ri = -1, cmp = 0; ++ri < bl;) {\r\n if (b[ri] != r[ri]) {\r\n cmp = b[ri] > r[ri] ? 1 : -1;\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // If divisor < remainder, subtract divisor from remainder.\r\n if (cmp < 0) {\r\n\r\n // Remainder can't be more than 1 digit longer than divisor.\r\n // Equalise lengths using divisor with extra leading zero?\r\n for (bt = rl == bl ? b : bz; rl;) {\r\n if (r[--rl] < bt[rl]) {\r\n ri = rl;\r\n for (; ri && !r[--ri];) r[ri] = 9;\r\n --r[ri];\r\n r[rl] += 10;\r\n }\r\n r[rl] -= bt[rl];\r\n }\r\n\r\n for (; !r[0];) r.shift();\r\n } else {\r\n break;\r\n }\r\n }\r\n\r\n // Add the digit n to the result array.\r\n qc[qi++] = cmp ? n : ++n;\r\n\r\n // Update the remainder.\r\n if (r[0] && cmp) r[rl] = a[ai] || 0;\r\n else r = [a[ai]];\r\n\r\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\r\n\r\n // Leading zero? Do not remove if result is simply zero (qi == 1).\r\n if (!qc[0] && qi != 1) {\r\n\r\n // There can't be more than one zero.\r\n qc.shift();\r\n q.e--;\r\n p--;\r\n }\r\n\r\n // Round?\r\n if (qi > p) round(q, p, Big.RM, r[0] !== UNDEFINED);\r\n\r\n return q;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\r\n */\r\nP.eq = function (y) {\r\n return this.cmp(y) === 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\r\n * false.\r\n */\r\nP.gt = function (y) {\r\n return this.cmp(y) > 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.gte = function (y) {\r\n return this.cmp(y) > -1;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\r\n */\r\nP.lt = function (y) {\r\n return this.cmp(y) < 0;\r\n};\r\n\r\n\r\n/*\r\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\r\n * return false.\r\n */\r\nP.lte = function (y) {\r\n return this.cmp(y) < 1;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big minus the value of Big y.\r\n */\r\nP.minus = P.sub = function (y) {\r\n var i, j, t, xlty,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n // Signs differ?\r\n if (a != b) {\r\n y.s = -b;\r\n return x.plus(y);\r\n }\r\n\r\n var xc = x.c.slice(),\r\n xe = x.e,\r\n yc = y.c,\r\n ye = y.e;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (yc[0]) {\r\n y.s = -b;\r\n } else if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = 1;\r\n }\r\n return y;\r\n }\r\n\r\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\r\n if (a = xe - ye) {\r\n\r\n if (xlty = a < 0) {\r\n a = -a;\r\n t = xc;\r\n } else {\r\n ye = xe;\r\n t = yc;\r\n }\r\n\r\n t.reverse();\r\n for (b = a; b--;) t.push(0);\r\n t.reverse();\r\n } else {\r\n\r\n // Exponents equal. Check digit by digit.\r\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\r\n\r\n for (a = b = 0; b < j; b++) {\r\n if (xc[b] != yc[b]) {\r\n xlty = xc[b] < yc[b];\r\n break;\r\n }\r\n }\r\n }\r\n\r\n // x < y? Point xc to the array of the bigger number.\r\n if (xlty) {\r\n t = xc;\r\n xc = yc;\r\n yc = t;\r\n y.s = -y.s;\r\n }\r\n\r\n /*\r\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\r\n * needs to start at yc.length.\r\n */\r\n if ((b = (j = yc.length) - (i = xc.length)) > 0) for (; b--;) xc[i++] = 0;\r\n\r\n // Subtract yc from xc.\r\n for (b = i; j > a;) {\r\n if (xc[--j] < yc[j]) {\r\n for (i = j; i && !xc[--i];) xc[i] = 9;\r\n --xc[i];\r\n xc[j] += 10;\r\n }\r\n\r\n xc[j] -= yc[j];\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (; xc[--b] === 0;) xc.pop();\r\n\r\n // Remove leading zeros and adjust exponent accordingly.\r\n for (; xc[0] === 0;) {\r\n xc.shift();\r\n --ye;\r\n }\r\n\r\n if (!xc[0]) {\r\n\r\n // n - n = +0\r\n y.s = 1;\r\n\r\n // Result must be zero.\r\n xc = [ye = 0];\r\n }\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\r\n */\r\nP.mod = function (y) {\r\n var ygtx,\r\n x = this,\r\n Big = x.constructor,\r\n a = x.s,\r\n b = (y = new Big(y)).s;\r\n\r\n if (!y.c[0]) {\r\n throw Error(DIV_BY_ZERO);\r\n }\r\n\r\n x.s = y.s = 1;\r\n ygtx = y.cmp(x) == 1;\r\n x.s = a;\r\n y.s = b;\r\n\r\n if (ygtx) return new Big(x);\r\n\r\n a = Big.DP;\r\n b = Big.RM;\r\n Big.DP = Big.RM = 0;\r\n x = x.div(y);\r\n Big.DP = a;\r\n Big.RM = b;\r\n\r\n return this.minus(x.times(y));\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big negated.\r\n */\r\nP.neg = function () {\r\n var x = new this.constructor(this);\r\n x.s = -x.s;\r\n return x;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big plus the value of Big y.\r\n */\r\nP.plus = P.add = function (y) {\r\n var e, k, t,\r\n x = this,\r\n Big = x.constructor;\r\n\r\n y = new Big(y);\r\n\r\n // Signs differ?\r\n if (x.s != y.s) {\r\n y.s = -y.s;\r\n return x.minus(y);\r\n }\r\n\r\n var xe = x.e,\r\n xc = x.c,\r\n ye = y.e,\r\n yc = y.c;\r\n\r\n // Either zero?\r\n if (!xc[0] || !yc[0]) {\r\n if (!yc[0]) {\r\n if (xc[0]) {\r\n y = new Big(x);\r\n } else {\r\n y.s = x.s;\r\n }\r\n }\r\n return y;\r\n }\r\n\r\n xc = xc.slice();\r\n\r\n // Prepend zeros to equalise exponents.\r\n // Note: reverse faster than unshifts.\r\n if (e = xe - ye) {\r\n if (e > 0) {\r\n ye = xe;\r\n t = yc;\r\n } else {\r\n e = -e;\r\n t = xc;\r\n }\r\n\r\n t.reverse();\r\n for (; e--;) t.push(0);\r\n t.reverse();\r\n }\r\n\r\n // Point xc to the longer array.\r\n if (xc.length - yc.length < 0) {\r\n t = yc;\r\n yc = xc;\r\n xc = t;\r\n }\r\n\r\n e = yc.length;\r\n\r\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\r\n for (k = 0; e; xc[e] %= 10) k = (xc[--e] = xc[e] + yc[e] + k) / 10 | 0;\r\n\r\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\r\n\r\n if (k) {\r\n xc.unshift(k);\r\n ++ye;\r\n }\r\n\r\n // Remove trailing zeros.\r\n for (e = xc.length; xc[--e] === 0;) xc.pop();\r\n\r\n y.c = xc;\r\n y.e = ye;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a Big whose value is the value of this Big raised to the power n.\r\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\r\n * mode Big.RM.\r\n *\r\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\r\n */\r\nP.pow = function (n) {\r\n var x = this,\r\n one = new x.constructor('1'),\r\n y = one,\r\n isneg = n < 0;\r\n\r\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER) {\r\n throw Error(INVALID + 'exponent');\r\n }\r\n\r\n if (isneg) n = -n;\r\n\r\n for (;;) {\r\n if (n & 1) y = y.times(x);\r\n n >>= 1;\r\n if (!n) break;\r\n x = x.times(x);\r\n }\r\n\r\n return isneg ? one.div(y) : y;\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum precision of sd\r\n * significant digits using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.prec = function (sd, rm) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n return round(new this.constructor(this), sd, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big rounded to a maximum of dp decimal places\r\n * using rounding mode rm, or Big.RM if rm is not specified.\r\n * If dp is negative, round to an integer which is a multiple of 10**-dp.\r\n * If dp is not specified, round to 0 decimal places.\r\n *\r\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.round = function (dp, rm) {\r\n if (dp === UNDEFINED) dp = 0;\r\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n return round(new this.constructor(this), dp + this.e + 1, rm);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\r\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\r\n */\r\nP.sqrt = function () {\r\n var r, c, t,\r\n x = this,\r\n Big = x.constructor,\r\n s = x.s,\r\n e = x.e,\r\n half = new Big('0.5');\r\n\r\n // Zero?\r\n if (!x.c[0]) return new Big(x);\r\n\r\n // Negative?\r\n if (s < 0) {\r\n throw Error(NAME + 'No square root');\r\n }\r\n\r\n // Estimate.\r\n s = Math.sqrt(+stringify(x, true, true));\r\n\r\n // Math.sqrt underflow/overflow?\r\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\r\n if (s === 0 || s === 1 / 0) {\r\n c = x.c.join('');\r\n if (!(c.length + e & 1)) c += '0';\r\n s = Math.sqrt(c);\r\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\r\n r = new Big((s == 1 / 0 ? '5e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\r\n } else {\r\n r = new Big(s + '');\r\n }\r\n\r\n e = r.e + (Big.DP += 4);\r\n\r\n // Newton-Raphson iteration.\r\n do {\r\n t = r;\r\n r = half.times(t.plus(x.div(t)));\r\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\r\n\r\n return round(r, (Big.DP -= 4) + r.e + 1, Big.RM);\r\n};\r\n\r\n\r\n/*\r\n * Return a new Big whose value is the value of this Big times the value of Big y.\r\n */\r\nP.times = P.mul = function (y) {\r\n var c,\r\n x = this,\r\n Big = x.constructor,\r\n xc = x.c,\r\n yc = (y = new Big(y)).c,\r\n a = xc.length,\r\n b = yc.length,\r\n i = x.e,\r\n j = y.e;\r\n\r\n // Determine sign of result.\r\n y.s = x.s == y.s ? 1 : -1;\r\n\r\n // Return signed 0 if either 0.\r\n if (!xc[0] || !yc[0]) {\r\n y.c = [y.e = 0];\r\n return y;\r\n }\r\n\r\n // Initialise exponent of result as x.e + y.e.\r\n y.e = i + j;\r\n\r\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\r\n if (a < b) {\r\n c = xc;\r\n xc = yc;\r\n yc = c;\r\n j = a;\r\n a = b;\r\n b = j;\r\n }\r\n\r\n // Initialise coefficient array of result with zeros.\r\n for (c = new Array(j = a + b); j--;) c[j] = 0;\r\n\r\n // Multiply.\r\n\r\n // i is initially xc.length.\r\n for (i = b; i--;) {\r\n b = 0;\r\n\r\n // a is yc.length.\r\n for (j = a + i; j > i;) {\r\n\r\n // Current sum of products at this digit position, plus carry.\r\n b = c[j] + yc[i] * xc[j - i - 1] + b;\r\n c[j--] = b % 10;\r\n\r\n // carry\r\n b = b / 10 | 0;\r\n }\r\n\r\n c[j] = b;\r\n }\r\n\r\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\r\n if (b) ++y.e;\r\n else c.shift();\r\n\r\n // Remove trailing zeros.\r\n for (i = c.length; !c[--i];) c.pop();\r\n y.c = c;\r\n\r\n return y;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in exponential notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toExponential = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), ++dp, rm);\r\n for (; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, true, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big in normal notation rounded to dp fixed\r\n * decimal places using rounding mode rm, or Big.RM if rm is not specified.\r\n *\r\n * dp? {number} Decimal places: integer, 0 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n *\r\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\r\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\r\n */\r\nP.toFixed = function (dp, rm) {\r\n var x = this,\r\n n = x.c[0];\r\n\r\n if (dp !== UNDEFINED) {\r\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP) {\r\n throw Error(INVALID_DP);\r\n }\r\n x = round(new x.constructor(x), dp + x.e + 1, rm);\r\n\r\n // x.e may have changed if the value is rounded up.\r\n for (dp = dp + x.e + 1; x.c.length < dp;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, false, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Omit the sign for negative zero.\r\n */\r\nP.toJSON = P.toString = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, !!x.c[0]);\r\n};\r\n\r\nif (typeof Symbol !== \"undefined\") {\r\n P[Symbol.for('nodejs.util.inspect.custom')] = P.toJSON;\r\n}\r\n\r\n\r\n/*\r\n * Return the value of this Big as a primitive number.\r\n */\r\nP.toNumber = function () {\r\n var n = +stringify(this, true, true);\r\n if (this.constructor.strict === true && !this.eq(n.toString())) {\r\n throw Error(NAME + 'Imprecise conversion');\r\n }\r\n return n;\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big rounded to sd significant digits using\r\n * rounding mode rm, or Big.RM if rm is not specified.\r\n * Use exponential notation if sd is less than the number of digits necessary to represent\r\n * the integer part of the value in normal notation.\r\n *\r\n * sd {number} Significant digits: integer, 1 to MAX_DP inclusive.\r\n * rm? {number} Rounding mode: 0 (down), 1 (half-up), 2 (half-even) or 3 (up).\r\n */\r\nP.toPrecision = function (sd, rm) {\r\n var x = this,\r\n Big = x.constructor,\r\n n = x.c[0];\r\n\r\n if (sd !== UNDEFINED) {\r\n if (sd !== ~~sd || sd < 1 || sd > MAX_DP) {\r\n throw Error(INVALID + 'precision');\r\n }\r\n x = round(new Big(x), sd, rm);\r\n for (; x.c.length < sd;) x.c.push(0);\r\n }\r\n\r\n return stringify(x, sd <= x.e || x.e <= Big.NE || x.e >= Big.PE, !!n);\r\n};\r\n\r\n\r\n/*\r\n * Return a string representing the value of this Big.\r\n * Return exponential notation if this Big has a positive exponent equal to or greater than\r\n * Big.PE, or a negative exponent equal to or less than Big.NE.\r\n * Include the sign for negative zero.\r\n */\r\nP.valueOf = function () {\r\n var x = this,\r\n Big = x.constructor;\r\n if (Big.strict === true) {\r\n throw Error(NAME + 'valueOf disallowed');\r\n }\r\n return stringify(x, x.e <= Big.NE || x.e >= Big.PE, true);\r\n};\r\n\r\n\r\n// Export\r\n\r\n\r\nexport var Big = _Big_();\r\n\r\n/// <reference types=\"https://raw.githubusercontent.com/DefinitelyTyped/DefinitelyTyped/master/types/big.js/index.d.ts\" />\r\nexport default Big;\r\n","import { default as Big } from 'big.js'\nimport type { AnySchema } from '../schemas'\nimport type { Root, ExtensionFactory, Reference } from 'joi'\n\n/**\n * Internal comparison function for BigInt validation operations using Big.js.\n *\n * @param value - The value to compare\n * @param limit - The limit to compare against\n * @param operator - The comparison operator to use\n * @returns True if the comparison passes, false otherwise\n *\n * @internal\n */\nconst compare = (value: Big, limit: Big, operator: '>' | '<' | '>=' | '<=' | 'multiple') => {\n switch (operator) {\n case '>':\n return value.gt(limit)\n case '<':\n return value.lt(limit)\n case '>=':\n return value.gte(limit)\n case '<=':\n return value.lte(limit)\n case 'multiple':\n return value.mod(limit).eq(0)\n /* v8 ignore next 2 */\n default:\n return false\n }\n}\n\n/**\n * A Joi extension that adds support for BigInt validation with comprehensive\n * comparison operations and type coercion.\n *\n * @example\n * ```typescript\n * import { validator } from '@nhtio/validation'\n *\n * const schema = validator.bigint()\n * .min(0n)\n * .max(1000n)\n * .required()\n *\n * // Validates and converts to BigInt\n * const result = schema.validate(\"123\") // Returns { value: 123n }\n * ```\n *\n * @example\n * ```typescript\n * // Works with all standard Joi methods\n * const optionalSchema = validator.bigint()\n * .positive()\n * .optional()\n * .allow(null)\n * .default(0n)\n * ```\n *\n * @public\n */\nexport const bigint: ExtensionFactory = function (this: Root, joi: Root) {\n return {\n type: 'bigint',\n base: joi.any(),\n coerce: {\n from: ['string', 'number'],\n method(value, helpers) {\n /* v8 ignore next 3 */\n if ('bigint' === typeof value) {\n return { value }\n }\n\n try {\n // Use Big.js to handle the conversion properly\n const asBig = Big(value.toString())\n\n // Check if it's an integer (no decimal places)\n if (asBig.eq(asBig.round(0))) {\n return { value: BigInt(asBig.toString()) }\n } else {\n // Has decimal places, not valid for BigInt\n return {\n value,\n errors: [\n helpers.error('bigint.base', {\n value: String(value),\n }),\n ],\n }\n }\n } catch {\n /* v8 ignore next 5 */\n return {\n value,\n errors: [\n helpers.error('bigint.base', {\n value: String(value),\n }),\n ],\n }\n }\n },\n },\n messages: {\n 'bigint.base': '\"{{#label}}\" must be a valid bigint',\n 'bigint.greater': '\"{{#label}}\" must be greater than {{#limit}}',\n 'bigint.less': '\"{{#label}}\" must be less than {{#limit}}',\n 'bigint.max': '\"{{#label}}\" must be less than or equal to {{#limit}}',\n 'bigint.min': '\"{{#label}}\" must be greater than or equal to {{#limit}}',\n 'bigint.multiple': '\"{{#label}}\" must be a multiple of {{#limit}}',\n 'bigint.negative': '\"{{#label}}\" must be a negative bigint',\n 'bigint.positive': '\"{{#label}}\" must be a positive bigint',\n },\n validate(value, { error }) {\n // Accept native BigInt values as-is\n if (typeof value === 'bigint') {\n return { value }\n }\n\n // Everything else should be handled by coerce, so if we get here, it's invalid\n /* v8 ignore next 5 */\n return {\n value,\n errors: error('bigint.base', {\n value: String(value),\n }),\n }\n },\n rules: {\n compare: {\n method: false,\n validate(value, helpers, { limit }, { name, operator }) {\n const big = Big(value.toString())\n const threshold = Big(limit.toString())\n const valid = compare(big, threshold, operator)\n if (valid) {\n return value\n }\n return helpers.error('bigint.' + name, {\n limit: limit.toString(),\n value: value.toString(),\n })\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: (value) => typeof value === 'bigint',\n message: 'must be a bigint',\n },\n ],\n },\n /**\n * Validates that the BigInt is greater than the specified threshold\n * @param limit - The threshold value to compare against\n */\n greater: {\n method(limit) {\n // @ts-ignore\n return this.$_addRule({\n name: 'greater',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '>',\n })\n },\n },\n /**\n * Validates that the BigInt is less than the specified threshold\n * @param limit - The threshold value to compare against\n */\n less: {\n method(limit) {\n // @ts-ignore\n return this.$_addRule({ name: 'less', method: 'compare', args: { limit }, operator: '<' })\n },\n },\n /**\n * Validates that the BigInt is less than or equal to the specified maximum\n * @param limit - The maximum allowed value\n */\n max: {\n method(limit) {\n // @ts-ignore\n return this.$_addRule({ name: 'max', method: 'compare', args: { limit }, operator: '<=' })\n },\n },\n /**\n * Validates that the BigInt is greater than or equal to the specified minimum\n * @param limit - The minimum allowed value\n */\n min: {\n method(limit) {\n // @ts-ignore\n return this.$_addRule({ name: 'min', method: 'compare', args: { limit }, operator: '>=' })\n },\n },\n /**\n * Validates that the BigInt is a multiple of the specified factor\n * @param limit - The factor that the value must be a multiple of\n */\n multiple: {\n method(limit) {\n // @ts-ignore\n return this.$_addRule({\n name: 'multiple',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: 'multiple',\n })\n },\n },\n /**\n * Validates that the BigInt is negative (less than zero)\n */\n negative: {\n method() {\n return this.$_addRule('negative')\n },\n validate(value, helpers) {\n if (value >= 0n) {\n return helpers.error('bigint.negative', { value: value.toString() })\n }\n return value\n },\n },\n /**\n * Validates that the BigInt is positive (greater than zero)\n */\n positive: {\n method() {\n return this.$_addRule('positive')\n },\n validate(value, helpers) {\n if (value <= 0n) {\n return helpers.error('bigint.positive', { value: value.toString() })\n }\n return value\n },\n },\n },\n cast: {\n string: {\n from: (value) => typeof value === 'bigint',\n to(value) {\n return value.toString()\n },\n },\n },\n }\n}\n\n/**\n * Schema type for BigInt validation with comprehensive comparison operations.\n *\n * This interface extends the base Joi AnySchema to provide BigInt-specific\n * validation methods including range checks, sign validation, and multiple checks.\n *\n * @example\n * ```typescript\n * import { validator } from '@nhtio/validation'\n *\n * const schema: BigIntSchema = validator.bigint()\n * .min(0n)\n * .max(1000n)\n * .positive()\n * ```\n *\n * @public\n */\nexport interface BigIntSchema<TSchema = bigint> extends AnySchema<TSchema> {\n /**\n * Validates that the BigInt is greater than the specified threshold\n * @param limit - The threshold value to compare against\n */\n greater(limit: bigint | Reference): this\n\n /**\n * Validates that the BigInt is less than the specified threshold\n * @param limit - The threshold value to compare against\n */\n less(limit: bigint | Reference): this\n\n /**\n * Validates that the BigInt is less than or equal to the specified maximum\n * @param limit - The maximum allowed value\n */\n max(limit: bigint | Reference): this\n\n /**\n * Validates that the BigInt is greater than or equal to the specified minimum\n * @param limit - The minimum allowed value\n */\n min(limit: bigint | Reference): this\n\n /**\n * Validates that the BigInt is a multiple of the specified factor\n * @param limit - The factor that the value must be a multiple of\n */\n multiple(limit: bigint | Reference): this\n\n /**\n * Validates that the BigInt is negative (less than zero)\n */\n negative(): this\n\n /**\n * Validates that the BigInt is positive (greater than zero)\n */\n positive(): this\n}\n","// these aren't really private, but nor are they really useful to document\n\n/**\n * @private\n */\nclass LuxonError extends Error {}\n\n/**\n * @private\n */\nexport class InvalidDateTimeError extends LuxonError {\n constructor(reason) {\n super(`Invalid DateTime: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidIntervalError extends LuxonError {\n constructor(reason) {\n super(`Invalid Interval: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidDurationError extends LuxonError {\n constructor(reason) {\n super(`Invalid Duration: ${reason.toMessage()}`);\n }\n}\n\n/**\n * @private\n */\nexport class ConflictingSpecificationError extends LuxonError {}\n\n/**\n * @private\n */\nexport class InvalidUnitError extends LuxonError {\n constructor(unit) {\n super(`Invalid unit ${unit}`);\n }\n}\n\n/**\n * @private\n */\nexport class InvalidArgumentError extends LuxonError {}\n\n/**\n * @private\n */\nexport class ZoneIsAbstractError extends LuxonError {\n constructor() {\n super(\"Zone is an abstract class\");\n }\n}\n","/**\n * @private\n */\n\nconst n = \"numeric\",\n s = \"short\",\n l = \"long\";\n\nexport const DATE_SHORT = {\n year: n,\n month: n,\n day: n,\n};\n\nexport const DATE_MED = {\n year: n,\n month: s,\n day: n,\n};\n\nexport const DATE_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n};\n\nexport const DATE_FULL = {\n year: n,\n month: l,\n day: n,\n};\n\nexport const DATE_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n};\n\nexport const TIME_SIMPLE = {\n hour: n,\n minute: n,\n};\n\nexport const TIME_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const TIME_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const TIME_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n\nexport const TIME_24_SIMPLE = {\n hour: n,\n minute: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SECONDS = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n};\n\nexport const TIME_24_WITH_SHORT_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: s,\n};\n\nexport const TIME_24_WITH_LONG_OFFSET = {\n hour: n,\n minute: n,\n second: n,\n hourCycle: \"h23\",\n timeZoneName: l,\n};\n\nexport const DATETIME_SHORT = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_SHORT_WITH_SECONDS = {\n year: n,\n month: n,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_MED_WITH_SECONDS = {\n year: n,\n month: s,\n day: n,\n hour: n,\n minute: n,\n second: n,\n};\n\nexport const DATETIME_MED_WITH_WEEKDAY = {\n year: n,\n month: s,\n day: n,\n weekday: s,\n hour: n,\n minute: n,\n};\n\nexport const DATETIME_FULL = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_FULL_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: s,\n};\n\nexport const DATETIME_HUGE = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n timeZoneName: l,\n};\n\nexport const DATETIME_HUGE_WITH_SECONDS = {\n year: n,\n month: l,\n day: n,\n weekday: l,\n hour: n,\n minute: n,\n second: n,\n timeZoneName: l,\n};\n","import { ZoneIsAbstractError } from \"./errors.js\";\n\n/**\n * @interface\n */\nexport default class Zone {\n /**\n * The type of zone\n * @abstract\n * @type {string}\n */\n get type() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The name of this zone.\n * @abstract\n * @type {string}\n */\n get name() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * The IANA name of this zone.\n * Defaults to `name` if not overwritten by a subclass.\n * @abstract\n * @type {string}\n */\n get ianaName() {\n return this.name;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year.\n * @abstract\n * @type {boolean}\n */\n get isUniversal() {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, opts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Returns the offset's value as a string\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @abstract\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @abstract\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n throw new ZoneIsAbstractError();\n }\n\n /**\n * Return whether this Zone is valid.\n * @abstract\n * @type {boolean}\n */\n get isValid() {\n throw new ZoneIsAbstractError();\n }\n}\n","import { formatOffset, parseZoneInfo } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * Represents the local zone for this JavaScript environment.\n * @implements {Zone}\n */\nexport default class SystemZone extends Zone {\n /**\n * Get a singleton instance of the local zone\n * @return {SystemZone}\n */\n static get instance() {\n if (singleton === null) {\n singleton = new SystemZone();\n }\n return singleton;\n }\n\n /** @override **/\n get type() {\n return \"system\";\n }\n\n /** @override **/\n get name() {\n return new Intl.DateTimeFormat().resolvedOptions().timeZone;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale);\n }\n\n /** @override **/\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /** @override **/\n offset(ts) {\n return -new Date(ts).getTimezoneOffset();\n }\n\n /** @override **/\n equals(otherZone) {\n return otherZone.type === \"system\";\n }\n\n /** @override **/\n get isValid() {\n return true;\n }\n}\n","import { formatOffset, parseZoneInfo, isUndefined, objToLocalTS } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nconst dtfCache = new Map();\nfunction makeDTF(zoneName) {\n let dtf = dtfCache.get(zoneName);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(\"en-US\", {\n hour12: false,\n timeZone: zoneName,\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n second: \"2-digit\",\n era: \"short\",\n });\n dtfCache.set(zoneName, dtf);\n }\n return dtf;\n}\n\nconst typeToPos = {\n year: 0,\n month: 1,\n day: 2,\n era: 3,\n hour: 4,\n minute: 5,\n second: 6,\n};\n\nfunction hackyOffset(dtf, date) {\n const formatted = dtf.format(date).replace(/\\u200E/g, \"\"),\n parsed = /(\\d+)\\/(\\d+)\\/(\\d+) (AD|BC),? (\\d+):(\\d+):(\\d+)/.exec(formatted),\n [, fMonth, fDay, fYear, fadOrBc, fHour, fMinute, fSecond] = parsed;\n return [fYear, fMonth, fDay, fadOrBc, fHour, fMinute, fSecond];\n}\n\nfunction partsOffset(dtf, date) {\n const formatted = dtf.formatToParts(date);\n const filled = [];\n for (let i = 0; i < formatted.length; i++) {\n const { type, value } = formatted[i];\n const pos = typeToPos[type];\n\n if (type === \"era\") {\n filled[pos] = value;\n } else if (!isUndefined(pos)) {\n filled[pos] = parseInt(value, 10);\n }\n }\n return filled;\n}\n\nconst ianaZoneCache = new Map();\n/**\n * A zone identified by an IANA identifier, like America/New_York\n * @implements {Zone}\n */\nexport default class IANAZone extends Zone {\n /**\n * @param {string} name - Zone name\n * @return {IANAZone}\n */\n static create(name) {\n let zone = ianaZoneCache.get(name);\n if (zone === undefined) {\n ianaZoneCache.set(name, (zone = new IANAZone(name)));\n }\n return zone;\n }\n\n /**\n * Reset local caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCache() {\n ianaZoneCache.clear();\n dtfCache.clear();\n }\n\n /**\n * Returns whether the provided string is a valid specifier. This only checks the string's format, not that the specifier identifies a known zone; see isValidZone for that.\n * @param {string} s - The string to check validity on\n * @example IANAZone.isValidSpecifier(\"America/New_York\") //=> true\n * @example IANAZone.isValidSpecifier(\"Sport~~blorp\") //=> false\n * @deprecated For backward compatibility, this forwards to isValidZone, better use `isValidZone()` directly instead.\n * @return {boolean}\n */\n static isValidSpecifier(s) {\n return this.isValidZone(s);\n }\n\n /**\n * Returns whether the provided string identifies a real zone\n * @param {string} zone - The string to check\n * @example IANAZone.isValidZone(\"America/New_York\") //=> true\n * @example IANAZone.isValidZone(\"Fantasia/Castle\") //=> false\n * @example IANAZone.isValidZone(\"Sport~~blorp\") //=> false\n * @return {boolean}\n */\n static isValidZone(zone) {\n if (!zone) {\n return false;\n }\n try {\n new Intl.DateTimeFormat(\"en-US\", { timeZone: zone }).format();\n return true;\n } catch (e) {\n return false;\n }\n }\n\n constructor(name) {\n super();\n /** @private **/\n this.zoneName = name;\n /** @private **/\n this.valid = IANAZone.isValidZone(name);\n }\n\n /**\n * The type of zone. `iana` for all instances of `IANAZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"iana\";\n }\n\n /**\n * The name of this zone (i.e. the IANA zone name).\n * @override\n * @type {string}\n */\n get name() {\n return this.zoneName;\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns false for all IANA zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return false;\n }\n\n /**\n * Returns the offset's common name (such as EST) at the specified timestamp\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the name\n * @param {Object} opts - Options to affect the format\n * @param {string} opts.format - What style of offset to return. Accepts 'long' or 'short'.\n * @param {string} opts.locale - What locale to return the offset name in.\n * @return {string}\n */\n offsetName(ts, { format, locale }) {\n return parseZoneInfo(ts, format, locale, this.name);\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.offset(ts), format);\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n * @override\n * @param {number} ts - Epoch milliseconds for which to compute the offset\n * @return {number}\n */\n offset(ts) {\n if (!this.valid) return NaN;\n const date = new Date(ts);\n\n if (isNaN(date)) return NaN;\n\n const dtf = makeDTF(this.name);\n let [year, month, day, adOrBc, hour, minute, second] = dtf.formatToParts\n ? partsOffset(dtf, date)\n : hackyOffset(dtf, date);\n\n if (adOrBc === \"BC\") {\n year = -Math.abs(year) + 1;\n }\n\n // because we're using hour12 and https://bugs.chromium.org/p/chromium/issues/detail?id=1025564&can=2&q=%2224%3A00%22%20datetimeformat\n const adjustedHour = hour === 24 ? 0 : hour;\n\n const asUTC = objToLocalTS({\n year,\n month,\n day,\n hour: adjustedHour,\n minute,\n second,\n millisecond: 0,\n });\n\n let asTS = +date;\n const over = asTS % 1000;\n asTS -= over >= 0 ? over : 1000 + over;\n return (asUTC - asTS) / (60 * 1000);\n }\n\n /**\n * Return whether this Zone is equal to another zone\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"iana\" && otherZone.name === this.name;\n }\n\n /**\n * Return whether this Zone is valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return this.valid;\n }\n}\n","import { hasLocaleWeekInfo, hasRelative, padStart, roundTo, validateWeekSettings } from \"./util.js\";\nimport * as English from \"./english.js\";\nimport Settings from \"../settings.js\";\nimport DateTime from \"../datetime.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n// todo - remap caching\n\nlet intlLFCache = {};\nfunction getCachedLF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlLFCache[key];\n if (!dtf) {\n dtf = new Intl.ListFormat(locString, opts);\n intlLFCache[key] = dtf;\n }\n return dtf;\n}\n\nconst intlDTCache = new Map();\nfunction getCachedDTF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let dtf = intlDTCache.get(key);\n if (dtf === undefined) {\n dtf = new Intl.DateTimeFormat(locString, opts);\n intlDTCache.set(key, dtf);\n }\n return dtf;\n}\n\nconst intlNumCache = new Map();\nfunction getCachedINF(locString, opts = {}) {\n const key = JSON.stringify([locString, opts]);\n let inf = intlNumCache.get(key);\n if (inf === undefined) {\n inf = new Intl.NumberFormat(locString, opts);\n intlNumCache.set(key, inf);\n }\n return inf;\n}\n\nconst intlRelCache = new Map();\nfunction getCachedRTF(locString, opts = {}) {\n const { base, ...cacheKeyOpts } = opts; // exclude `base` from the options\n const key = JSON.stringify([locString, cacheKeyOpts]);\n let inf = intlRelCache.get(key);\n if (inf === undefined) {\n inf = new Intl.RelativeTimeFormat(locString, opts);\n intlRelCache.set(key, inf);\n }\n return inf;\n}\n\nlet sysLocaleCache = null;\nfunction systemLocale() {\n if (sysLocaleCache) {\n return sysLocaleCache;\n } else {\n sysLocaleCache = new Intl.DateTimeFormat().resolvedOptions().locale;\n return sysLocaleCache;\n }\n}\n\nconst intlResolvedOptionsCache = new Map();\nfunction getCachedIntResolvedOptions(locString) {\n let opts = intlResolvedOptionsCache.get(locString);\n if (opts === undefined) {\n opts = new Intl.DateTimeFormat(locString).resolvedOptions();\n intlResolvedOptionsCache.set(locString, opts);\n }\n return opts;\n}\n\nconst weekInfoCache = new Map();\nfunction getCachedWeekInfo(locString) {\n let data = weekInfoCache.get(locString);\n if (!data) {\n const locale = new Intl.Locale(locString);\n // browsers currently implement this as a property, but spec says it should be a getter function\n data = \"getWeekInfo\" in locale ? locale.getWeekInfo() : locale.weekInfo;\n // minimalDays was removed from WeekInfo: https://github.com/tc39/proposal-intl-locale-info/issues/86\n if (!(\"minimalDays\" in data)) {\n data = { ...fallbackWeekSettings, ...data };\n }\n weekInfoCache.set(locString, data);\n }\n return data;\n}\n\nfunction parseLocaleString(localeStr) {\n // I really want to avoid writing a BCP 47 parser\n // see, e.g. https://github.com/wooorm/bcp-47\n // Instead, we'll do this:\n\n // a) if the string has no -u extensions, just leave it alone\n // b) if it does, use Intl to resolve everything\n // c) if Intl fails, try again without the -u\n\n // private subtags and unicode subtags have ordering requirements,\n // and we're not properly parsing this, so just strip out the\n // private ones if they exist.\n const xIndex = localeStr.indexOf(\"-x-\");\n if (xIndex !== -1) {\n localeStr = localeStr.substring(0, xIndex);\n }\n\n const uIndex = localeStr.indexOf(\"-u-\");\n if (uIndex === -1) {\n return [localeStr];\n } else {\n let options;\n let selectedStr;\n try {\n options = getCachedDTF(localeStr).resolvedOptions();\n selectedStr = localeStr;\n } catch (e) {\n const smaller = localeStr.substring(0, uIndex);\n options = getCachedDTF(smaller).resolvedOptions();\n selectedStr = smaller;\n }\n\n const { numberingSystem, calendar } = options;\n return [selectedStr, numberingSystem, calendar];\n }\n}\n\nfunction intlConfigString(localeStr, numberingSystem, outputCalendar) {\n if (outputCalendar || numberingSystem) {\n if (!localeStr.includes(\"-u-\")) {\n localeStr += \"-u\";\n }\n\n if (outputCalendar) {\n localeStr += `-ca-${outputCalendar}`;\n }\n\n if (numberingSystem) {\n localeStr += `-nu-${numberingSystem}`;\n }\n return localeStr;\n } else {\n return localeStr;\n }\n}\n\nfunction mapMonths(f) {\n const ms = [];\n for (let i = 1; i <= 12; i++) {\n const dt = DateTime.utc(2009, i, 1);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction mapWeekdays(f) {\n const ms = [];\n for (let i = 1; i <= 7; i++) {\n const dt = DateTime.utc(2016, 11, 13 + i);\n ms.push(f(dt));\n }\n return ms;\n}\n\nfunction listStuff(loc, length, englishFn, intlFn) {\n const mode = loc.listingMode();\n\n if (mode === \"error\") {\n return null;\n } else if (mode === \"en\") {\n return englishFn(length);\n } else {\n return intlFn(length);\n }\n}\n\nfunction supportsFastNumbers(loc) {\n if (loc.numberingSystem && loc.numberingSystem !== \"latn\") {\n return false;\n } else {\n return (\n loc.numberingSystem === \"latn\" ||\n !loc.locale ||\n loc.locale.startsWith(\"en\") ||\n getCachedIntResolvedOptions(loc.locale).numberingSystem === \"latn\"\n );\n }\n}\n\n/**\n * @private\n */\n\nclass PolyNumberFormatter {\n constructor(intl, forceSimple, opts) {\n this.padTo = opts.padTo || 0;\n this.floor = opts.floor || false;\n\n const { padTo, floor, ...otherOpts } = opts;\n\n if (!forceSimple || Object.keys(otherOpts).length > 0) {\n const intlOpts = { useGrouping: false, ...opts };\n if (opts.padTo > 0) intlOpts.minimumIntegerDigits = opts.padTo;\n this.inf = getCachedINF(intl, intlOpts);\n }\n }\n\n format(i) {\n if (this.inf) {\n const fixed = this.floor ? Math.floor(i) : i;\n return this.inf.format(fixed);\n } else {\n // to match the browser's numberformatter defaults\n const fixed = this.floor ? Math.floor(i) : roundTo(i, 3);\n return padStart(fixed, this.padTo);\n }\n }\n}\n\n/**\n * @private\n */\n\nclass PolyDateFormatter {\n constructor(dt, intl, opts) {\n this.opts = opts;\n this.originalZone = undefined;\n\n let z = undefined;\n if (this.opts.timeZone) {\n // Don't apply any workarounds if a timeZone is explicitly provided in opts\n this.dt = dt;\n } else if (dt.zone.type === \"fixed\") {\n // UTC-8 or Etc/UTC-8 are not part of tzdata, only Etc/GMT+8 and the like.\n // That is why fixed-offset TZ is set to that unless it is:\n // 1. Representing offset 0 when UTC is used to maintain previous behavior and does not become GMT.\n // 2. Unsupported by the browser:\n // - some do not support Etc/\n // - < Etc/GMT-14, > Etc/GMT+12, and 30-minute or 45-minute offsets are not part of tzdata\n const gmtOffset = -1 * (dt.offset / 60);\n const offsetZ = gmtOffset >= 0 ? `Etc/GMT+${gmtOffset}` : `Etc/GMT${gmtOffset}`;\n if (dt.offset !== 0 && IANAZone.create(offsetZ).valid) {\n z = offsetZ;\n this.dt = dt;\n } else {\n // Not all fixed-offset zones like Etc/+4:30 are present in tzdata so\n // we manually apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.offset === 0 ? dt : dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n } else if (dt.zone.type === \"system\") {\n this.dt = dt;\n } else if (dt.zone.type === \"iana\") {\n this.dt = dt;\n z = dt.zone.name;\n } else {\n // Custom zones can have any offset / offsetName so we just manually\n // apply the offset and substitute the zone as needed.\n z = \"UTC\";\n this.dt = dt.setZone(\"UTC\").plus({ minutes: dt.offset });\n this.originalZone = dt.zone;\n }\n\n const intlOpts = { ...this.opts };\n intlOpts.timeZone = intlOpts.timeZone || z;\n this.dtf = getCachedDTF(intl, intlOpts);\n }\n\n format() {\n if (this.originalZone) {\n // If we have to substitute in the actual zone name, we have to use\n // formatToParts so that the timezone can be replaced.\n return this.formatToParts()\n .map(({ value }) => value)\n .join(\"\");\n }\n return this.dtf.format(this.dt.toJSDate());\n }\n\n formatToParts() {\n const parts = this.dtf.formatToParts(this.dt.toJSDate());\n if (this.originalZone) {\n return parts.map((part) => {\n if (part.type === \"timeZoneName\") {\n const offsetName = this.originalZone.offsetName(this.dt.ts, {\n locale: this.dt.locale,\n format: this.opts.timeZoneName,\n });\n return {\n ...part,\n value: offsetName,\n };\n } else {\n return part;\n }\n });\n }\n return parts;\n }\n\n resolvedOptions() {\n return this.dtf.resolvedOptions();\n }\n}\n\n/**\n * @private\n */\nclass PolyRelFormatter {\n constructor(intl, isEnglish, opts) {\n this.opts = { style: \"long\", ...opts };\n if (!isEnglish && hasRelative()) {\n this.rtf = getCachedRTF(intl, opts);\n }\n }\n\n format(count, unit) {\n if (this.rtf) {\n return this.rtf.format(count, unit);\n } else {\n return English.formatRelativeTime(unit, count, this.opts.numeric, this.opts.style !== \"long\");\n }\n }\n\n formatToParts(count, unit) {\n if (this.rtf) {\n return this.rtf.formatToParts(count, unit);\n } else {\n return [];\n }\n }\n}\n\nconst fallbackWeekSettings = {\n firstDay: 1,\n minimalDays: 4,\n weekend: [6, 7],\n};\n\n/**\n * @private\n */\nexport default class Locale {\n static fromOpts(opts) {\n return Locale.create(\n opts.locale,\n opts.numberingSystem,\n opts.outputCalendar,\n opts.weekSettings,\n opts.defaultToEN\n );\n }\n\n static create(locale, numberingSystem, outputCalendar, weekSettings, defaultToEN = false) {\n const specifiedLocale = locale || Settings.defaultLocale;\n // the system locale is useful for human-readable strings but annoying for parsing/formatting known formats\n const localeR = specifiedLocale || (defaultToEN ? \"en-US\" : systemLocale());\n const numberingSystemR = numberingSystem || Settings.defaultNumberingSystem;\n const outputCalendarR = outputCalendar || Settings.defaultOutputCalendar;\n const weekSettingsR = validateWeekSettings(weekSettings) || Settings.defaultWeekSettings;\n return new Locale(localeR, numberingSystemR, outputCalendarR, weekSettingsR, specifiedLocale);\n }\n\n static resetCache() {\n sysLocaleCache = null;\n intlDTCache.clear();\n intlNumCache.clear();\n intlRelCache.clear();\n intlResolvedOptionsCache.clear();\n weekInfoCache.clear();\n }\n\n static fromObject({ locale, numberingSystem, outputCalendar, weekSettings } = {}) {\n return Locale.create(locale, numberingSystem, outputCalendar, weekSettings);\n }\n\n constructor(locale, numbering, outputCalendar, weekSettings, specifiedLocale) {\n const [parsedLocale, parsedNumberingSystem, parsedOutputCalendar] = parseLocaleString(locale);\n\n this.locale = parsedLocale;\n this.numberingSystem = numbering || parsedNumberingSystem || null;\n this.outputCalendar = outputCalendar || parsedOutputCalendar || null;\n this.weekSettings = weekSettings;\n this.intl = intlConfigString(this.locale, this.numberingSystem, this.outputCalendar);\n\n this.weekdaysCache = { format: {}, standalone: {} };\n this.monthsCache = { format: {}, standalone: {} };\n this.meridiemCache = null;\n this.eraCache = {};\n\n this.specifiedLocale = specifiedLocale;\n this.fastNumbersCached = null;\n }\n\n get fastNumbers() {\n if (this.fastNumbersCached == null) {\n this.fastNumbersCached = supportsFastNumbers(this);\n }\n\n return this.fastNumbersCached;\n }\n\n listingMode() {\n const isActuallyEn = this.isEnglish();\n const hasNoWeirdness =\n (this.numberingSystem === null || this.numberingSystem === \"latn\") &&\n (this.outputCalendar === null || this.outputCalendar === \"gregory\");\n return isActuallyEn && hasNoWeirdness ? \"en\" : \"intl\";\n }\n\n clone(alts) {\n if (!alts || Object.getOwnPropertyNames(alts).length === 0) {\n return this;\n } else {\n return Locale.create(\n alts.locale || this.specifiedLocale,\n alts.numberingSystem || this.numberingSystem,\n alts.outputCalendar || this.outputCalendar,\n validateWeekSettings(alts.weekSettings) || this.weekSettings,\n alts.defaultToEN || false\n );\n }\n }\n\n redefaultToEN(alts = {}) {\n return this.clone({ ...alts, defaultToEN: true });\n }\n\n redefaultToSystem(alts = {}) {\n return this.clone({ ...alts, defaultToEN: false });\n }\n\n months(length, format = false) {\n return listStuff(this, length, English.months, () => {\n // Workaround for \"ja\" locale: formatToParts does not label all parts of the month\n // as \"month\" and for this locale there is no difference between \"format\" and \"non-format\".\n // As such, just use format() instead of formatToParts() and take the whole string\n const monthSpecialCase = this.intl === \"ja\" || this.intl.startsWith(\"ja-\");\n format &= !monthSpecialCase;\n const intl = format ? { month: length, day: \"numeric\" } : { month: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.monthsCache[formatStr][length]) {\n const mapper = !monthSpecialCase\n ? (dt) => this.extract(dt, intl, \"month\")\n : (dt) => this.dtFormatter(dt, intl).format();\n this.monthsCache[formatStr][length] = mapMonths(mapper);\n }\n return this.monthsCache[formatStr][length];\n });\n }\n\n weekdays(length, format = false) {\n return listStuff(this, length, English.weekdays, () => {\n const intl = format\n ? { weekday: length, year: \"numeric\", month: \"long\", day: \"numeric\" }\n : { weekday: length },\n formatStr = format ? \"format\" : \"standalone\";\n if (!this.weekdaysCache[formatStr][length]) {\n this.weekdaysCache[formatStr][length] = mapWeekdays((dt) =>\n this.extract(dt, intl, \"weekday\")\n );\n }\n return this.weekdaysCache[formatStr][length];\n });\n }\n\n meridiems() {\n return listStuff(\n this,\n undefined,\n () => English.meridiems,\n () => {\n // In theory there could be aribitrary day periods. We're gonna assume there are exactly two\n // for AM and PM. This is probably wrong, but it's makes parsing way easier.\n if (!this.meridiemCache) {\n const intl = { hour: \"numeric\", hourCycle: \"h12\" };\n this.meridiemCache = [DateTime.utc(2016, 11, 13, 9), DateTime.utc(2016, 11, 13, 19)].map(\n (dt) => this.extract(dt, intl, \"dayperiod\")\n );\n }\n\n return this.meridiemCache;\n }\n );\n }\n\n eras(length) {\n return listStuff(this, length, English.eras, () => {\n const intl = { era: length };\n\n // This is problematic. Different calendars are going to define eras totally differently. What I need is the minimum set of dates\n // to definitely enumerate them.\n if (!this.eraCache[length]) {\n this.eraCache[length] = [DateTime.utc(-40, 1, 1), DateTime.utc(2017, 1, 1)].map((dt) =>\n this.extract(dt, intl, \"era\")\n );\n }\n\n return this.eraCache[length];\n });\n }\n\n extract(dt, intlOpts, field) {\n const df = this.dtFormatter(dt, intlOpts),\n results = df.formatToParts(),\n matching = results.find((m) => m.type.toLowerCase() === field);\n return matching ? matching.value : null;\n }\n\n numberFormatter(opts = {}) {\n // this forcesimple option is never used (the only caller short-circuits on it, but it seems safer to leave)\n // (in contrast, the rest of the condition is used heavily)\n return new PolyNumberFormatter(this.intl, opts.forceSimple || this.fastNumbers, opts);\n }\n\n dtFormatter(dt, intlOpts = {}) {\n return new PolyDateFormatter(dt, this.intl, intlOpts);\n }\n\n relFormatter(opts = {}) {\n return new PolyRelFormatter(this.intl, this.isEnglish(), opts);\n }\n\n listFormatter(opts = {}) {\n return getCachedLF(this.intl, opts);\n }\n\n isEnglish() {\n return (\n this.locale === \"en\" ||\n this.locale.toLowerCase() === \"en-us\" ||\n getCachedIntResolvedOptions(this.intl).locale.startsWith(\"en-us\")\n );\n }\n\n getWeekSettings() {\n if (this.weekSettings) {\n return this.weekSettings;\n } else if (!hasLocaleWeekInfo()) {\n return fallbackWeekSettings;\n } else {\n return getCachedWeekInfo(this.locale);\n }\n }\n\n getStartOfWeek() {\n return this.getWeekSettings().firstDay;\n }\n\n getMinDaysInFirstWeek() {\n return this.getWeekSettings().minimalDays;\n }\n\n getWeekendDays() {\n return this.getWeekSettings().weekend;\n }\n\n equals(other) {\n return (\n this.locale === other.locale &&\n this.numberingSystem === other.numberingSystem &&\n this.outputCalendar === other.outputCalendar\n );\n }\n\n toString() {\n return `Locale(${this.locale}, ${this.numberingSystem}, ${this.outputCalendar})`;\n }\n}\n","import { formatOffset, signedOffset } from \"../impl/util.js\";\nimport Zone from \"../zone.js\";\n\nlet singleton = null;\n\n/**\n * A zone with a fixed offset (meaning no DST)\n * @implements {Zone}\n */\nexport default class FixedOffsetZone extends Zone {\n /**\n * Get a singleton instance of UTC\n * @return {FixedOffsetZone}\n */\n static get utcInstance() {\n if (singleton === null) {\n singleton = new FixedOffsetZone(0);\n }\n return singleton;\n }\n\n /**\n * Get an instance with a specified offset\n * @param {number} offset - The offset in minutes\n * @return {FixedOffsetZone}\n */\n static instance(offset) {\n return offset === 0 ? FixedOffsetZone.utcInstance : new FixedOffsetZone(offset);\n }\n\n /**\n * Get an instance of FixedOffsetZone from a UTC offset string, like \"UTC+6\"\n * @param {string} s - The offset string to parse\n * @example FixedOffsetZone.parseSpecifier(\"UTC+6\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC+06\")\n * @example FixedOffsetZone.parseSpecifier(\"UTC-6:00\")\n * @return {FixedOffsetZone}\n */\n static parseSpecifier(s) {\n if (s) {\n const r = s.match(/^utc(?:([+-]\\d{1,2})(?::(\\d{2}))?)?$/i);\n if (r) {\n return new FixedOffsetZone(signedOffset(r[1], r[2]));\n }\n }\n return null;\n }\n\n constructor(offset) {\n super();\n /** @private **/\n this.fixed = offset;\n }\n\n /**\n * The type of zone. `fixed` for all instances of `FixedOffsetZone`.\n * @override\n * @type {string}\n */\n get type() {\n return \"fixed\";\n }\n\n /**\n * The name of this zone.\n * All fixed zones' names always start with \"UTC\" (plus optional offset)\n * @override\n * @type {string}\n */\n get name() {\n return this.fixed === 0 ? \"UTC\" : `UTC${formatOffset(this.fixed, \"narrow\")}`;\n }\n\n /**\n * The IANA name of this zone, i.e. `Etc/UTC` or `Etc/GMT+/-nn`\n *\n * @override\n * @type {string}\n */\n get ianaName() {\n if (this.fixed === 0) {\n return \"Etc/UTC\";\n } else {\n return `Etc/GMT${formatOffset(-this.fixed, \"narrow\")}`;\n }\n }\n\n /**\n * Returns the offset's common name at the specified timestamp.\n *\n * For fixed offset zones this equals to the zone name.\n * @override\n */\n offsetName() {\n return this.name;\n }\n\n /**\n * Returns the offset's value as a string\n * @override\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\n formatOffset(ts, format) {\n return formatOffset(this.fixed, format);\n }\n\n /**\n * Returns whether the offset is known to be fixed for the whole year:\n * Always returns true for all fixed offset zones.\n * @override\n * @type {boolean}\n */\n get isUniversal() {\n return true;\n }\n\n /**\n * Return the offset in minutes for this zone at the specified timestamp.\n *\n * For fixed offset zones, this is constant and does not depend on a timestamp.\n * @override\n * @return {number}\n */\n offset() {\n return this.fixed;\n }\n\n /**\n * Return whether this Zone is equal to another zone (i.e. also fixed and same offset)\n * @override\n * @param {Zone} otherZone - the zone to compare\n * @return {boolean}\n */\n equals(otherZone) {\n return otherZone.type === \"fixed\" && otherZone.fixed === this.fixed;\n }\n\n /**\n * Return whether this Zone is valid:\n * All fixed offset zones are valid.\n * @override\n * @type {boolean}\n */\n get isValid() {\n return true;\n }\n}\n","import Zone from \"../zone.js\";\n\n/**\n * A zone that failed to parse. You should never need to instantiate this.\n * @implements {Zone}\n */\nexport default class InvalidZone extends Zone {\n constructor(zoneName) {\n super();\n /** @private */\n this.zoneName = zoneName;\n }\n\n /** @override **/\n get type() {\n return \"invalid\";\n }\n\n /** @override **/\n get name() {\n return this.zoneName;\n }\n\n /** @override **/\n get isUniversal() {\n return false;\n }\n\n /** @override **/\n offsetName() {\n return null;\n }\n\n /** @override **/\n formatOffset() {\n return \"\";\n }\n\n /** @override **/\n offset() {\n return NaN;\n }\n\n /** @override **/\n equals() {\n return false;\n }\n\n /** @override **/\n get isValid() {\n return false;\n }\n}\n","/**\n * @private\n */\n\nimport Zone from \"../zone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport InvalidZone from \"../zones/invalidZone.js\";\n\nimport { isUndefined, isString, isNumber } from \"./util.js\";\nimport SystemZone from \"../zones/systemZone.js\";\n\nexport function normalizeZone(input, defaultZone) {\n let offset;\n if (isUndefined(input) || input === null) {\n return defaultZone;\n } else if (input instanceof Zone) {\n return input;\n } else if (isString(input)) {\n const lowered = input.toLowerCase();\n if (lowered === \"default\") return defaultZone;\n else if (lowered === \"local\" || lowered === \"system\") return SystemZone.instance;\n else if (lowered === \"utc\" || lowered === \"gmt\") return FixedOffsetZone.utcInstance;\n else return FixedOffsetZone.parseSpecifier(lowered) || IANAZone.create(input);\n } else if (isNumber(input)) {\n return FixedOffsetZone.instance(input);\n } else if (typeof input === \"object\" && \"offset\" in input && typeof input.offset === \"function\") {\n // This is dumb, but the instanceof check above doesn't seem to really work\n // so we're duck checking it\n return input;\n } else {\n return new InvalidZone(input);\n }\n}\n","const numberingSystems = {\n arab: \"[\\u0660-\\u0669]\",\n arabext: \"[\\u06F0-\\u06F9]\",\n bali: \"[\\u1B50-\\u1B59]\",\n beng: \"[\\u09E6-\\u09EF]\",\n deva: \"[\\u0966-\\u096F]\",\n fullwide: \"[\\uFF10-\\uFF19]\",\n gujr: \"[\\u0AE6-\\u0AEF]\",\n hanidec: \"[〇|一|二|三|四|五|六|七|八|九]\",\n khmr: \"[\\u17E0-\\u17E9]\",\n knda: \"[\\u0CE6-\\u0CEF]\",\n laoo: \"[\\u0ED0-\\u0ED9]\",\n limb: \"[\\u1946-\\u194F]\",\n mlym: \"[\\u0D66-\\u0D6F]\",\n mong: \"[\\u1810-\\u1819]\",\n mymr: \"[\\u1040-\\u1049]\",\n orya: \"[\\u0B66-\\u0B6F]\",\n tamldec: \"[\\u0BE6-\\u0BEF]\",\n telu: \"[\\u0C66-\\u0C6F]\",\n thai: \"[\\u0E50-\\u0E59]\",\n tibt: \"[\\u0F20-\\u0F29]\",\n latn: \"\\\\d\",\n};\n\nconst numberingSystemsUTF16 = {\n arab: [1632, 1641],\n arabext: [1776, 1785],\n bali: [6992, 7001],\n beng: [2534, 2543],\n deva: [2406, 2415],\n fullwide: [65296, 65303],\n gujr: [2790, 2799],\n khmr: [6112, 6121],\n knda: [3302, 3311],\n laoo: [3792, 3801],\n limb: [6470, 6479],\n mlym: [3430, 3439],\n mong: [6160, 6169],\n mymr: [4160, 4169],\n orya: [2918, 2927],\n tamldec: [3046, 3055],\n telu: [3174, 3183],\n thai: [3664, 3673],\n tibt: [3872, 3881],\n};\n\nconst hanidecChars = numberingSystems.hanidec.replace(/[\\[|\\]]/g, \"\").split(\"\");\n\nexport function parseDigits(str) {\n let value = parseInt(str, 10);\n if (isNaN(value)) {\n value = \"\";\n for (let i = 0; i < str.length; i++) {\n const code = str.charCodeAt(i);\n\n if (str[i].search(numberingSystems.hanidec) !== -1) {\n value += hanidecChars.indexOf(str[i]);\n } else {\n for (const key in numberingSystemsUTF16) {\n const [min, max] = numberingSystemsUTF16[key];\n if (code >= min && code <= max) {\n value += code - min;\n }\n }\n }\n }\n return parseInt(value, 10);\n } else {\n return value;\n }\n}\n\n// cache of {numberingSystem: {append: regex}}\nconst digitRegexCache = new Map();\nexport function resetDigitRegexCache() {\n digitRegexCache.clear();\n}\n\nexport function digitRegex({ numberingSystem }, append = \"\") {\n const ns = numberingSystem || \"latn\";\n\n let appendCache = digitRegexCache.get(ns);\n if (appendCache === undefined) {\n appendCache = new Map();\n digitRegexCache.set(ns, appendCache);\n }\n let regex = appendCache.get(append);\n if (regex === undefined) {\n regex = new RegExp(`${numberingSystems[ns]}${append}`);\n appendCache.set(append, regex);\n }\n\n return regex;\n}\n","import SystemZone from \"./zones/systemZone.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport DateTime from \"./datetime.js\";\n\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport { validateWeekSettings } from \"./impl/util.js\";\nimport { resetDigitRegexCache } from \"./impl/digits.js\";\n\nlet now = () => Date.now(),\n defaultZone = \"system\",\n defaultLocale = null,\n defaultNumberingSystem = null,\n defaultOutputCalendar = null,\n twoDigitCutoffYear = 60,\n throwOnInvalid,\n defaultWeekSettings = null;\n\n/**\n * Settings contains static getters and setters that control Luxon's overall behavior. Luxon is a simple library with few options, but the ones it does have live here.\n */\nexport default class Settings {\n /**\n * Get the callback for returning the current timestamp.\n * @type {function}\n */\n static get now() {\n return now;\n }\n\n /**\n * Set the callback for returning the current timestamp.\n * The function should return a number, which will be interpreted as an Epoch millisecond count\n * @type {function}\n * @example Settings.now = () => Date.now() + 3000 // pretend it is 3 seconds in the future\n * @example Settings.now = () => 0 // always pretend it's Jan 1, 1970 at midnight in UTC time\n */\n static set now(n) {\n now = n;\n }\n\n /**\n * Set the default time zone to create DateTimes in. Does not affect existing instances.\n * Use the value \"system\" to reset this value to the system's time zone.\n * @type {string}\n */\n static set defaultZone(zone) {\n defaultZone = zone;\n }\n\n /**\n * Get the default time zone object currently used to create DateTimes. Does not affect existing instances.\n * The default value is the system's time zone (the one set on the machine that runs this code).\n * @type {Zone}\n */\n static get defaultZone() {\n return normalizeZone(defaultZone, SystemZone.instance);\n }\n\n /**\n * Get the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultLocale() {\n return defaultLocale;\n }\n\n /**\n * Set the default locale to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultLocale(locale) {\n defaultLocale = locale;\n }\n\n /**\n * Get the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultNumberingSystem() {\n return defaultNumberingSystem;\n }\n\n /**\n * Set the default numbering system to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultNumberingSystem(numberingSystem) {\n defaultNumberingSystem = numberingSystem;\n }\n\n /**\n * Get the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static get defaultOutputCalendar() {\n return defaultOutputCalendar;\n }\n\n /**\n * Set the default output calendar to create DateTimes with. Does not affect existing instances.\n * @type {string}\n */\n static set defaultOutputCalendar(outputCalendar) {\n defaultOutputCalendar = outputCalendar;\n }\n\n /**\n * @typedef {Object} WeekSettings\n * @property {number} firstDay\n * @property {number} minimalDays\n * @property {number[]} weekend\n */\n\n /**\n * @return {WeekSettings|null}\n */\n static get defaultWeekSettings() {\n return defaultWeekSettings;\n }\n\n /**\n * Allows overriding the default locale week settings, i.e. the start of the week, the weekend and\n * how many days are required in the first week of a year.\n * Does not affect existing instances.\n *\n * @param {WeekSettings|null} weekSettings\n */\n static set defaultWeekSettings(weekSettings) {\n defaultWeekSettings = validateWeekSettings(weekSettings);\n }\n\n /**\n * Get the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n */\n static get twoDigitCutoffYear() {\n return twoDigitCutoffYear;\n }\n\n /**\n * Set the cutoff year for whether a 2-digit year string is interpreted in the current or previous century. Numbers higher than the cutoff will be considered to mean 19xx and numbers lower or equal to the cutoff will be considered 20xx.\n * @type {number}\n * @example Settings.twoDigitCutoffYear = 0 // all 'yy' are interpreted as 20th century\n * @example Settings.twoDigitCutoffYear = 99 // all 'yy' are interpreted as 21st century\n * @example Settings.twoDigitCutoffYear = 50 // '49' -> 2049; '50' -> 1950\n * @example Settings.twoDigitCutoffYear = 1950 // interpreted as 50\n * @example Settings.twoDigitCutoffYear = 2050 // ALSO interpreted as 50\n */\n static set twoDigitCutoffYear(cutoffYear) {\n twoDigitCutoffYear = cutoffYear % 100;\n }\n\n /**\n * Get whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static get throwOnInvalid() {\n return throwOnInvalid;\n }\n\n /**\n * Set whether Luxon will throw when it encounters invalid DateTimes, Durations, or Intervals\n * @type {boolean}\n */\n static set throwOnInvalid(t) {\n throwOnInvalid = t;\n }\n\n /**\n * Reset Luxon's global caches. Should only be necessary in testing scenarios.\n * @return {void}\n */\n static resetCaches() {\n Locale.resetCache();\n IANAZone.resetCache();\n DateTime.resetCache();\n resetDigitRegexCache();\n }\n}\n","export default class Invalid {\n constructor(reason, explanation) {\n this.reason = reason;\n this.explanation = explanation;\n }\n\n toMessage() {\n if (this.explanation) {\n return `${this.reason}: ${this.explanation}`;\n } else {\n return this.reason;\n }\n }\n}\n","import {\n integerBetween,\n isLeapYear,\n timeObject,\n daysInYear,\n daysInMonth,\n weeksInWeekYear,\n isInteger,\n isUndefined,\n} from \"./util.js\";\nimport Invalid from \"./invalid.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst nonLeapLadder = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334],\n leapLadder = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335];\n\nfunction unitOutOfRange(unit, value) {\n return new Invalid(\n \"unit out of range\",\n `you specified ${value} (of type ${typeof value}) as a ${unit}, which is invalid`\n );\n}\n\nexport function dayOfWeek(year, month, day) {\n const d = new Date(Date.UTC(year, month - 1, day));\n\n if (year < 100 && year >= 0) {\n d.setUTCFullYear(d.getUTCFullYear() - 1900);\n }\n\n const js = d.getUTCDay();\n\n return js === 0 ? 7 : js;\n}\n\nfunction computeOrdinal(year, month, day) {\n return day + (isLeapYear(year) ? leapLadder : nonLeapLadder)[month - 1];\n}\n\nfunction uncomputeOrdinal(year, ordinal) {\n const table = isLeapYear(year) ? leapLadder : nonLeapLadder,\n month0 = table.findIndex((i) => i < ordinal),\n day = ordinal - table[month0];\n return { month: month0 + 1, day };\n}\n\nexport function isoWeekdayToLocal(isoWeekday, startOfWeek) {\n return ((isoWeekday - startOfWeek + 7) % 7) + 1;\n}\n\n/**\n * @private\n */\n\nexport function gregorianToWeek(gregObj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { year, month, day } = gregObj,\n ordinal = computeOrdinal(year, month, day),\n weekday = isoWeekdayToLocal(dayOfWeek(year, month, day), startOfWeek);\n\n let weekNumber = Math.floor((ordinal - weekday + 14 - minDaysInFirstWeek) / 7),\n weekYear;\n\n if (weekNumber < 1) {\n weekYear = year - 1;\n weekNumber = weeksInWeekYear(weekYear, minDaysInFirstWeek, startOfWeek);\n } else if (weekNumber > weeksInWeekYear(year, minDaysInFirstWeek, startOfWeek)) {\n weekYear = year + 1;\n weekNumber = 1;\n } else {\n weekYear = year;\n }\n\n return { weekYear, weekNumber, weekday, ...timeObject(gregObj) };\n}\n\nexport function weekToGregorian(weekData, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const { weekYear, weekNumber, weekday } = weekData,\n weekdayOfJan4 = isoWeekdayToLocal(dayOfWeek(weekYear, 1, minDaysInFirstWeek), startOfWeek),\n yearInDays = daysInYear(weekYear);\n\n let ordinal = weekNumber * 7 + weekday - weekdayOfJan4 - 7 + minDaysInFirstWeek,\n year;\n\n if (ordinal < 1) {\n year = weekYear - 1;\n ordinal += daysInYear(year);\n } else if (ordinal > yearInDays) {\n year = weekYear + 1;\n ordinal -= daysInYear(weekYear);\n } else {\n year = weekYear;\n }\n\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(weekData) };\n}\n\nexport function gregorianToOrdinal(gregData) {\n const { year, month, day } = gregData;\n const ordinal = computeOrdinal(year, month, day);\n return { year, ordinal, ...timeObject(gregData) };\n}\n\nexport function ordinalToGregorian(ordinalData) {\n const { year, ordinal } = ordinalData;\n const { month, day } = uncomputeOrdinal(year, ordinal);\n return { year, month, day, ...timeObject(ordinalData) };\n}\n\n/**\n * Check if local week units like localWeekday are used in obj.\n * If so, validates that they are not mixed with ISO week units and then copies them to the normal week unit properties.\n * Modifies obj in-place!\n * @param obj the object values\n */\nexport function usesLocalWeekValues(obj, loc) {\n const hasLocaleWeekData =\n !isUndefined(obj.localWeekday) ||\n !isUndefined(obj.localWeekNumber) ||\n !isUndefined(obj.localWeekYear);\n if (hasLocaleWeekData) {\n const hasIsoWeekData =\n !isUndefined(obj.weekday) || !isUndefined(obj.weekNumber) || !isUndefined(obj.weekYear);\n\n if (hasIsoWeekData) {\n throw new ConflictingSpecificationError(\n \"Cannot mix locale-based week fields with ISO-based week fields\"\n );\n }\n if (!isUndefined(obj.localWeekday)) obj.weekday = obj.localWeekday;\n if (!isUndefined(obj.localWeekNumber)) obj.weekNumber = obj.localWeekNumber;\n if (!isUndefined(obj.localWeekYear)) obj.weekYear = obj.localWeekYear;\n delete obj.localWeekday;\n delete obj.localWeekNumber;\n delete obj.localWeekYear;\n return {\n minDaysInFirstWeek: loc.getMinDaysInFirstWeek(),\n startOfWeek: loc.getStartOfWeek(),\n };\n } else {\n return { minDaysInFirstWeek: 4, startOfWeek: 1 };\n }\n}\n\nexport function hasInvalidWeekData(obj, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const validYear = isInteger(obj.weekYear),\n validWeek = integerBetween(\n obj.weekNumber,\n 1,\n weeksInWeekYear(obj.weekYear, minDaysInFirstWeek, startOfWeek)\n ),\n validWeekday = integerBetween(obj.weekday, 1, 7);\n\n if (!validYear) {\n return unitOutOfRange(\"weekYear\", obj.weekYear);\n } else if (!validWeek) {\n return unitOutOfRange(\"week\", obj.weekNumber);\n } else if (!validWeekday) {\n return unitOutOfRange(\"weekday\", obj.weekday);\n } else return false;\n}\n\nexport function hasInvalidOrdinalData(obj) {\n const validYear = isInteger(obj.year),\n validOrdinal = integerBetween(obj.ordinal, 1, daysInYear(obj.year));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validOrdinal) {\n return unitOutOfRange(\"ordinal\", obj.ordinal);\n } else return false;\n}\n\nexport function hasInvalidGregorianData(obj) {\n const validYear = isInteger(obj.year),\n validMonth = integerBetween(obj.month, 1, 12),\n validDay = integerBetween(obj.day, 1, daysInMonth(obj.year, obj.month));\n\n if (!validYear) {\n return unitOutOfRange(\"year\", obj.year);\n } else if (!validMonth) {\n return unitOutOfRange(\"month\", obj.month);\n } else if (!validDay) {\n return unitOutOfRange(\"day\", obj.day);\n } else return false;\n}\n\nexport function hasInvalidTimeData(obj) {\n const { hour, minute, second, millisecond } = obj;\n const validHour =\n integerBetween(hour, 0, 23) ||\n (hour === 24 && minute === 0 && second === 0 && millisecond === 0),\n validMinute = integerBetween(minute, 0, 59),\n validSecond = integerBetween(second, 0, 59),\n validMillisecond = integerBetween(millisecond, 0, 999);\n\n if (!validHour) {\n return unitOutOfRange(\"hour\", hour);\n } else if (!validMinute) {\n return unitOutOfRange(\"minute\", minute);\n } else if (!validSecond) {\n return unitOutOfRange(\"second\", second);\n } else if (!validMillisecond) {\n return unitOutOfRange(\"millisecond\", millisecond);\n } else return false;\n}\n","/*\n This is just a junk drawer, containing anything used across multiple classes.\n Because Luxon is small(ish), this should stay small and we won't worry about splitting\n it up into, say, parsingUtil.js and basicUtil.js and so on. But they are divided up by feature area.\n*/\n\nimport { InvalidArgumentError } from \"../errors.js\";\nimport Settings from \"../settings.js\";\nimport { dayOfWeek, isoWeekdayToLocal } from \"./conversions.js\";\n\n/**\n * @private\n */\n\n// TYPES\n\nexport function isUndefined(o) {\n return typeof o === \"undefined\";\n}\n\nexport function isNumber(o) {\n return typeof o === \"number\";\n}\n\nexport function isInteger(o) {\n return typeof o === \"number\" && o % 1 === 0;\n}\n\nexport function isString(o) {\n return typeof o === \"string\";\n}\n\nexport function isDate(o) {\n return Object.prototype.toString.call(o) === \"[object Date]\";\n}\n\n// CAPABILITIES\n\nexport function hasRelative() {\n try {\n return typeof Intl !== \"undefined\" && !!Intl.RelativeTimeFormat;\n } catch (e) {\n return false;\n }\n}\n\nexport function hasLocaleWeekInfo() {\n try {\n return (\n typeof Intl !== \"undefined\" &&\n !!Intl.Locale &&\n (\"weekInfo\" in Intl.Locale.prototype || \"getWeekInfo\" in Intl.Locale.prototype)\n );\n } catch (e) {\n return false;\n }\n}\n\n// OBJECTS AND ARRAYS\n\nexport function maybeArray(thing) {\n return Array.isArray(thing) ? thing : [thing];\n}\n\nexport function bestBy(arr, by, compare) {\n if (arr.length === 0) {\n return undefined;\n }\n return arr.reduce((best, next) => {\n const pair = [by(next), next];\n if (!best) {\n return pair;\n } else if (compare(best[0], pair[0]) === best[0]) {\n return best;\n } else {\n return pair;\n }\n }, null)[1];\n}\n\nexport function pick(obj, keys) {\n return keys.reduce((a, k) => {\n a[k] = obj[k];\n return a;\n }, {});\n}\n\nexport function hasOwnProperty(obj, prop) {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function validateWeekSettings(settings) {\n if (settings == null) {\n return null;\n } else if (typeof settings !== \"object\") {\n throw new InvalidArgumentError(\"Week settings must be an object\");\n } else {\n if (\n !integerBetween(settings.firstDay, 1, 7) ||\n !integerBetween(settings.minimalDays, 1, 7) ||\n !Array.isArray(settings.weekend) ||\n settings.weekend.some((v) => !integerBetween(v, 1, 7))\n ) {\n throw new InvalidArgumentError(\"Invalid week settings\");\n }\n return {\n firstDay: settings.firstDay,\n minimalDays: settings.minimalDays,\n weekend: Array.from(settings.weekend),\n };\n }\n}\n\n// NUMBERS AND STRINGS\n\nexport function integerBetween(thing, bottom, top) {\n return isInteger(thing) && thing >= bottom && thing <= top;\n}\n\n// x % n but takes the sign of n instead of x\nexport function floorMod(x, n) {\n return x - n * Math.floor(x / n);\n}\n\nexport function padStart(input, n = 2) {\n const isNeg = input < 0;\n let padded;\n if (isNeg) {\n padded = \"-\" + (\"\" + -input).padStart(n, \"0\");\n } else {\n padded = (\"\" + input).padStart(n, \"0\");\n }\n return padded;\n}\n\nexport function parseInteger(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseInt(string, 10);\n }\n}\n\nexport function parseFloating(string) {\n if (isUndefined(string) || string === null || string === \"\") {\n return undefined;\n } else {\n return parseFloat(string);\n }\n}\n\nexport function parseMillis(fraction) {\n // Return undefined (instead of 0) in these cases, where fraction is not set\n if (isUndefined(fraction) || fraction === null || fraction === \"\") {\n return undefined;\n } else {\n const f = parseFloat(\"0.\" + fraction) * 1000;\n return Math.floor(f);\n }\n}\n\nexport function roundTo(number, digits, rounding = \"round\") {\n const factor = 10 ** digits;\n switch (rounding) {\n case \"expand\":\n return number > 0\n ? Math.ceil(number * factor) / factor\n : Math.floor(number * factor) / factor;\n case \"trunc\":\n return Math.trunc(number * factor) / factor;\n case \"round\":\n return Math.round(number * factor) / factor;\n case \"floor\":\n return Math.floor(number * factor) / factor;\n case \"ceil\":\n return Math.ceil(number * factor) / factor;\n default:\n throw new RangeError(`Value rounding ${rounding} is out of range`);\n }\n}\n\n// DATE BASICS\n\nexport function isLeapYear(year) {\n return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n}\n\nexport function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\nexport function daysInMonth(year, month) {\n const modMonth = floorMod(month - 1, 12) + 1,\n modYear = year + (month - modMonth) / 12;\n\n if (modMonth === 2) {\n return isLeapYear(modYear) ? 29 : 28;\n } else {\n return [31, null, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][modMonth - 1];\n }\n}\n\n// convert a calendar object to a local timestamp (epoch, but with the offset baked in)\nexport function objToLocalTS(obj) {\n let d = Date.UTC(\n obj.year,\n obj.month - 1,\n obj.day,\n obj.hour,\n obj.minute,\n obj.second,\n obj.millisecond\n );\n\n // for legacy reasons, years between 0 and 99 are interpreted as 19XX; revert that\n if (obj.year < 100 && obj.year >= 0) {\n d = new Date(d);\n // set the month and day again, this is necessary because year 2000 is a leap year, but year 100 is not\n // so if obj.year is in 99, but obj.day makes it roll over into year 100,\n // the calculations done by Date.UTC are using year 2000 - which is incorrect\n d.setUTCFullYear(obj.year, obj.month - 1, obj.day);\n }\n return +d;\n}\n\n// adapted from moment.js: https://github.com/moment/moment/blob/000ac1800e620f770f4eb31b5ae908f6167b0ab2/src/lib/units/week-calendar-utils.js\nfunction firstWeekOffset(year, minDaysInFirstWeek, startOfWeek) {\n const fwdlw = isoWeekdayToLocal(dayOfWeek(year, 1, minDaysInFirstWeek), startOfWeek);\n return -fwdlw + minDaysInFirstWeek - 1;\n}\n\nexport function weeksInWeekYear(weekYear, minDaysInFirstWeek = 4, startOfWeek = 1) {\n const weekOffset = firstWeekOffset(weekYear, minDaysInFirstWeek, startOfWeek);\n const weekOffsetNext = firstWeekOffset(weekYear + 1, minDaysInFirstWeek, startOfWeek);\n return (daysInYear(weekYear) - weekOffset + weekOffsetNext) / 7;\n}\n\nexport function untruncateYear(year) {\n if (year > 99) {\n return year;\n } else return year > Settings.twoDigitCutoffYear ? 1900 + year : 2000 + year;\n}\n\n// PARSING\n\nexport function parseZoneInfo(ts, offsetFormat, locale, timeZone = null) {\n const date = new Date(ts),\n intlOpts = {\n hourCycle: \"h23\",\n year: \"numeric\",\n month: \"2-digit\",\n day: \"2-digit\",\n hour: \"2-digit\",\n minute: \"2-digit\",\n };\n\n if (timeZone) {\n intlOpts.timeZone = timeZone;\n }\n\n const modified = { timeZoneName: offsetFormat, ...intlOpts };\n\n const parsed = new Intl.DateTimeFormat(locale, modified)\n .formatToParts(date)\n .find((m) => m.type.toLowerCase() === \"timezonename\");\n return parsed ? parsed.value : null;\n}\n\n// signedOffset('-5', '30') -> -330\nexport function signedOffset(offHourStr, offMinuteStr) {\n let offHour = parseInt(offHourStr, 10);\n\n // don't || this because we want to preserve -0\n if (Number.isNaN(offHour)) {\n offHour = 0;\n }\n\n const offMin = parseInt(offMinuteStr, 10) || 0,\n offMinSigned = offHour < 0 || Object.is(offHour, -0) ? -offMin : offMin;\n return offHour * 60 + offMinSigned;\n}\n\n// COERCION\n\nexport function asNumber(value) {\n const numericValue = Number(value);\n if (typeof value === \"boolean\" || value === \"\" || !Number.isFinite(numericValue))\n throw new InvalidArgumentError(`Invalid unit value ${value}`);\n return numericValue;\n}\n\nexport function normalizeObject(obj, normalizer) {\n const normalized = {};\n for (const u in obj) {\n if (hasOwnProperty(obj, u)) {\n const v = obj[u];\n if (v === undefined || v === null) continue;\n normalized[normalizer(u)] = asNumber(v);\n }\n }\n return normalized;\n}\n\n/**\n * Returns the offset's value as a string\n * @param {number} ts - Epoch milliseconds for which to get the offset\n * @param {string} format - What style of offset to return.\n * Accepts 'narrow', 'short', or 'techie'. Returning '+6', '+06:00', or '+0600' respectively\n * @return {string}\n */\nexport function formatOffset(offset, format) {\n const hours = Math.trunc(Math.abs(offset / 60)),\n minutes = Math.trunc(Math.abs(offset % 60)),\n sign = offset >= 0 ? \"+\" : \"-\";\n\n switch (format) {\n case \"short\":\n return `${sign}${padStart(hours, 2)}:${padStart(minutes, 2)}`;\n case \"narrow\":\n return `${sign}${hours}${minutes > 0 ? `:${minutes}` : \"\"}`;\n case \"techie\":\n return `${sign}${padStart(hours, 2)}${padStart(minutes, 2)}`;\n default:\n throw new RangeError(`Value format ${format} is out of range for property format`);\n }\n}\n\nexport function timeObject(obj) {\n return pick(obj, [\"hour\", \"minute\", \"second\", \"millisecond\"]);\n}\n","import * as Formats from \"./formats.js\";\nimport { pick } from \"./util.js\";\n\nfunction stringify(obj) {\n return JSON.stringify(obj, Object.keys(obj).sort());\n}\n\n/**\n * @private\n */\n\nexport const monthsLong = [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n];\n\nexport const monthsShort = [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n];\n\nexport const monthsNarrow = [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"];\n\nexport function months(length) {\n switch (length) {\n case \"narrow\":\n return [...monthsNarrow];\n case \"short\":\n return [...monthsShort];\n case \"long\":\n return [...monthsLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"];\n case \"2-digit\":\n return [\"01\", \"02\", \"03\", \"04\", \"05\", \"06\", \"07\", \"08\", \"09\", \"10\", \"11\", \"12\"];\n default:\n return null;\n }\n}\n\nexport const weekdaysLong = [\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n \"Sunday\",\n];\n\nexport const weekdaysShort = [\"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\", \"Sun\"];\n\nexport const weekdaysNarrow = [\"M\", \"T\", \"W\", \"T\", \"F\", \"S\", \"S\"];\n\nexport function weekdays(length) {\n switch (length) {\n case \"narrow\":\n return [...weekdaysNarrow];\n case \"short\":\n return [...weekdaysShort];\n case \"long\":\n return [...weekdaysLong];\n case \"numeric\":\n return [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\"];\n default:\n return null;\n }\n}\n\nexport const meridiems = [\"AM\", \"PM\"];\n\nexport const erasLong = [\"Before Christ\", \"Anno Domini\"];\n\nexport const erasShort = [\"BC\", \"AD\"];\n\nexport const erasNarrow = [\"B\", \"A\"];\n\nexport function eras(length) {\n switch (length) {\n case \"narrow\":\n return [...erasNarrow];\n case \"short\":\n return [...erasShort];\n case \"long\":\n return [...erasLong];\n default:\n return null;\n }\n}\n\nexport function meridiemForDateTime(dt) {\n return meridiems[dt.hour < 12 ? 0 : 1];\n}\n\nexport function weekdayForDateTime(dt, length) {\n return weekdays(length)[dt.weekday - 1];\n}\n\nexport function monthForDateTime(dt, length) {\n return months(length)[dt.month - 1];\n}\n\nexport function eraForDateTime(dt, length) {\n return eras(length)[dt.year < 0 ? 0 : 1];\n}\n\nexport function formatRelativeTime(unit, count, numeric = \"always\", narrow = false) {\n const units = {\n years: [\"year\", \"yr.\"],\n quarters: [\"quarter\", \"qtr.\"],\n months: [\"month\", \"mo.\"],\n weeks: [\"week\", \"wk.\"],\n days: [\"day\", \"day\", \"days\"],\n hours: [\"hour\", \"hr.\"],\n minutes: [\"minute\", \"min.\"],\n seconds: [\"second\", \"sec.\"],\n };\n\n const lastable = [\"hours\", \"minutes\", \"seconds\"].indexOf(unit) === -1;\n\n if (numeric === \"auto\" && lastable) {\n const isDay = unit === \"days\";\n switch (count) {\n case 1:\n return isDay ? \"tomorrow\" : `next ${units[unit][0]}`;\n case -1:\n return isDay ? \"yesterday\" : `last ${units[unit][0]}`;\n case 0:\n return isDay ? \"today\" : `this ${units[unit][0]}`;\n default: // fall through\n }\n }\n\n const isInPast = Object.is(count, -0) || count < 0,\n fmtValue = Math.abs(count),\n singular = fmtValue === 1,\n lilUnits = units[unit],\n fmtUnit = narrow\n ? singular\n ? lilUnits[1]\n : lilUnits[2] || lilUnits[1]\n : singular\n ? units[unit][0]\n : unit;\n return isInPast ? `${fmtValue} ${fmtUnit} ago` : `in ${fmtValue} ${fmtUnit}`;\n}\n\nexport function formatString(knownFormat) {\n // these all have the offsets removed because we don't have access to them\n // without all the intl stuff this is backfilling\n const filtered = pick(knownFormat, [\n \"weekday\",\n \"era\",\n \"year\",\n \"month\",\n \"day\",\n \"hour\",\n \"minute\",\n \"second\",\n \"timeZoneName\",\n \"hourCycle\",\n ]),\n key = stringify(filtered),\n dateTimeHuge = \"EEEE, LLLL d, yyyy, h:mm a\";\n switch (key) {\n case stringify(Formats.DATE_SHORT):\n return \"M/d/yyyy\";\n case stringify(Formats.DATE_MED):\n return \"LLL d, yyyy\";\n case stringify(Formats.DATE_MED_WITH_WEEKDAY):\n return \"EEE, LLL d, yyyy\";\n case stringify(Formats.DATE_FULL):\n return \"LLLL d, yyyy\";\n case stringify(Formats.DATE_HUGE):\n return \"EEEE, LLLL d, yyyy\";\n case stringify(Formats.TIME_SIMPLE):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_SECONDS):\n return \"h:mm:ss a\";\n case stringify(Formats.TIME_WITH_SHORT_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_WITH_LONG_OFFSET):\n return \"h:mm a\";\n case stringify(Formats.TIME_24_SIMPLE):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_SECONDS):\n return \"HH:mm:ss\";\n case stringify(Formats.TIME_24_WITH_SHORT_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.TIME_24_WITH_LONG_OFFSET):\n return \"HH:mm\";\n case stringify(Formats.DATETIME_SHORT):\n return \"M/d/yyyy, h:mm a\";\n case stringify(Formats.DATETIME_MED):\n return \"LLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL):\n return \"LLLL d, yyyy, h:mm a\";\n case stringify(Formats.DATETIME_HUGE):\n return dateTimeHuge;\n case stringify(Formats.DATETIME_SHORT_WITH_SECONDS):\n return \"M/d/yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_SECONDS):\n return \"LLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_MED_WITH_WEEKDAY):\n return \"EEE, d LLL yyyy, h:mm a\";\n case stringify(Formats.DATETIME_FULL_WITH_SECONDS):\n return \"LLLL d, yyyy, h:mm:ss a\";\n case stringify(Formats.DATETIME_HUGE_WITH_SECONDS):\n return \"EEEE, LLLL d, yyyy, h:mm:ss a\";\n default:\n return dateTimeHuge;\n }\n}\n","import * as English from \"./english.js\";\nimport * as Formats from \"./formats.js\";\nimport { padStart } from \"./util.js\";\n\nfunction stringifyTokens(splits, tokenToString) {\n let s = \"\";\n for (const token of splits) {\n if (token.literal) {\n s += token.val;\n } else {\n s += tokenToString(token.val);\n }\n }\n return s;\n}\n\nconst macroTokenToFormatOpts = {\n D: Formats.DATE_SHORT,\n DD: Formats.DATE_MED,\n DDD: Formats.DATE_FULL,\n DDDD: Formats.DATE_HUGE,\n t: Formats.TIME_SIMPLE,\n tt: Formats.TIME_WITH_SECONDS,\n ttt: Formats.TIME_WITH_SHORT_OFFSET,\n tttt: Formats.TIME_WITH_LONG_OFFSET,\n T: Formats.TIME_24_SIMPLE,\n TT: Formats.TIME_24_WITH_SECONDS,\n TTT: Formats.TIME_24_WITH_SHORT_OFFSET,\n TTTT: Formats.TIME_24_WITH_LONG_OFFSET,\n f: Formats.DATETIME_SHORT,\n ff: Formats.DATETIME_MED,\n fff: Formats.DATETIME_FULL,\n ffff: Formats.DATETIME_HUGE,\n F: Formats.DATETIME_SHORT_WITH_SECONDS,\n FF: Formats.DATETIME_MED_WITH_SECONDS,\n FFF: Formats.DATETIME_FULL_WITH_SECONDS,\n FFFF: Formats.DATETIME_HUGE_WITH_SECONDS,\n};\n\n/**\n * @private\n */\n\nexport default class Formatter {\n static create(locale, opts = {}) {\n return new Formatter(locale, opts);\n }\n\n static parseFormat(fmt) {\n // white-space is always considered a literal in user-provided formats\n // the \" \" token has a special meaning (see unitForToken)\n\n let current = null,\n currentFull = \"\",\n bracketed = false;\n const splits = [];\n for (let i = 0; i < fmt.length; i++) {\n const c = fmt.charAt(i);\n if (c === \"'\") {\n // turn '' into a literal signal quote instead of just skipping the empty literal\n if (currentFull.length > 0 || bracketed) {\n splits.push({\n literal: bracketed || /^\\s+$/.test(currentFull),\n val: currentFull === \"\" ? \"'\" : currentFull,\n });\n }\n current = null;\n currentFull = \"\";\n bracketed = !bracketed;\n } else if (bracketed) {\n currentFull += c;\n } else if (c === current) {\n currentFull += c;\n } else {\n if (currentFull.length > 0) {\n splits.push({ literal: /^\\s+$/.test(currentFull), val: currentFull });\n }\n currentFull = c;\n current = c;\n }\n }\n\n if (currentFull.length > 0) {\n splits.push({ literal: bracketed || /^\\s+$/.test(currentFull), val: currentFull });\n }\n\n return splits;\n }\n\n static macroTokenToFormatOpts(token) {\n return macroTokenToFormatOpts[token];\n }\n\n constructor(locale, formatOpts) {\n this.opts = formatOpts;\n this.loc = locale;\n this.systemLoc = null;\n }\n\n formatWithSystemDefault(dt, opts) {\n if (this.systemLoc === null) {\n this.systemLoc = this.loc.redefaultToSystem();\n }\n const df = this.systemLoc.dtFormatter(dt, { ...this.opts, ...opts });\n return df.format();\n }\n\n dtFormatter(dt, opts = {}) {\n return this.loc.dtFormatter(dt, { ...this.opts, ...opts });\n }\n\n formatDateTime(dt, opts) {\n return this.dtFormatter(dt, opts).format();\n }\n\n formatDateTimeParts(dt, opts) {\n return this.dtFormatter(dt, opts).formatToParts();\n }\n\n formatInterval(interval, opts) {\n const df = this.dtFormatter(interval.start, opts);\n return df.dtf.formatRange(interval.start.toJSDate(), interval.end.toJSDate());\n }\n\n resolvedOptions(dt, opts) {\n return this.dtFormatter(dt, opts).resolvedOptions();\n }\n\n num(n, p = 0, signDisplay = undefined) {\n // we get some perf out of doing this here, annoyingly\n if (this.opts.forceSimple) {\n return padStart(n, p);\n }\n\n const opts = { ...this.opts };\n\n if (p > 0) {\n opts.padTo = p;\n }\n if (signDisplay) {\n opts.signDisplay = signDisplay;\n }\n\n return this.loc.numberFormatter(opts).format(n);\n }\n\n formatDateTimeFromString(dt, fmt) {\n const knownEnglish = this.loc.listingMode() === \"en\",\n useDateTimeFormatter = this.loc.outputCalendar && this.loc.outputCalendar !== \"gregory\",\n string = (opts, extract) => this.loc.extract(dt, opts, extract),\n formatOffset = (opts) => {\n if (dt.isOffsetFixed && dt.offset === 0 && opts.allowZ) {\n return \"Z\";\n }\n\n return dt.isValid ? dt.zone.formatOffset(dt.ts, opts.format) : \"\";\n },\n meridiem = () =>\n knownEnglish\n ? English.meridiemForDateTime(dt)\n : string({ hour: \"numeric\", hourCycle: \"h12\" }, \"dayperiod\"),\n month = (length, standalone) =>\n knownEnglish\n ? English.monthForDateTime(dt, length)\n : string(standalone ? { month: length } : { month: length, day: \"numeric\" }, \"month\"),\n weekday = (length, standalone) =>\n knownEnglish\n ? English.weekdayForDateTime(dt, length)\n : string(\n standalone ? { weekday: length } : { weekday: length, month: \"long\", day: \"numeric\" },\n \"weekday\"\n ),\n maybeMacro = (token) => {\n const formatOpts = Formatter.macroTokenToFormatOpts(token);\n if (formatOpts) {\n return this.formatWithSystemDefault(dt, formatOpts);\n } else {\n return token;\n }\n },\n era = (length) =>\n knownEnglish ? English.eraForDateTime(dt, length) : string({ era: length }, \"era\"),\n tokenToString = (token) => {\n // Where possible: https://cldr.unicode.org/translation/date-time/date-time-symbols\n switch (token) {\n // ms\n case \"S\":\n return this.num(dt.millisecond);\n case \"u\":\n // falls through\n case \"SSS\":\n return this.num(dt.millisecond, 3);\n // seconds\n case \"s\":\n return this.num(dt.second);\n case \"ss\":\n return this.num(dt.second, 2);\n // fractional seconds\n case \"uu\":\n return this.num(Math.floor(dt.millisecond / 10), 2);\n case \"uuu\":\n return this.num(Math.floor(dt.millisecond / 100));\n // minutes\n case \"m\":\n return this.num(dt.minute);\n case \"mm\":\n return this.num(dt.minute, 2);\n // hours\n case \"h\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12);\n case \"hh\":\n return this.num(dt.hour % 12 === 0 ? 12 : dt.hour % 12, 2);\n case \"H\":\n return this.num(dt.hour);\n case \"HH\":\n return this.num(dt.hour, 2);\n // offset\n case \"Z\":\n // like +6\n return formatOffset({ format: \"narrow\", allowZ: this.opts.allowZ });\n case \"ZZ\":\n // like +06:00\n return formatOffset({ format: \"short\", allowZ: this.opts.allowZ });\n case \"ZZZ\":\n // like +0600\n return formatOffset({ format: \"techie\", allowZ: this.opts.allowZ });\n case \"ZZZZ\":\n // like EST\n return dt.zone.offsetName(dt.ts, { format: \"short\", locale: this.loc.locale });\n case \"ZZZZZ\":\n // like Eastern Standard Time\n return dt.zone.offsetName(dt.ts, { format: \"long\", locale: this.loc.locale });\n // zone\n case \"z\":\n // like America/New_York\n return dt.zoneName;\n // meridiems\n case \"a\":\n return meridiem();\n // dates\n case \"d\":\n return useDateTimeFormatter ? string({ day: \"numeric\" }, \"day\") : this.num(dt.day);\n case \"dd\":\n return useDateTimeFormatter ? string({ day: \"2-digit\" }, \"day\") : this.num(dt.day, 2);\n // weekdays - standalone\n case \"c\":\n // like 1\n return this.num(dt.weekday);\n case \"ccc\":\n // like 'Tues'\n return weekday(\"short\", true);\n case \"cccc\":\n // like 'Tuesday'\n return weekday(\"long\", true);\n case \"ccccc\":\n // like 'T'\n return weekday(\"narrow\", true);\n // weekdays - format\n case \"E\":\n // like 1\n return this.num(dt.weekday);\n case \"EEE\":\n // like 'Tues'\n return weekday(\"short\", false);\n case \"EEEE\":\n // like 'Tuesday'\n return weekday(\"long\", false);\n case \"EEEEE\":\n // like 'T'\n return weekday(\"narrow\", false);\n // months - standalone\n case \"L\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\", day: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"LL\":\n // like 01, doesn't seem to work\n return useDateTimeFormatter\n ? string({ month: \"2-digit\", day: \"numeric\" }, \"month\")\n : this.num(dt.month, 2);\n case \"LLL\":\n // like Jan\n return month(\"short\", true);\n case \"LLLL\":\n // like January\n return month(\"long\", true);\n case \"LLLLL\":\n // like J\n return month(\"narrow\", true);\n // months - format\n case \"M\":\n // like 1\n return useDateTimeFormatter\n ? string({ month: \"numeric\" }, \"month\")\n : this.num(dt.month);\n case \"MM\":\n // like 01\n return useDateTimeFormatter\n ? string({ month: \"2-digit\" }, \"month\")\n : this.num(dt.month, 2);\n case \"MMM\":\n // like Jan\n return month(\"short\", false);\n case \"MMMM\":\n // like January\n return month(\"long\", false);\n case \"MMMMM\":\n // like J\n return month(\"narrow\", false);\n // years\n case \"y\":\n // like 2014\n return useDateTimeFormatter ? string({ year: \"numeric\" }, \"year\") : this.num(dt.year);\n case \"yy\":\n // like 14\n return useDateTimeFormatter\n ? string({ year: \"2-digit\" }, \"year\")\n : this.num(dt.year.toString().slice(-2), 2);\n case \"yyyy\":\n // like 0012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 4);\n case \"yyyyyy\":\n // like 000012\n return useDateTimeFormatter\n ? string({ year: \"numeric\" }, \"year\")\n : this.num(dt.year, 6);\n // eras\n case \"G\":\n // like AD\n return era(\"short\");\n case \"GG\":\n // like Anno Domini\n return era(\"long\");\n case \"GGGGG\":\n return era(\"narrow\");\n case \"kk\":\n return this.num(dt.weekYear.toString().slice(-2), 2);\n case \"kkkk\":\n return this.num(dt.weekYear, 4);\n case \"W\":\n return this.num(dt.weekNumber);\n case \"WW\":\n return this.num(dt.weekNumber, 2);\n case \"n\":\n return this.num(dt.localWeekNumber);\n case \"nn\":\n return this.num(dt.localWeekNumber, 2);\n case \"ii\":\n return this.num(dt.localWeekYear.toString().slice(-2), 2);\n case \"iiii\":\n return this.num(dt.localWeekYear, 4);\n case \"o\":\n return this.num(dt.ordinal);\n case \"ooo\":\n return this.num(dt.ordinal, 3);\n case \"q\":\n // like 1\n return this.num(dt.quarter);\n case \"qq\":\n // like 01\n return this.num(dt.quarter, 2);\n case \"X\":\n return this.num(Math.floor(dt.ts / 1000));\n case \"x\":\n return this.num(dt.ts);\n default:\n return maybeMacro(token);\n }\n };\n\n return stringifyTokens(Formatter.parseFormat(fmt), tokenToString);\n }\n\n formatDurationFromString(dur, fmt) {\n const invertLargest = this.opts.signMode === \"negativeLargestOnly\" ? -1 : 1;\n const tokenToField = (token) => {\n switch (token[0]) {\n case \"S\":\n return \"milliseconds\";\n case \"s\":\n return \"seconds\";\n case \"m\":\n return \"minutes\";\n case \"h\":\n return \"hours\";\n case \"d\":\n return \"days\";\n case \"w\":\n return \"weeks\";\n case \"M\":\n return \"months\";\n case \"y\":\n return \"years\";\n default:\n return null;\n }\n },\n tokenToString = (lildur, info) => (token) => {\n const mapped = tokenToField(token);\n if (mapped) {\n const inversionFactor =\n info.isNegativeDuration && mapped !== info.largestUnit ? invertLargest : 1;\n let signDisplay;\n if (this.opts.signMode === \"negativeLargestOnly\" && mapped !== info.largestUnit) {\n signDisplay = \"never\";\n } else if (this.opts.signMode === \"all\") {\n signDisplay = \"always\";\n } else {\n // \"auto\" and \"negative\" are the same, but \"auto\" has better support\n signDisplay = \"auto\";\n }\n return this.num(lildur.get(mapped) * inversionFactor, token.length, signDisplay);\n } else {\n return token;\n }\n },\n tokens = Formatter.parseFormat(fmt),\n realTokens = tokens.reduce(\n (found, { literal, val }) => (literal ? found : found.concat(val)),\n []\n ),\n collapsed = dur.shiftTo(...realTokens.map(tokenToField).filter((t) => t)),\n durationInfo = {\n isNegativeDuration: collapsed < 0,\n // this relies on \"collapsed\" being based on \"shiftTo\", which builds up the object\n // in order\n largestUnit: Object.keys(collapsed.values)[0],\n };\n return stringifyTokens(tokens, tokenToString(collapsed, durationInfo));\n }\n}\n","import {\n untruncateYear,\n signedOffset,\n parseInteger,\n parseMillis,\n isUndefined,\n parseFloating,\n} from \"./util.js\";\nimport * as English from \"./english.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\n\n/*\n * This file handles parsing for well-specified formats. Here's how it works:\n * Two things go into parsing: a regex to match with and an extractor to take apart the groups in the match.\n * An extractor is just a function that takes a regex match array and returns a { year: ..., month: ... } object\n * parse() does the work of executing the regex and applying the extractor. It takes multiple regex/extractor pairs to try in sequence.\n * Extractors can take a \"cursor\" representing the offset in the match to look at. This makes it easy to combine extractors.\n * combineExtractors() does the work of combining them, keeping track of the cursor through multiple extractions.\n * Some extractions are super dumb and simpleParse and fromStrings help DRY them.\n */\n\nconst ianaRegex = /[A-Za-z_+-]{1,256}(?::?\\/[A-Za-z0-9_+-]{1,256}(?:\\/[A-Za-z0-9_+-]{1,256})?)?/;\n\nfunction combineRegexes(...regexes) {\n const full = regexes.reduce((f, r) => f + r.source, \"\");\n return RegExp(`^${full}$`);\n}\n\nfunction combineExtractors(...extractors) {\n return (m) =>\n extractors\n .reduce(\n ([mergedVals, mergedZone, cursor], ex) => {\n const [val, zone, next] = ex(m, cursor);\n return [{ ...mergedVals, ...val }, zone || mergedZone, next];\n },\n [{}, null, 1]\n )\n .slice(0, 2);\n}\n\nfunction parse(s, ...patterns) {\n if (s == null) {\n return [null, null];\n }\n\n for (const [regex, extractor] of patterns) {\n const m = regex.exec(s);\n if (m) {\n return extractor(m);\n }\n }\n return [null, null];\n}\n\nfunction simpleParse(...keys) {\n return (match, cursor) => {\n const ret = {};\n let i;\n\n for (i = 0; i < keys.length; i++) {\n ret[keys[i]] = parseInteger(match[cursor + i]);\n }\n return [ret, null, cursor + i];\n };\n}\n\n// ISO and SQL parsing\nconst offsetRegex = /(?:([Zz])|([+-]\\d\\d)(?::?(\\d\\d))?)/;\nconst isoExtendedZone = `(?:${offsetRegex.source}?(?:\\\\[(${ianaRegex.source})\\\\])?)?`;\nconst isoTimeBaseRegex = /(\\d\\d)(?::?(\\d\\d)(?::?(\\d\\d)(?:[.,](\\d{1,30}))?)?)?/;\nconst isoTimeRegex = RegExp(`${isoTimeBaseRegex.source}${isoExtendedZone}`);\nconst isoTimeExtensionRegex = RegExp(`(?:[Tt]${isoTimeRegex.source})?`);\nconst isoYmdRegex = /([+-]\\d{6}|\\d{4})(?:-?(\\d\\d)(?:-?(\\d\\d))?)?/;\nconst isoWeekRegex = /(\\d{4})-?W(\\d\\d)(?:-?(\\d))?/;\nconst isoOrdinalRegex = /(\\d{4})-?(\\d{3})/;\nconst extractISOWeekData = simpleParse(\"weekYear\", \"weekNumber\", \"weekDay\");\nconst extractISOOrdinalData = simpleParse(\"year\", \"ordinal\");\nconst sqlYmdRegex = /(\\d{4})-(\\d\\d)-(\\d\\d)/; // dumbed-down version of the ISO one\nconst sqlTimeRegex = RegExp(\n `${isoTimeBaseRegex.source} ?(?:${offsetRegex.source}|(${ianaRegex.source}))?`\n);\nconst sqlTimeExtensionRegex = RegExp(`(?: ${sqlTimeRegex.source})?`);\n\nfunction int(match, pos, fallback) {\n const m = match[pos];\n return isUndefined(m) ? fallback : parseInteger(m);\n}\n\nfunction extractISOYmd(match, cursor) {\n const item = {\n year: int(match, cursor),\n month: int(match, cursor + 1, 1),\n day: int(match, cursor + 2, 1),\n };\n\n return [item, null, cursor + 3];\n}\n\nfunction extractISOTime(match, cursor) {\n const item = {\n hours: int(match, cursor, 0),\n minutes: int(match, cursor + 1, 0),\n seconds: int(match, cursor + 2, 0),\n milliseconds: parseMillis(match[cursor + 3]),\n };\n\n return [item, null, cursor + 4];\n}\n\nfunction extractISOOffset(match, cursor) {\n const local = !match[cursor] && !match[cursor + 1],\n fullOffset = signedOffset(match[cursor + 1], match[cursor + 2]),\n zone = local ? null : FixedOffsetZone.instance(fullOffset);\n return [{}, zone, cursor + 3];\n}\n\nfunction extractIANAZone(match, cursor) {\n const zone = match[cursor] ? IANAZone.create(match[cursor]) : null;\n return [{}, zone, cursor + 1];\n}\n\n// ISO time parsing\n\nconst isoTimeOnly = RegExp(`^T?${isoTimeBaseRegex.source}$`);\n\n// ISO duration parsing\n\nconst isoDuration =\n /^-?P(?:(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)Y)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)W)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)D)?(?:T(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)H)?(?:(-?\\d{1,20}(?:\\.\\d{1,20})?)M)?(?:(-?\\d{1,20})(?:[.,](-?\\d{1,20}))?S)?)?)$/;\n\nfunction extractISODuration(match) {\n const [s, yearStr, monthStr, weekStr, dayStr, hourStr, minuteStr, secondStr, millisecondsStr] =\n match;\n\n const hasNegativePrefix = s[0] === \"-\";\n const negativeSeconds = secondStr && secondStr[0] === \"-\";\n\n const maybeNegate = (num, force = false) =>\n num !== undefined && (force || (num && hasNegativePrefix)) ? -num : num;\n\n return [\n {\n years: maybeNegate(parseFloating(yearStr)),\n months: maybeNegate(parseFloating(monthStr)),\n weeks: maybeNegate(parseFloating(weekStr)),\n days: maybeNegate(parseFloating(dayStr)),\n hours: maybeNegate(parseFloating(hourStr)),\n minutes: maybeNegate(parseFloating(minuteStr)),\n seconds: maybeNegate(parseFloating(secondStr), secondStr === \"-0\"),\n milliseconds: maybeNegate(parseMillis(millisecondsStr), negativeSeconds),\n },\n ];\n}\n\n// These are a little braindead. EDT *should* tell us that we're in, say, America/New_York\n// and not just that we're in -240 *right now*. But since I don't think these are used that often\n// I'm just going to ignore that\nconst obsOffsets = {\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n};\n\nfunction fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n const result = {\n year: yearStr.length === 2 ? untruncateYear(parseInteger(yearStr)) : parseInteger(yearStr),\n month: English.monthsShort.indexOf(monthStr) + 1,\n day: parseInteger(dayStr),\n hour: parseInteger(hourStr),\n minute: parseInteger(minuteStr),\n };\n\n if (secondStr) result.second = parseInteger(secondStr);\n if (weekdayStr) {\n result.weekday =\n weekdayStr.length > 3\n ? English.weekdaysLong.indexOf(weekdayStr) + 1\n : English.weekdaysShort.indexOf(weekdayStr) + 1;\n }\n\n return result;\n}\n\n// RFC 2822/5322\nconst rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|(?:([+-]\\d\\d)(\\d\\d)))$/;\n\nfunction extractRFC2822(match) {\n const [\n ,\n weekdayStr,\n dayStr,\n monthStr,\n yearStr,\n hourStr,\n minuteStr,\n secondStr,\n obsOffset,\n milOffset,\n offHourStr,\n offMinuteStr,\n ] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n\n let offset;\n if (obsOffset) {\n offset = obsOffsets[obsOffset];\n } else if (milOffset) {\n offset = 0;\n } else {\n offset = signedOffset(offHourStr, offMinuteStr);\n }\n\n return [result, new FixedOffsetZone(offset)];\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, \" \")\n .replace(/(\\s\\s+)/g, \" \")\n .trim();\n}\n\n// http date\n\nconst rfc1123 =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun), (\\d\\d) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) (\\d{4}) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n rfc850 =\n /^(Monday|Tuesday|Wednesday|Thursday|Friday|Saturday|Sunday), (\\d\\d)-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)-(\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) GMT$/,\n ascii =\n /^(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) ( \\d|\\d\\d) (\\d\\d):(\\d\\d):(\\d\\d) (\\d{4})$/;\n\nfunction extractRFC1123Or850(match) {\n const [, weekdayStr, dayStr, monthStr, yearStr, hourStr, minuteStr, secondStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nfunction extractASCII(match) {\n const [, weekdayStr, monthStr, dayStr, hourStr, minuteStr, secondStr, yearStr] = match,\n result = fromStrings(weekdayStr, yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr);\n return [result, FixedOffsetZone.utcInstance];\n}\n\nconst isoYmdWithTimeExtensionRegex = combineRegexes(isoYmdRegex, isoTimeExtensionRegex);\nconst isoWeekWithTimeExtensionRegex = combineRegexes(isoWeekRegex, isoTimeExtensionRegex);\nconst isoOrdinalWithTimeExtensionRegex = combineRegexes(isoOrdinalRegex, isoTimeExtensionRegex);\nconst isoTimeCombinedRegex = combineRegexes(isoTimeRegex);\n\nconst extractISOYmdTimeAndOffset = combineExtractors(\n extractISOYmd,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOWeekTimeAndOffset = combineExtractors(\n extractISOWeekData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOOrdinalDateAndTime = combineExtractors(\n extractISOOrdinalData,\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\nconst extractISOTimeAndOffset = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\n/*\n * @private\n */\n\nexport function parseISODate(s) {\n return parse(\n s,\n [isoYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [isoWeekWithTimeExtensionRegex, extractISOWeekTimeAndOffset],\n [isoOrdinalWithTimeExtensionRegex, extractISOOrdinalDateAndTime],\n [isoTimeCombinedRegex, extractISOTimeAndOffset]\n );\n}\n\nexport function parseRFC2822Date(s) {\n return parse(preprocessRFC2822(s), [rfc2822, extractRFC2822]);\n}\n\nexport function parseHTTPDate(s) {\n return parse(\n s,\n [rfc1123, extractRFC1123Or850],\n [rfc850, extractRFC1123Or850],\n [ascii, extractASCII]\n );\n}\n\nexport function parseISODuration(s) {\n return parse(s, [isoDuration, extractISODuration]);\n}\n\nconst extractISOTimeOnly = combineExtractors(extractISOTime);\n\nexport function parseISOTimeOnly(s) {\n return parse(s, [isoTimeOnly, extractISOTimeOnly]);\n}\n\nconst sqlYmdWithTimeExtensionRegex = combineRegexes(sqlYmdRegex, sqlTimeExtensionRegex);\nconst sqlTimeCombinedRegex = combineRegexes(sqlTimeRegex);\n\nconst extractISOTimeOffsetAndIANAZone = combineExtractors(\n extractISOTime,\n extractISOOffset,\n extractIANAZone\n);\n\nexport function parseSQL(s) {\n return parse(\n s,\n [sqlYmdWithTimeExtensionRegex, extractISOYmdTimeAndOffset],\n [sqlTimeCombinedRegex, extractISOTimeOffsetAndIANAZone]\n );\n}\n","import { InvalidArgumentError, InvalidDurationError, InvalidUnitError } from \"./errors.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Locale from \"./impl/locale.js\";\nimport { parseISODuration, parseISOTimeOnly } from \"./impl/regexParser.js\";\nimport {\n asNumber,\n hasOwnProperty,\n isNumber,\n isUndefined,\n normalizeObject,\n roundTo,\n} from \"./impl/util.js\";\nimport Settings from \"./settings.js\";\nimport DateTime from \"./datetime.js\";\n\nconst INVALID = \"Invalid Duration\";\n\n// unit conversion constants\nexport const lowOrderMatrix = {\n weeks: {\n days: 7,\n hours: 7 * 24,\n minutes: 7 * 24 * 60,\n seconds: 7 * 24 * 60 * 60,\n milliseconds: 7 * 24 * 60 * 60 * 1000,\n },\n days: {\n hours: 24,\n minutes: 24 * 60,\n seconds: 24 * 60 * 60,\n milliseconds: 24 * 60 * 60 * 1000,\n },\n hours: { minutes: 60, seconds: 60 * 60, milliseconds: 60 * 60 * 1000 },\n minutes: { seconds: 60, milliseconds: 60 * 1000 },\n seconds: { milliseconds: 1000 },\n },\n casualMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: 52,\n days: 365,\n hours: 365 * 24,\n minutes: 365 * 24 * 60,\n seconds: 365 * 24 * 60 * 60,\n milliseconds: 365 * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: 13,\n days: 91,\n hours: 91 * 24,\n minutes: 91 * 24 * 60,\n seconds: 91 * 24 * 60 * 60,\n milliseconds: 91 * 24 * 60 * 60 * 1000,\n },\n months: {\n weeks: 4,\n days: 30,\n hours: 30 * 24,\n minutes: 30 * 24 * 60,\n seconds: 30 * 24 * 60 * 60,\n milliseconds: 30 * 24 * 60 * 60 * 1000,\n },\n\n ...lowOrderMatrix,\n },\n daysInYearAccurate = 146097.0 / 400,\n daysInMonthAccurate = 146097.0 / 4800,\n accurateMatrix = {\n years: {\n quarters: 4,\n months: 12,\n weeks: daysInYearAccurate / 7,\n days: daysInYearAccurate,\n hours: daysInYearAccurate * 24,\n minutes: daysInYearAccurate * 24 * 60,\n seconds: daysInYearAccurate * 24 * 60 * 60,\n milliseconds: daysInYearAccurate * 24 * 60 * 60 * 1000,\n },\n quarters: {\n months: 3,\n weeks: daysInYearAccurate / 28,\n days: daysInYearAccurate / 4,\n hours: (daysInYearAccurate * 24) / 4,\n minutes: (daysInYearAccurate * 24 * 60) / 4,\n seconds: (daysInYearAccurate * 24 * 60 * 60) / 4,\n milliseconds: (daysInYearAccurate * 24 * 60 * 60 * 1000) / 4,\n },\n months: {\n weeks: daysInMonthAccurate / 7,\n days: daysInMonthAccurate,\n hours: daysInMonthAccurate * 24,\n minutes: daysInMonthAccurate * 24 * 60,\n seconds: daysInMonthAccurate * 24 * 60 * 60,\n milliseconds: daysInMonthAccurate * 24 * 60 * 60 * 1000,\n },\n ...lowOrderMatrix,\n };\n\n// units ordered by size\nconst orderedUnits = [\n \"years\",\n \"quarters\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\",\n];\n\nconst reverseUnits = orderedUnits.slice(0).reverse();\n\n// clone really means \"create another instance just like this one, but with these changes\"\nfunction clone(dur, alts, clear = false) {\n // deep merge for vals\n const conf = {\n values: clear ? alts.values : { ...dur.values, ...(alts.values || {}) },\n loc: dur.loc.clone(alts.loc),\n conversionAccuracy: alts.conversionAccuracy || dur.conversionAccuracy,\n matrix: alts.matrix || dur.matrix,\n };\n return new Duration(conf);\n}\n\nfunction durationToMillis(matrix, vals) {\n let sum = vals.milliseconds ?? 0;\n for (const unit of reverseUnits.slice(1)) {\n if (vals[unit]) {\n sum += vals[unit] * matrix[unit][\"milliseconds\"];\n }\n }\n return sum;\n}\n\n// NB: mutates parameters\nfunction normalizeValues(matrix, vals) {\n // the logic below assumes the overall value of the duration is positive\n // if this is not the case, factor is used to make it so\n const factor = durationToMillis(matrix, vals) < 0 ? -1 : 1;\n\n orderedUnits.reduceRight((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const previousVal = vals[previous] * factor;\n const conv = matrix[current][previous];\n\n // if (previousVal < 0):\n // lower order unit is negative (e.g. { years: 2, days: -2 })\n // normalize this by reducing the higher order unit by the appropriate amount\n // and increasing the lower order unit\n // this can never make the higher order unit negative, because this function only operates\n // on positive durations, so the amount of time represented by the lower order unit cannot\n // be larger than the higher order unit\n // else:\n // lower order unit is positive (e.g. { years: 2, days: 450 } or { years: -2, days: 450 })\n // in this case we attempt to convert as much as possible from the lower order unit into\n // the higher order one\n //\n // Math.floor takes care of both of these cases, rounding away from 0\n // if previousVal < 0 it makes the absolute value larger\n // if previousVal >= it makes the absolute value smaller\n const rollUp = Math.floor(previousVal / conv);\n vals[current] += rollUp * factor;\n vals[previous] -= rollUp * conv * factor;\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n\n // try to convert any decimals into smaller units if possible\n // for example for { years: 2.5, days: 0, seconds: 0 } we want to get { years: 2, days: 182, hours: 12 }\n orderedUnits.reduce((previous, current) => {\n if (!isUndefined(vals[current])) {\n if (previous) {\n const fraction = vals[previous] % 1;\n vals[previous] -= fraction;\n vals[current] += fraction * matrix[previous][current];\n }\n return current;\n } else {\n return previous;\n }\n }, null);\n}\n\n// Remove all properties with a value of 0 from an object\nfunction removeZeroes(vals) {\n const newVals = {};\n for (const [key, value] of Object.entries(vals)) {\n if (value !== 0) {\n newVals[key] = value;\n }\n }\n return newVals;\n}\n\n/**\n * A Duration object represents a period of time, like \"2 months\" or \"1 day, 1 hour\". Conceptually, it's just a map of units to their quantities, accompanied by some additional configuration and methods for creating, parsing, interrogating, transforming, and formatting them. They can be used on their own or in conjunction with other Luxon types; for example, you can use {@link DateTime#plus} to add a Duration object to a DateTime, producing another DateTime.\n *\n * Here is a brief overview of commonly used methods and getters in Duration:\n *\n * * **Creation** To create a Duration, use {@link Duration.fromMillis}, {@link Duration.fromObject}, or {@link Duration.fromISO}.\n * * **Unit values** See the {@link Duration#years}, {@link Duration#months}, {@link Duration#weeks}, {@link Duration#days}, {@link Duration#hours}, {@link Duration#minutes}, {@link Duration#seconds}, {@link Duration#milliseconds} accessors.\n * * **Configuration** See {@link Duration#locale} and {@link Duration#numberingSystem} accessors.\n * * **Transformation** To create new Durations out of old ones use {@link Duration#plus}, {@link Duration#minus}, {@link Duration#normalize}, {@link Duration#set}, {@link Duration#reconfigure}, {@link Duration#shiftTo}, and {@link Duration#negate}.\n * * **Output** To convert the Duration into other representations, see {@link Duration#as}, {@link Duration#toISO}, {@link Duration#toFormat}, and {@link Duration#toJSON}\n *\n * There's are more methods documented below. In addition, for more information on subtler topics like internationalization and validity, see the external documentation.\n */\nexport default class Duration {\n /**\n * @private\n */\n constructor(config) {\n const accurate = config.conversionAccuracy === \"longterm\" || false;\n let matrix = accurate ? accurateMatrix : casualMatrix;\n\n if (config.matrix) {\n matrix = config.matrix;\n }\n\n /**\n * @access private\n */\n this.values = config.values;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.conversionAccuracy = accurate ? \"longterm\" : \"casual\";\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.matrix = matrix;\n /**\n * @access private\n */\n this.isLuxonDuration = true;\n }\n\n /**\n * Create Duration from a number of milliseconds.\n * @param {number} count of milliseconds\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n static fromMillis(count, opts) {\n return Duration.fromObject({ milliseconds: count }, opts);\n }\n\n /**\n * Create a Duration from a JavaScript object with keys like 'years' and 'hours'.\n * If this object is empty then a zero milliseconds duration is returned.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.years\n * @param {number} obj.quarters\n * @param {number} obj.months\n * @param {number} obj.weeks\n * @param {number} obj.days\n * @param {number} obj.hours\n * @param {number} obj.minutes\n * @param {number} obj.seconds\n * @param {number} obj.milliseconds\n * @param {Object} [opts=[]] - options for creating this Duration\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the custom conversion system to use\n * @return {Duration}\n */\n static fromObject(obj, opts = {}) {\n if (obj == null || typeof obj !== \"object\") {\n throw new InvalidArgumentError(\n `Duration.fromObject: argument expected to be an object, got ${\n obj === null ? \"null\" : typeof obj\n }`\n );\n }\n\n return new Duration({\n values: normalizeObject(obj, Duration.normalizeUnit),\n loc: Locale.fromObject(opts),\n conversionAccuracy: opts.conversionAccuracy,\n matrix: opts.matrix,\n });\n }\n\n /**\n * Create a Duration from DurationLike.\n *\n * @param {Object | number | Duration} durationLike\n * One of:\n * - object with keys like 'years' and 'hours'.\n * - number representing milliseconds\n * - Duration instance\n * @return {Duration}\n */\n static fromDurationLike(durationLike) {\n if (isNumber(durationLike)) {\n return Duration.fromMillis(durationLike);\n } else if (Duration.isDuration(durationLike)) {\n return durationLike;\n } else if (typeof durationLike === \"object\") {\n return Duration.fromObject(durationLike);\n } else {\n throw new InvalidArgumentError(\n `Unknown duration argument ${durationLike} of type ${typeof durationLike}`\n );\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 duration string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the preset conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromISO('P3Y6M1W4DT12H30M5S').toObject() //=> { years: 3, months: 6, weeks: 1, days: 4, hours: 12, minutes: 30, seconds: 5 }\n * @example Duration.fromISO('PT23H').toObject() //=> { hours: 23 }\n * @example Duration.fromISO('P5Y3M').toObject() //=> { years: 5, months: 3 }\n * @return {Duration}\n */\n static fromISO(text, opts) {\n const [parsed] = parseISODuration(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create a Duration from an ISO 8601 time string.\n * @param {string} text - text to parse\n * @param {Object} opts - options for parsing\n * @param {string} [opts.locale='en-US'] - the locale to use\n * @param {string} opts.numberingSystem - the numbering system to use\n * @param {string} [opts.conversionAccuracy='casual'] - the preset conversion system to use\n * @param {string} [opts.matrix=Object] - the conversion system to use\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @example Duration.fromISOTime('11:22:33.444').toObject() //=> { hours: 11, minutes: 22, seconds: 33, milliseconds: 444 }\n * @example Duration.fromISOTime('11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T11:00').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @example Duration.fromISOTime('T1100').toObject() //=> { hours: 11, minutes: 0, seconds: 0 }\n * @return {Duration}\n */\n static fromISOTime(text, opts) {\n const [parsed] = parseISOTimeOnly(text);\n if (parsed) {\n return Duration.fromObject(parsed, opts);\n } else {\n return Duration.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n }\n\n /**\n * Create an invalid Duration.\n * @param {string} reason - simple string of why this datetime is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Duration}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Duration is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDurationError(invalid);\n } else {\n return new Duration({ invalid });\n }\n }\n\n /**\n * @private\n */\n static normalizeUnit(unit) {\n const normalized = {\n year: \"years\",\n years: \"years\",\n quarter: \"quarters\",\n quarters: \"quarters\",\n month: \"months\",\n months: \"months\",\n week: \"weeks\",\n weeks: \"weeks\",\n day: \"days\",\n days: \"days\",\n hour: \"hours\",\n hours: \"hours\",\n minute: \"minutes\",\n minutes: \"minutes\",\n second: \"seconds\",\n seconds: \"seconds\",\n millisecond: \"milliseconds\",\n milliseconds: \"milliseconds\",\n }[unit ? unit.toLowerCase() : unit];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n }\n\n /**\n * Check if an object is a Duration. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDuration(o) {\n return (o && o.isLuxonDuration) || false;\n }\n\n /**\n * Get the locale of a Duration, such 'en-GB'\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a Duration, such 'beng'. The numbering system is used when formatting the Duration\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Returns a string representation of this Duration formatted according to the specified format string. You may use these tokens:\n * * `S` for milliseconds\n * * `s` for seconds\n * * `m` for minutes\n * * `h` for hours\n * * `d` for days\n * * `w` for weeks\n * * `M` for months\n * * `y` for years\n * Notes:\n * * Add padding by repeating the token, e.g. \"yy\" pads the years to two digits, \"hhhh\" pads the hours out to four digits\n * * Tokens can be escaped by wrapping with single quotes.\n * * The duration will be converted to the set of units in the format string using {@link Duration#shiftTo} and the Durations's conversion accuracy setting.\n * @param {string} fmt - the format string\n * @param {Object} opts - options\n * @param {boolean} [opts.floor=true] - floor numerical values\n * @param {'negative'|'all'|'negativeLargestOnly'} [opts.signMode=negative] - How to handle signs\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"y d s\") //=> \"1 6 2\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"yy dd sss\") //=> \"01 06 002\"\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toFormat(\"M S\") //=> \"12 518402000\"\n * @example Duration.fromObject({ days: 6, seconds: 2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"+6 +2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"all\" }) //=> \"-6 -2\"\n * @example Duration.fromObject({ days: -6, seconds: -2 }).toFormat(\"d s\", { signMode: \"negativeLargestOnly\" }) //=> \"-6 2\"\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n // reverse-compat since 1.2; we always round down now, never up, and we do it by default\n const fmtOpts = {\n ...opts,\n floor: opts.round !== false && opts.floor !== false,\n };\n return this.isValid\n ? Formatter.create(this.loc, fmtOpts).formatDurationFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a string representation of a Duration with all units included.\n * To modify its behavior, use `listStyle` and any Intl.NumberFormat option, though `unitDisplay` is especially relevant.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/NumberFormat/NumberFormat#options\n * @param {Object} opts - Formatting options. Accepts the same keys as the options parameter of the native `Intl.NumberFormat` constructor, as well as `listStyle`.\n * @param {string} [opts.listStyle='narrow'] - How to format the merged list. Corresponds to the `style` property of the options parameter of the native `Intl.ListFormat` constructor.\n * @param {boolean} [opts.showZeros=true] - Show all units previously used by the duration even if they are zero\n * @example\n * ```js\n * var dur = Duration.fromObject({ months: 1, weeks: 0, hours: 5, minutes: 6 })\n * dur.toHuman() //=> '1 month, 0 weeks, 5 hours, 6 minutes'\n * dur.toHuman({ listStyle: \"long\" }) //=> '1 month, 0 weeks, 5 hours, and 6 minutes'\n * dur.toHuman({ unitDisplay: \"short\" }) //=> '1 mth, 0 wks, 5 hr, 6 min'\n * dur.toHuman({ showZeros: false }) //=> '1 month, 5 hours, 6 minutes'\n * ```\n */\n toHuman(opts = {}) {\n if (!this.isValid) return INVALID;\n\n const showZeros = opts.showZeros !== false;\n\n const l = orderedUnits\n .map((unit) => {\n const val = this.values[unit];\n if (isUndefined(val) || (val === 0 && !showZeros)) {\n return null;\n }\n return this.loc\n .numberFormatter({ style: \"unit\", unitDisplay: \"long\", ...opts, unit: unit.slice(0, -1) })\n .format(val);\n })\n .filter((n) => n);\n\n return this.loc\n .listFormatter({ type: \"conjunction\", style: opts.listStyle || \"narrow\", ...opts })\n .format(l);\n }\n\n /**\n * Returns a JavaScript object with this Duration's values.\n * @example Duration.fromObject({ years: 1, days: 6, seconds: 2 }).toObject() //=> { years: 1, days: 6, seconds: 2 }\n * @return {Object}\n */\n toObject() {\n if (!this.isValid) return {};\n return { ...this.values };\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Durations\n * @example Duration.fromObject({ years: 3, seconds: 45 }).toISO() //=> 'P3YT45S'\n * @example Duration.fromObject({ months: 4, seconds: 45 }).toISO() //=> 'P4MT45S'\n * @example Duration.fromObject({ months: 5 }).toISO() //=> 'P5M'\n * @example Duration.fromObject({ minutes: 5 }).toISO() //=> 'PT5M'\n * @example Duration.fromObject({ milliseconds: 6 }).toISO() //=> 'PT0.006S'\n * @return {string}\n */\n toISO() {\n // we could use the formatter, but this is an easier way to get the minimum string\n if (!this.isValid) return null;\n\n let s = \"P\";\n if (this.years !== 0) s += this.years + \"Y\";\n if (this.months !== 0 || this.quarters !== 0) s += this.months + this.quarters * 3 + \"M\";\n if (this.weeks !== 0) s += this.weeks + \"W\";\n if (this.days !== 0) s += this.days + \"D\";\n if (this.hours !== 0 || this.minutes !== 0 || this.seconds !== 0 || this.milliseconds !== 0)\n s += \"T\";\n if (this.hours !== 0) s += this.hours + \"H\";\n if (this.minutes !== 0) s += this.minutes + \"M\";\n if (this.seconds !== 0 || this.milliseconds !== 0)\n // this will handle \"floating point madness\" by removing extra decimal places\n // https://stackoverflow.com/questions/588004/is-floating-point-math-broken\n s += roundTo(this.seconds + this.milliseconds / 1000, 3) + \"S\";\n if (s === \"P\") s += \"T0S\";\n return s;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Duration, formatted as a time of day.\n * Note that this will return null if the duration is invalid, negative, or equal to or greater than 24 hours.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Times\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @example Duration.fromObject({ hours: 11 }).toISOTime() //=> '11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressMilliseconds: true }) //=> '11:00:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ suppressSeconds: true }) //=> '11:00'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ includePrefix: true }) //=> 'T11:00:00.000'\n * @example Duration.fromObject({ hours: 11 }).toISOTime({ format: 'basic' }) //=> '110000.000'\n * @return {string}\n */\n toISOTime(opts = {}) {\n if (!this.isValid) return null;\n\n const millis = this.toMillis();\n if (millis < 0 || millis >= 86400000) return null;\n\n opts = {\n suppressMilliseconds: false,\n suppressSeconds: false,\n includePrefix: false,\n format: \"extended\",\n ...opts,\n includeOffset: false,\n };\n\n const dateTime = DateTime.fromMillis(millis, { zone: \"UTC\" });\n return dateTime.toISOTime(opts);\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns an ISO 8601 representation of this Duration appropriate for use in debugging.\n * @return {string}\n */\n toString() {\n return this.toISO();\n }\n\n /**\n * Returns a string representation of this Duration appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Duration { values: ${JSON.stringify(this.values)} }`;\n } else {\n return `Duration { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns an milliseconds value of this Duration.\n * @return {number}\n */\n toMillis() {\n if (!this.isValid) return NaN;\n\n return durationToMillis(this.matrix, this.values);\n }\n\n /**\n * Returns an milliseconds value of this Duration. Alias of {@link toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Make this Duration longer by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n plus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration),\n result = {};\n\n for (const k of orderedUnits) {\n if (hasOwnProperty(dur.values, k) || hasOwnProperty(this.values, k)) {\n result[k] = dur.get(k) + this.get(k);\n }\n }\n\n return clone(this, { values: result }, true);\n }\n\n /**\n * Make this Duration shorter by the specified amount. Return a newly-constructed Duration.\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @return {Duration}\n */\n minus(duration) {\n if (!this.isValid) return this;\n\n const dur = Duration.fromDurationLike(duration);\n return this.plus(dur.negate());\n }\n\n /**\n * Scale this Duration by the specified amount. Return a newly-constructed Duration.\n * @param {function} fn - The function to apply to each unit. Arity is 1 or 2: the value of the unit and, optionally, the unit name. Must return a number.\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits(x => x * 2) //=> { hours: 2, minutes: 60 }\n * @example Duration.fromObject({ hours: 1, minutes: 30 }).mapUnits((x, u) => u === \"hours\" ? x * 2 : x) //=> { hours: 2, minutes: 30 }\n * @return {Duration}\n */\n mapUnits(fn) {\n if (!this.isValid) return this;\n const result = {};\n for (const k of Object.keys(this.values)) {\n result[k] = asNumber(fn(this.values[k], k));\n }\n return clone(this, { values: result }, true);\n }\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example Duration.fromObject({years: 2, days: 3}).get('years') //=> 2\n * @example Duration.fromObject({years: 2, days: 3}).get('months') //=> 0\n * @example Duration.fromObject({years: 2, days: 3}).get('days') //=> 3\n * @return {number}\n */\n get(unit) {\n return this[Duration.normalizeUnit(unit)];\n }\n\n /**\n * \"Set\" the values of specified units. Return a newly-constructed Duration.\n * @param {Object} values - a mapping of units to numbers\n * @example dur.set({ years: 2017 })\n * @example dur.set({ hours: 8, minutes: 30 })\n * @return {Duration}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const mixed = { ...this.values, ...normalizeObject(values, Duration.normalizeUnit) };\n return clone(this, { values: mixed });\n }\n\n /**\n * \"Set\" the locale and/or numberingSystem. Returns a newly-constructed Duration.\n * @example dur.reconfigure({ locale: 'en-GB' })\n * @return {Duration}\n */\n reconfigure({ locale, numberingSystem, conversionAccuracy, matrix } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem });\n const opts = { loc, matrix, conversionAccuracy };\n return clone(this, opts);\n }\n\n /**\n * Return the length of the duration in the specified unit.\n * @param {string} unit - a unit such as 'minutes' or 'days'\n * @example Duration.fromObject({years: 1}).as('days') //=> 365\n * @example Duration.fromObject({years: 1}).as('months') //=> 12\n * @example Duration.fromObject({hours: 60}).as('days') //=> 2.5\n * @return {number}\n */\n as(unit) {\n return this.isValid ? this.shiftTo(unit).get(unit) : NaN;\n }\n\n /**\n * Reduce this Duration to its canonical representation in its current units.\n * Assuming the overall value of the Duration is positive, this means:\n * - excessive values for lower-order units are converted to higher-order units (if possible, see first and second example)\n * - negative lower-order units are converted to higher order units (there must be such a higher order unit, otherwise\n * the overall value would be negative, see third example)\n * - fractional values for higher-order units are converted to lower-order units (if possible, see fourth example)\n *\n * If the overall value is negative, the result of this method is equivalent to `this.negate().normalize().negate()`.\n * @example Duration.fromObject({ years: 2, days: 5000 }).normalize().toObject() //=> { years: 15, days: 255 }\n * @example Duration.fromObject({ days: 5000 }).normalize().toObject() //=> { days: 5000 }\n * @example Duration.fromObject({ hours: 12, minutes: -45 }).normalize().toObject() //=> { hours: 11, minutes: 15 }\n * @example Duration.fromObject({ years: 2.5, days: 0, hours: 0 }).normalize().toObject() //=> { years: 2, days: 182, hours: 12 }\n * @return {Duration}\n */\n normalize() {\n if (!this.isValid) return this;\n const vals = this.toObject();\n normalizeValues(this.matrix, vals);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Rescale units to its largest representation\n * @example Duration.fromObject({ milliseconds: 90000 }).rescale().toObject() //=> { minutes: 1, seconds: 30 }\n * @return {Duration}\n */\n rescale() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.normalize().shiftToAll().toObject());\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Convert this Duration into its representation in a different set of units.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).shiftTo('minutes', 'milliseconds').toObject() //=> { minutes: 60, milliseconds: 30000 }\n * @return {Duration}\n */\n shiftTo(...units) {\n if (!this.isValid) return this;\n\n if (units.length === 0) {\n return this;\n }\n\n units = units.map((u) => Duration.normalizeUnit(u));\n\n const built = {},\n accumulated = {},\n vals = this.toObject();\n let lastUnit;\n\n for (const k of orderedUnits) {\n if (units.indexOf(k) >= 0) {\n lastUnit = k;\n\n let own = 0;\n\n // anything we haven't boiled down yet should get boiled to this unit\n for (const ak in accumulated) {\n own += this.matrix[ak][k] * accumulated[ak];\n accumulated[ak] = 0;\n }\n\n // plus anything that's already in this unit\n if (isNumber(vals[k])) {\n own += vals[k];\n }\n\n // only keep the integer part for now in the hopes of putting any decimal part\n // into a smaller unit later\n const i = Math.trunc(own);\n built[k] = i;\n accumulated[k] = (own * 1000 - i * 1000) / 1000;\n\n // otherwise, keep it in the wings to boil it later\n } else if (isNumber(vals[k])) {\n accumulated[k] = vals[k];\n }\n }\n\n // anything leftover becomes the decimal for the last unit\n // lastUnit must be defined since units is not empty\n for (const key in accumulated) {\n if (accumulated[key] !== 0) {\n built[lastUnit] +=\n key === lastUnit ? accumulated[key] : accumulated[key] / this.matrix[lastUnit][key];\n }\n }\n\n normalizeValues(this.matrix, built);\n return clone(this, { values: built }, true);\n }\n\n /**\n * Shift this Duration to all available units.\n * Same as shiftTo(\"years\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", \"seconds\", \"milliseconds\")\n * @return {Duration}\n */\n shiftToAll() {\n if (!this.isValid) return this;\n return this.shiftTo(\n \"years\",\n \"months\",\n \"weeks\",\n \"days\",\n \"hours\",\n \"minutes\",\n \"seconds\",\n \"milliseconds\"\n );\n }\n\n /**\n * Return the negative of this Duration.\n * @example Duration.fromObject({ hours: 1, seconds: 30 }).negate().toObject() //=> { hours: -1, seconds: -30 }\n * @return {Duration}\n */\n negate() {\n if (!this.isValid) return this;\n const negated = {};\n for (const k of Object.keys(this.values)) {\n negated[k] = this.values[k] === 0 ? 0 : -this.values[k];\n }\n return clone(this, { values: negated }, true);\n }\n\n /**\n * Removes all units with values equal to 0 from this Duration.\n * @example Duration.fromObject({ years: 2, days: 0, hours: 0, minutes: 0 }).removeZeros().toObject() //=> { years: 2 }\n * @return {Duration}\n */\n removeZeros() {\n if (!this.isValid) return this;\n const vals = removeZeroes(this.values);\n return clone(this, { values: vals }, true);\n }\n\n /**\n * Get the years.\n * @type {number}\n */\n get years() {\n return this.isValid ? this.values.years || 0 : NaN;\n }\n\n /**\n * Get the quarters.\n * @type {number}\n */\n get quarters() {\n return this.isValid ? this.values.quarters || 0 : NaN;\n }\n\n /**\n * Get the months.\n * @type {number}\n */\n get months() {\n return this.isValid ? this.values.months || 0 : NaN;\n }\n\n /**\n * Get the weeks\n * @type {number}\n */\n get weeks() {\n return this.isValid ? this.values.weeks || 0 : NaN;\n }\n\n /**\n * Get the days.\n * @type {number}\n */\n get days() {\n return this.isValid ? this.values.days || 0 : NaN;\n }\n\n /**\n * Get the hours.\n * @type {number}\n */\n get hours() {\n return this.isValid ? this.values.hours || 0 : NaN;\n }\n\n /**\n * Get the minutes.\n * @type {number}\n */\n get minutes() {\n return this.isValid ? this.values.minutes || 0 : NaN;\n }\n\n /**\n * Get the seconds.\n * @return {number}\n */\n get seconds() {\n return this.isValid ? this.values.seconds || 0 : NaN;\n }\n\n /**\n * Get the milliseconds.\n * @return {number}\n */\n get milliseconds() {\n return this.isValid ? this.values.milliseconds || 0 : NaN;\n }\n\n /**\n * Returns whether the Duration is invalid. Invalid durations are returned by diff operations\n * on invalid DateTimes or Intervals.\n * @return {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this Duration became invalid, or null if the Duration is valid\n * @return {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Duration became invalid, or null if the Duration is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Equality check\n * Two Durations are equal iff they have the same units and the same values for each unit.\n * @param {Duration} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n if (!this.loc.equals(other.loc)) {\n return false;\n }\n\n function eq(v1, v2) {\n // Consider 0 and undefined as equal\n if (v1 === undefined || v1 === 0) return v2 === undefined || v2 === 0;\n return v1 === v2;\n }\n\n for (const u of orderedUnits) {\n if (!eq(this.values[u], other.values[u])) {\n return false;\n }\n }\n return true;\n }\n}\n","import DateTime, { friendlyDateTime } from \"./datetime.js\";\nimport Duration from \"./duration.js\";\nimport Settings from \"./settings.js\";\nimport { InvalidArgumentError, InvalidIntervalError } from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport * as Formats from \"./impl/formats.js\";\n\nconst INVALID = \"Invalid Interval\";\n\n// checks if the start is equal to or before the end\nfunction validateStartEnd(start, end) {\n if (!start || !start.isValid) {\n return Interval.invalid(\"missing or invalid start\");\n } else if (!end || !end.isValid) {\n return Interval.invalid(\"missing or invalid end\");\n } else if (end < start) {\n return Interval.invalid(\n \"end before start\",\n `The end of an interval must be after its start, but you had start=${start.toISO()} and end=${end.toISO()}`\n );\n } else {\n return null;\n }\n}\n\n/**\n * An Interval object represents a half-open interval of time, where each endpoint is a {@link DateTime}. Conceptually, it's a container for those two endpoints, accompanied by methods for creating, parsing, interrogating, comparing, transforming, and formatting them.\n *\n * Here is a brief overview of the most commonly used methods and getters in Interval:\n *\n * * **Creation** To create an Interval, use {@link Interval.fromDateTimes}, {@link Interval.after}, {@link Interval.before}, or {@link Interval.fromISO}.\n * * **Accessors** Use {@link Interval#start} and {@link Interval#end} to get the start and end.\n * * **Interrogation** To analyze the Interval, use {@link Interval#count}, {@link Interval#length}, {@link Interval#hasSame}, {@link Interval#contains}, {@link Interval#isAfter}, or {@link Interval#isBefore}.\n * * **Transformation** To create other Intervals out of this one, use {@link Interval#set}, {@link Interval#splitAt}, {@link Interval#splitBy}, {@link Interval#divideEqually}, {@link Interval.merge}, {@link Interval.xor}, {@link Interval#union}, {@link Interval#intersection}, or {@link Interval#difference}.\n * * **Comparison** To compare this Interval to another one, use {@link Interval#equals}, {@link Interval#overlaps}, {@link Interval#abutsStart}, {@link Interval#abutsEnd}, {@link Interval#engulfs}\n * * **Output** To convert the Interval into other representations, see {@link Interval#toString}, {@link Interval#toLocaleString}, {@link Interval#toISO}, {@link Interval#toISODate}, {@link Interval#toISOTime}, {@link Interval#toFormat}, and {@link Interval#toDuration}.\n */\nexport default class Interval {\n /**\n * @private\n */\n constructor(config) {\n /**\n * @access private\n */\n this.s = config.start;\n /**\n * @access private\n */\n this.e = config.end;\n /**\n * @access private\n */\n this.invalid = config.invalid || null;\n /**\n * @access private\n */\n this.isLuxonInterval = true;\n }\n\n /**\n * Create an invalid Interval.\n * @param {string} reason - simple string of why this Interval is invalid. Should not contain parameters or anything else data-dependent\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {Interval}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the Interval is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidIntervalError(invalid);\n } else {\n return new Interval({ invalid });\n }\n }\n\n /**\n * Create an Interval from a start DateTime and an end DateTime. Inclusive of the start but not the end.\n * @param {DateTime|Date|Object} start\n * @param {DateTime|Date|Object} end\n * @return {Interval}\n */\n static fromDateTimes(start, end) {\n const builtStart = friendlyDateTime(start),\n builtEnd = friendlyDateTime(end);\n\n const validateError = validateStartEnd(builtStart, builtEnd);\n\n if (validateError == null) {\n return new Interval({\n start: builtStart,\n end: builtEnd,\n });\n } else {\n return validateError;\n }\n }\n\n /**\n * Create an Interval from a start DateTime and a Duration to extend to.\n * @param {DateTime|Date|Object} start\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static after(start, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(start);\n return Interval.fromDateTimes(dt, dt.plus(dur));\n }\n\n /**\n * Create an Interval from an end DateTime and a Duration to extend backwards to.\n * @param {DateTime|Date|Object} end\n * @param {Duration|Object|number} duration - the length of the Interval.\n * @return {Interval}\n */\n static before(end, duration) {\n const dur = Duration.fromDurationLike(duration),\n dt = friendlyDateTime(end);\n return Interval.fromDateTimes(dt.minus(dur), dt);\n }\n\n /**\n * Create an Interval from an ISO 8601 string.\n * Accepts `<start>/<end>`, `<start>/<duration>`, and `<duration>/<end>` formats.\n * @param {string} text - the ISO string to parse\n * @param {Object} [opts] - options to pass {@link DateTime#fromISO} and optionally {@link Duration#fromISO}\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {Interval}\n */\n static fromISO(text, opts) {\n const [s, e] = (text || \"\").split(\"/\", 2);\n if (s && e) {\n let start, startIsValid;\n try {\n start = DateTime.fromISO(s, opts);\n startIsValid = start.isValid;\n } catch (e) {\n startIsValid = false;\n }\n\n let end, endIsValid;\n try {\n end = DateTime.fromISO(e, opts);\n endIsValid = end.isValid;\n } catch (e) {\n endIsValid = false;\n }\n\n if (startIsValid && endIsValid) {\n return Interval.fromDateTimes(start, end);\n }\n\n if (startIsValid) {\n const dur = Duration.fromISO(e, opts);\n if (dur.isValid) {\n return Interval.after(start, dur);\n }\n } else if (endIsValid) {\n const dur = Duration.fromISO(s, opts);\n if (dur.isValid) {\n return Interval.before(end, dur);\n }\n }\n }\n return Interval.invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ISO 8601`);\n }\n\n /**\n * Check if an object is an Interval. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isInterval(o) {\n return (o && o.isLuxonInterval) || false;\n }\n\n /**\n * Returns the start of the Interval\n * @type {DateTime}\n */\n get start() {\n return this.isValid ? this.s : null;\n }\n\n /**\n * Returns the end of the Interval. This is the first instant which is not part of the interval\n * (Interval is half-open).\n * @type {DateTime}\n */\n get end() {\n return this.isValid ? this.e : null;\n }\n\n /**\n * Returns the last DateTime included in the interval (since end is not part of the interval)\n * @type {DateTime}\n */\n get lastDateTime() {\n return this.isValid ? (this.e ? this.e.minus(1) : null) : null;\n }\n\n /**\n * Returns whether this Interval's end is at least its start, meaning that the Interval isn't 'backwards'.\n * @type {boolean}\n */\n get isValid() {\n return this.invalidReason === null;\n }\n\n /**\n * Returns an error code if this Interval is invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this Interval became invalid, or null if the Interval is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Returns the length of the Interval in the specified unit.\n * @param {string} unit - the unit (such as 'hours' or 'days') to return the length in.\n * @return {number}\n */\n length(unit = \"milliseconds\") {\n return this.isValid ? this.toDuration(...[unit]).get(unit) : NaN;\n }\n\n /**\n * Returns the count of minutes, hours, days, months, or years included in the Interval, even in part.\n * Unlike {@link Interval#length} this counts sections of the calendar, not periods of time, e.g. specifying 'day'\n * asks 'what dates are included in this interval?', not 'how many days long is this interval?'\n * @param {string} [unit='milliseconds'] - the unit of time to count.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; this operation will always use the locale of the start DateTime\n * @return {number}\n */\n count(unit = \"milliseconds\", opts) {\n if (!this.isValid) return NaN;\n const start = this.start.startOf(unit, opts);\n let end;\n if (opts?.useLocaleWeeks) {\n end = this.end.reconfigure({ locale: start.locale });\n } else {\n end = this.end;\n }\n end = end.startOf(unit, opts);\n return Math.floor(end.diff(start, unit).get(unit)) + (end.valueOf() !== this.end.valueOf());\n }\n\n /**\n * Returns whether this Interval's start and end are both in the same unit of time\n * @param {string} unit - the unit of time to check sameness on\n * @return {boolean}\n */\n hasSame(unit) {\n return this.isValid ? this.isEmpty() || this.e.minus(1).hasSame(this.s, unit) : false;\n }\n\n /**\n * Return whether this Interval has the same start and end DateTimes.\n * @return {boolean}\n */\n isEmpty() {\n return this.s.valueOf() === this.e.valueOf();\n }\n\n /**\n * Return whether this Interval's start is after the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isAfter(dateTime) {\n if (!this.isValid) return false;\n return this.s > dateTime;\n }\n\n /**\n * Return whether this Interval's end is before the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n isBefore(dateTime) {\n if (!this.isValid) return false;\n return this.e <= dateTime;\n }\n\n /**\n * Return whether this Interval contains the specified DateTime.\n * @param {DateTime} dateTime\n * @return {boolean}\n */\n contains(dateTime) {\n if (!this.isValid) return false;\n return this.s <= dateTime && this.e > dateTime;\n }\n\n /**\n * \"Sets\" the start and/or end dates. Returns a newly-constructed Interval.\n * @param {Object} values - the values to set\n * @param {DateTime} values.start - the starting DateTime\n * @param {DateTime} values.end - the ending DateTime\n * @return {Interval}\n */\n set({ start, end } = {}) {\n if (!this.isValid) return this;\n return Interval.fromDateTimes(start || this.s, end || this.e);\n }\n\n /**\n * Split this Interval at each of the specified DateTimes\n * @param {...DateTime} dateTimes - the unit of time to count.\n * @return {Array}\n */\n splitAt(...dateTimes) {\n if (!this.isValid) return [];\n const sorted = dateTimes\n .map(friendlyDateTime)\n .filter((d) => this.contains(d))\n .sort((a, b) => a.toMillis() - b.toMillis()),\n results = [];\n let { s } = this,\n i = 0;\n\n while (s < this.e) {\n const added = sorted[i] || this.e,\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n i += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into smaller Intervals, each of the specified length.\n * Left over time is grouped into a smaller interval\n * @param {Duration|Object|number} duration - The length of each resulting interval.\n * @return {Array}\n */\n splitBy(duration) {\n const dur = Duration.fromDurationLike(duration);\n\n if (!this.isValid || !dur.isValid || dur.as(\"milliseconds\") === 0) {\n return [];\n }\n\n let { s } = this,\n idx = 1,\n next;\n\n const results = [];\n while (s < this.e) {\n const added = this.start.plus(dur.mapUnits((x) => x * idx));\n next = +added > +this.e ? this.e : added;\n results.push(Interval.fromDateTimes(s, next));\n s = next;\n idx += 1;\n }\n\n return results;\n }\n\n /**\n * Split this Interval into the specified number of smaller intervals.\n * @param {number} numberOfParts - The number of Intervals to divide the Interval into.\n * @return {Array}\n */\n divideEqually(numberOfParts) {\n if (!this.isValid) return [];\n return this.splitBy(this.length() / numberOfParts).slice(0, numberOfParts);\n }\n\n /**\n * Return whether this Interval overlaps with the specified Interval\n * @param {Interval} other\n * @return {boolean}\n */\n overlaps(other) {\n return this.e > other.s && this.s < other.e;\n }\n\n /**\n * Return whether this Interval's end is adjacent to the specified Interval's start.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsStart(other) {\n if (!this.isValid) return false;\n return +this.e === +other.s;\n }\n\n /**\n * Return whether this Interval's start is adjacent to the specified Interval's end.\n * @param {Interval} other\n * @return {boolean}\n */\n abutsEnd(other) {\n if (!this.isValid) return false;\n return +other.e === +this.s;\n }\n\n /**\n * Returns true if this Interval fully contains the specified Interval, specifically if the intersect (of this Interval and the other Interval) is equal to the other Interval; false otherwise.\n * @param {Interval} other\n * @return {boolean}\n */\n engulfs(other) {\n if (!this.isValid) return false;\n return this.s <= other.s && this.e >= other.e;\n }\n\n /**\n * Return whether this Interval has the same start and end as the specified Interval.\n * @param {Interval} other\n * @return {boolean}\n */\n equals(other) {\n if (!this.isValid || !other.isValid) {\n return false;\n }\n\n return this.s.equals(other.s) && this.e.equals(other.e);\n }\n\n /**\n * Return an Interval representing the intersection of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the maximum start time and the minimum end time of the two Intervals.\n * Returns null if the intersection is empty, meaning, the intervals don't intersect.\n * @param {Interval} other\n * @return {Interval}\n */\n intersection(other) {\n if (!this.isValid) return this;\n const s = this.s > other.s ? this.s : other.s,\n e = this.e < other.e ? this.e : other.e;\n\n if (s >= e) {\n return null;\n } else {\n return Interval.fromDateTimes(s, e);\n }\n }\n\n /**\n * Return an Interval representing the union of this Interval and the specified Interval.\n * Specifically, the resulting Interval has the minimum start time and the maximum end time of the two Intervals.\n * @param {Interval} other\n * @return {Interval}\n */\n union(other) {\n if (!this.isValid) return this;\n const s = this.s < other.s ? this.s : other.s,\n e = this.e > other.e ? this.e : other.e;\n return Interval.fromDateTimes(s, e);\n }\n\n /**\n * Merge an array of Intervals into an equivalent minimal set of Intervals.\n * Combines overlapping and adjacent Intervals.\n * The resulting array will contain the Intervals in ascending order, that is, starting with the earliest Interval\n * and ending with the latest.\n *\n * @param {Array} intervals\n * @return {Array}\n */\n static merge(intervals) {\n const [found, final] = intervals\n .sort((a, b) => a.s - b.s)\n .reduce(\n ([sofar, current], item) => {\n if (!current) {\n return [sofar, item];\n } else if (current.overlaps(item) || current.abutsStart(item)) {\n return [sofar, current.union(item)];\n } else {\n return [sofar.concat([current]), item];\n }\n },\n [[], null]\n );\n if (final) {\n found.push(final);\n }\n return found;\n }\n\n /**\n * Return an array of Intervals representing the spans of time that only appear in one of the specified Intervals.\n * @param {Array} intervals\n * @return {Array}\n */\n static xor(intervals) {\n let start = null,\n currentCount = 0;\n const results = [],\n ends = intervals.map((i) => [\n { time: i.s, type: \"s\" },\n { time: i.e, type: \"e\" },\n ]),\n flattened = Array.prototype.concat(...ends),\n arr = flattened.sort((a, b) => a.time - b.time);\n\n for (const i of arr) {\n currentCount += i.type === \"s\" ? 1 : -1;\n\n if (currentCount === 1) {\n start = i.time;\n } else {\n if (start && +start !== +i.time) {\n results.push(Interval.fromDateTimes(start, i.time));\n }\n\n start = null;\n }\n }\n\n return Interval.merge(results);\n }\n\n /**\n * Return an Interval representing the span of time in this Interval that doesn't overlap with any of the specified Intervals.\n * @param {...Interval} intervals\n * @return {Array}\n */\n difference(...intervals) {\n return Interval.xor([this].concat(intervals))\n .map((i) => this.intersection(i))\n .filter((i) => i && !i.isEmpty());\n }\n\n /**\n * Returns a string representation of this Interval appropriate for debugging.\n * @return {string}\n */\n toString() {\n if (!this.isValid) return INVALID;\n return `[${this.s.toISO()} – ${this.e.toISO()})`;\n }\n\n /**\n * Returns a string representation of this Interval appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `Interval { start: ${this.s.toISO()}, end: ${this.e.toISO()} }`;\n } else {\n return `Interval { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns a localized string representing this Interval. Accepts the same options as the\n * Intl.DateTimeFormat constructor and any presets defined by Luxon, such as\n * {@link DateTime.DATE_FULL} or {@link DateTime.TIME_SIMPLE}. The exact behavior of this method\n * is browser-specific, but in general it will return an appropriate representation of the\n * Interval in the assigned locale. Defaults to the system's locale if no locale has been\n * specified.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {Object} [formatOpts=DateTime.DATE_SHORT] - Either a DateTime preset or\n * Intl.DateTimeFormat constructor options.\n * @param {Object} opts - Options to override the configuration of the start DateTime.\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(); //=> 11/7/2022 – 11/8/2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL); //=> November 7 – 8, 2022\n * @example Interval.fromISO('2022-11-07T09:00Z/2022-11-08T09:00Z').toLocaleString(DateTime.DATE_FULL, { locale: 'fr-FR' }); //=> 7–8 novembre 2022\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString(DateTime.TIME_SIMPLE); //=> 6:00 – 8:00 PM\n * @example Interval.fromISO('2022-11-07T17:00Z/2022-11-07T19:00Z').toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> Mon, Nov 07, 6:00 – 8:00 p\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.s.loc.clone(opts), formatOpts).formatInterval(this)\n : INVALID;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this Interval.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISO(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISO(opts)}/${this.e.toISO(opts)}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of date of this Interval.\n * The time components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @return {string}\n */\n toISODate() {\n if (!this.isValid) return INVALID;\n return `${this.s.toISODate()}/${this.e.toISODate()}`;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of time of this Interval.\n * The date components are ignored.\n * @see https://en.wikipedia.org/wiki/ISO_8601#Time_intervals\n * @param {Object} opts - The same options as {@link DateTime#toISO}\n * @return {string}\n */\n toISOTime(opts) {\n if (!this.isValid) return INVALID;\n return `${this.s.toISOTime(opts)}/${this.e.toISOTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this Interval formatted according to the specified format\n * string. **You may not want this.** See {@link Interval#toLocaleString} for a more flexible\n * formatting tool.\n * @param {string} dateFormat - The format string. This string formats the start and end time.\n * See {@link DateTime#toFormat} for details.\n * @param {Object} opts - Options.\n * @param {string} [opts.separator = ' – '] - A separator to place between the start and end\n * representations.\n * @return {string}\n */\n toFormat(dateFormat, { separator = \" – \" } = {}) {\n if (!this.isValid) return INVALID;\n return `${this.s.toFormat(dateFormat)}${separator}${this.e.toFormat(dateFormat)}`;\n }\n\n /**\n * Return a Duration representing the time spanned by this interval.\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example Interval.fromDateTimes(dt1, dt2).toDuration().toObject() //=> { milliseconds: 88489257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('days').toObject() //=> { days: 1.0241812152777778 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes']).toObject() //=> { hours: 24, minutes: 34.82095 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration(['hours', 'minutes', 'seconds']).toObject() //=> { hours: 24, minutes: 34, seconds: 49.257 }\n * @example Interval.fromDateTimes(dt1, dt2).toDuration('seconds').toObject() //=> { seconds: 88489.257 }\n * @return {Duration}\n */\n toDuration(unit, opts) {\n if (!this.isValid) {\n return Duration.invalid(this.invalidReason);\n }\n return this.e.diff(this.s, unit, opts);\n }\n\n /**\n * Run mapFn on the interval start and end, returning a new Interval from the resulting DateTimes\n * @param {function} mapFn\n * @return {Interval}\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.toUTC())\n * @example Interval.fromDateTimes(dt1, dt2).mapEndpoints(endpoint => endpoint.plus({ hours: 2 }))\n */\n mapEndpoints(mapFn) {\n return Interval.fromDateTimes(mapFn(this.s), mapFn(this.e));\n }\n}\n","import DateTime from \"./datetime.js\";\nimport Settings from \"./settings.js\";\nimport Locale from \"./impl/locale.js\";\nimport IANAZone from \"./zones/IANAZone.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\n\nimport { hasLocaleWeekInfo, hasRelative } from \"./impl/util.js\";\n\n/**\n * The Info class contains static methods for retrieving general time and date related data. For example, it has methods for finding out if a time zone has a DST, for listing the months in any supported locale, and for discovering which of Luxon features are available in the current environment.\n */\nexport default class Info {\n /**\n * Return whether the specified zone contains a DST.\n * @param {string|Zone} [zone='local'] - Zone to check. Defaults to the environment's local zone.\n * @return {boolean}\n */\n static hasDST(zone = Settings.defaultZone) {\n const proto = DateTime.now().setZone(zone).set({ month: 12 });\n\n return !zone.isUniversal && proto.offset !== proto.set({ month: 6 }).offset;\n }\n\n /**\n * Return whether the specified zone is a valid IANA specifier.\n * @param {string} zone - Zone to check\n * @return {boolean}\n */\n static isValidIANAZone(zone) {\n return IANAZone.isValidZone(zone);\n }\n\n /**\n * Converts the input into a {@link Zone} instance.\n *\n * * If `input` is already a Zone instance, it is returned unchanged.\n * * If `input` is a string containing a valid time zone name, a Zone instance\n * with that name is returned.\n * * If `input` is a string that doesn't refer to a known time zone, a Zone\n * instance with {@link Zone#isValid} == false is returned.\n * * If `input is a number, a Zone instance with the specified fixed offset\n * in minutes is returned.\n * * If `input` is `null` or `undefined`, the default zone is returned.\n * @param {string|Zone|number} [input] - the value to be converted\n * @return {Zone}\n */\n static normalizeZone(input) {\n return normalizeZone(input, Settings.defaultZone);\n }\n\n /**\n * Get the weekday on which the week starts according to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number} the start of the week, 1 for Monday through 7 for Sunday\n */\n static getStartOfWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getStartOfWeek();\n }\n\n /**\n * Get the minimum number of days necessary in a week before it is considered part of the next year according\n * to the given locale.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number}\n */\n static getMinimumDaysInFirstWeek({ locale = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale)).getMinDaysInFirstWeek();\n }\n\n /**\n * Get the weekdays, which are considered the weekend according to the given locale\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @returns {number[]} an array of weekdays, 1 for Monday through 7 for Sunday\n */\n static getWeekendWeekdays({ locale = null, locObj = null } = {}) {\n // copy the array, because we cache it internally\n return (locObj || Locale.create(locale)).getWeekendDays().slice();\n }\n\n /**\n * Return an array of standalone month names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @example Info.months()[0] //=> 'January'\n * @example Info.months('short')[0] //=> 'Jan'\n * @example Info.months('numeric')[0] //=> '1'\n * @example Info.months('short', { locale: 'fr-CA' } )[0] //=> 'janv.'\n * @example Info.months('numeric', { locale: 'ar' })[0] //=> '١'\n * @example Info.months('long', { outputCalendar: 'islamic' })[0] //=> 'Rabiʻ I'\n * @return {Array}\n */\n static months(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length);\n }\n\n /**\n * Return an array of format month names.\n * Format months differ from standalone months in that they're meant to appear next to the day of the month. In some languages, that\n * changes the string.\n * See {@link Info#months}\n * @param {string} [length='long'] - the length of the month representation, such as \"numeric\", \"2-digit\", \"narrow\", \"short\", \"long\"\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @param {string} [opts.outputCalendar='gregory'] - the calendar\n * @return {Array}\n */\n static monthsFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null, outputCalendar = \"gregory\" } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, outputCalendar)).months(length, true);\n }\n\n /**\n * Return an array of standalone week names.\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param {string} [length='long'] - the length of the weekday representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @example Info.weekdays()[0] //=> 'Monday'\n * @example Info.weekdays('short')[0] //=> 'Mon'\n * @example Info.weekdays('short', { locale: 'fr-CA' })[0] //=> 'lun.'\n * @example Info.weekdays('short', { locale: 'ar' })[0] //=> 'الاثنين'\n * @return {Array}\n */\n static weekdays(length = \"long\", { locale = null, numberingSystem = null, locObj = null } = {}) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length);\n }\n\n /**\n * Return an array of format week names.\n * Format weekdays differ from standalone weekdays in that they're meant to appear next to more date information. In some languages, that\n * changes the string.\n * See {@link Info#weekdays}\n * @param {string} [length='long'] - the length of the month representation, such as \"narrow\", \"short\", \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale=null] - the locale code\n * @param {string} [opts.numberingSystem=null] - the numbering system\n * @param {string} [opts.locObj=null] - an existing locale object to use\n * @return {Array}\n */\n static weekdaysFormat(\n length = \"long\",\n { locale = null, numberingSystem = null, locObj = null } = {}\n ) {\n return (locObj || Locale.create(locale, numberingSystem, null)).weekdays(length, true);\n }\n\n /**\n * Return an array of meridiems.\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.meridiems() //=> [ 'AM', 'PM' ]\n * @example Info.meridiems({ locale: 'my' }) //=> [ 'နံနက်', 'ညနေ' ]\n * @return {Array}\n */\n static meridiems({ locale = null } = {}) {\n return Locale.create(locale).meridiems();\n }\n\n /**\n * Return an array of eras, such as ['BC', 'AD']. The locale can be specified, but the calendar system is always Gregorian.\n * @param {string} [length='short'] - the length of the era representation, such as \"short\" or \"long\".\n * @param {Object} opts - options\n * @param {string} [opts.locale] - the locale code\n * @example Info.eras() //=> [ 'BC', 'AD' ]\n * @example Info.eras('long') //=> [ 'Before Christ', 'Anno Domini' ]\n * @example Info.eras('long', { locale: 'fr' }) //=> [ 'avant Jésus-Christ', 'après Jésus-Christ' ]\n * @return {Array}\n */\n static eras(length = \"short\", { locale = null } = {}) {\n return Locale.create(locale, null, \"gregory\").eras(length);\n }\n\n /**\n * Return the set of available features in this environment.\n * Some features of Luxon are not available in all environments. For example, on older browsers, relative time formatting support is not available. Use this function to figure out if that's the case.\n * Keys:\n * * `relative`: whether this environment supports relative time formatting\n * * `localeWeek`: whether this environment supports different weekdays for the start of the week based on the locale\n * @example Info.features() //=> { relative: false, localeWeek: true }\n * @return {Object}\n */\n static features() {\n return { relative: hasRelative(), localeWeek: hasLocaleWeekInfo() };\n }\n}\n","import Duration from \"../duration.js\";\n\nfunction dayDiff(earlier, later) {\n const utcDayStart = (dt) => dt.toUTC(0, { keepLocalTime: true }).startOf(\"day\").valueOf(),\n ms = utcDayStart(later) - utcDayStart(earlier);\n return Math.floor(Duration.fromMillis(ms).as(\"days\"));\n}\n\nfunction highOrderDiffs(cursor, later, units) {\n const differs = [\n [\"years\", (a, b) => b.year - a.year],\n [\"quarters\", (a, b) => b.quarter - a.quarter + (b.year - a.year) * 4],\n [\"months\", (a, b) => b.month - a.month + (b.year - a.year) * 12],\n [\n \"weeks\",\n (a, b) => {\n const days = dayDiff(a, b);\n return (days - (days % 7)) / 7;\n },\n ],\n [\"days\", dayDiff],\n ];\n\n const results = {};\n const earlier = cursor;\n let lowestOrder, highWater;\n\n /* This loop tries to diff using larger units first.\n If we overshoot, we backtrack and try the next smaller unit.\n \"cursor\" starts out at the earlier timestamp and moves closer and closer to \"later\"\n as we use smaller and smaller units.\n highWater keeps track of where we would be if we added one more of the smallest unit,\n this is used later to potentially convert any difference smaller than the smallest higher order unit\n into a fraction of that smallest higher order unit\n */\n for (const [unit, differ] of differs) {\n if (units.indexOf(unit) >= 0) {\n lowestOrder = unit;\n\n results[unit] = differ(cursor, later);\n highWater = earlier.plus(results);\n\n if (highWater > later) {\n // we overshot the end point, backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n\n // if we are still overshooting now, we need to backtrack again\n // this happens in certain situations when diffing times in different zones,\n // because this calculation ignores time zones\n if (cursor > later) {\n // keep the \"overshot by 1\" around as highWater\n highWater = cursor;\n // backtrack cursor by 1\n results[unit]--;\n cursor = earlier.plus(results);\n }\n } else {\n cursor = highWater;\n }\n }\n }\n\n return [cursor, results, highWater, lowestOrder];\n}\n\nexport default function (earlier, later, units, opts) {\n let [cursor, results, highWater, lowestOrder] = highOrderDiffs(earlier, later, units);\n\n const remainingMillis = later - cursor;\n\n const lowerOrderUnits = units.filter(\n (u) => [\"hours\", \"minutes\", \"seconds\", \"milliseconds\"].indexOf(u) >= 0\n );\n\n if (lowerOrderUnits.length === 0) {\n if (highWater < later) {\n highWater = cursor.plus({ [lowestOrder]: 1 });\n }\n\n if (highWater !== cursor) {\n results[lowestOrder] = (results[lowestOrder] || 0) + remainingMillis / (highWater - cursor);\n }\n }\n\n const duration = Duration.fromObject(results, opts);\n\n if (lowerOrderUnits.length > 0) {\n return Duration.fromMillis(remainingMillis, opts)\n .shiftTo(...lowerOrderUnits)\n .plus(duration);\n } else {\n return duration;\n }\n}\n","import { parseMillis, isUndefined, untruncateYear, signedOffset, hasOwnProperty } from \"./util.js\";\nimport Formatter from \"./formatter.js\";\nimport FixedOffsetZone from \"../zones/fixedOffsetZone.js\";\nimport IANAZone from \"../zones/IANAZone.js\";\nimport DateTime from \"../datetime.js\";\nimport { digitRegex, parseDigits } from \"./digits.js\";\nimport { ConflictingSpecificationError } from \"../errors.js\";\n\nconst MISSING_FTP = \"missing Intl.DateTimeFormat.formatToParts support\";\n\nfunction intUnit(regex, post = (i) => i) {\n return { regex, deser: ([s]) => post(parseDigits(s)) };\n}\n\nconst NBSP = String.fromCharCode(160);\nconst spaceOrNBSP = `[ ${NBSP}]`;\nconst spaceOrNBSPRegExp = new RegExp(spaceOrNBSP, \"g\");\n\nfunction fixListRegex(s) {\n // make dots optional and also make them literal\n // make space and non breakable space characters interchangeable\n return s.replace(/\\./g, \"\\\\.?\").replace(spaceOrNBSPRegExp, spaceOrNBSP);\n}\n\nfunction stripInsensitivities(s) {\n return s\n .replace(/\\./g, \"\") // ignore dots that were made optional\n .replace(spaceOrNBSPRegExp, \" \") // interchange space and nbsp\n .toLowerCase();\n}\n\nfunction oneOf(strings, startIndex) {\n if (strings === null) {\n return null;\n } else {\n return {\n regex: RegExp(strings.map(fixListRegex).join(\"|\")),\n deser: ([s]) =>\n strings.findIndex((i) => stripInsensitivities(s) === stripInsensitivities(i)) + startIndex,\n };\n }\n}\n\nfunction offset(regex, groups) {\n return { regex, deser: ([, h, m]) => signedOffset(h, m), groups };\n}\n\nfunction simple(regex) {\n return { regex, deser: ([s]) => s };\n}\n\nfunction escapeToken(value) {\n return value.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, \"\\\\$&\");\n}\n\n/**\n * @param token\n * @param {Locale} loc\n */\nfunction unitForToken(token, loc) {\n const one = digitRegex(loc),\n two = digitRegex(loc, \"{2}\"),\n three = digitRegex(loc, \"{3}\"),\n four = digitRegex(loc, \"{4}\"),\n six = digitRegex(loc, \"{6}\"),\n oneOrTwo = digitRegex(loc, \"{1,2}\"),\n oneToThree = digitRegex(loc, \"{1,3}\"),\n oneToSix = digitRegex(loc, \"{1,6}\"),\n oneToNine = digitRegex(loc, \"{1,9}\"),\n twoToFour = digitRegex(loc, \"{2,4}\"),\n fourToSix = digitRegex(loc, \"{4,6}\"),\n literal = (t) => ({ regex: RegExp(escapeToken(t.val)), deser: ([s]) => s, literal: true }),\n unitate = (t) => {\n if (token.literal) {\n return literal(t);\n }\n switch (t.val) {\n // era\n case \"G\":\n return oneOf(loc.eras(\"short\"), 0);\n case \"GG\":\n return oneOf(loc.eras(\"long\"), 0);\n // years\n case \"y\":\n return intUnit(oneToSix);\n case \"yy\":\n return intUnit(twoToFour, untruncateYear);\n case \"yyyy\":\n return intUnit(four);\n case \"yyyyy\":\n return intUnit(fourToSix);\n case \"yyyyyy\":\n return intUnit(six);\n // months\n case \"M\":\n return intUnit(oneOrTwo);\n case \"MM\":\n return intUnit(two);\n case \"MMM\":\n return oneOf(loc.months(\"short\", true), 1);\n case \"MMMM\":\n return oneOf(loc.months(\"long\", true), 1);\n case \"L\":\n return intUnit(oneOrTwo);\n case \"LL\":\n return intUnit(two);\n case \"LLL\":\n return oneOf(loc.months(\"short\", false), 1);\n case \"LLLL\":\n return oneOf(loc.months(\"long\", false), 1);\n // dates\n case \"d\":\n return intUnit(oneOrTwo);\n case \"dd\":\n return intUnit(two);\n // ordinals\n case \"o\":\n return intUnit(oneToThree);\n case \"ooo\":\n return intUnit(three);\n // time\n case \"HH\":\n return intUnit(two);\n case \"H\":\n return intUnit(oneOrTwo);\n case \"hh\":\n return intUnit(two);\n case \"h\":\n return intUnit(oneOrTwo);\n case \"mm\":\n return intUnit(two);\n case \"m\":\n return intUnit(oneOrTwo);\n case \"q\":\n return intUnit(oneOrTwo);\n case \"qq\":\n return intUnit(two);\n case \"s\":\n return intUnit(oneOrTwo);\n case \"ss\":\n return intUnit(two);\n case \"S\":\n return intUnit(oneToThree);\n case \"SSS\":\n return intUnit(three);\n case \"u\":\n return simple(oneToNine);\n case \"uu\":\n return simple(oneOrTwo);\n case \"uuu\":\n return intUnit(one);\n // meridiem\n case \"a\":\n return oneOf(loc.meridiems(), 0);\n // weekYear (k)\n case \"kkkk\":\n return intUnit(four);\n case \"kk\":\n return intUnit(twoToFour, untruncateYear);\n // weekNumber (W)\n case \"W\":\n return intUnit(oneOrTwo);\n case \"WW\":\n return intUnit(two);\n // weekdays\n case \"E\":\n case \"c\":\n return intUnit(one);\n case \"EEE\":\n return oneOf(loc.weekdays(\"short\", false), 1);\n case \"EEEE\":\n return oneOf(loc.weekdays(\"long\", false), 1);\n case \"ccc\":\n return oneOf(loc.weekdays(\"short\", true), 1);\n case \"cccc\":\n return oneOf(loc.weekdays(\"long\", true), 1);\n // offset/zone\n case \"Z\":\n case \"ZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(?::(${two.source}))?`), 2);\n case \"ZZZ\":\n return offset(new RegExp(`([+-]${oneOrTwo.source})(${two.source})?`), 2);\n // we don't support ZZZZ (PST) or ZZZZZ (Pacific Standard Time) in parsing\n // because we don't have any way to figure out what they are\n case \"z\":\n return simple(/[a-z_+-/]{1,256}?/i);\n // this special-case \"token\" represents a place where a macro-token expanded into a white-space literal\n // in this case we accept any non-newline white-space\n case \" \":\n return simple(/[^\\S\\n\\r]/);\n default:\n return literal(t);\n }\n };\n\n const unit = unitate(token) || {\n invalidReason: MISSING_FTP,\n };\n\n unit.token = token;\n\n return unit;\n}\n\nconst partTypeStyleToTokenVal = {\n year: {\n \"2-digit\": \"yy\",\n numeric: \"yyyyy\",\n },\n month: {\n numeric: \"M\",\n \"2-digit\": \"MM\",\n short: \"MMM\",\n long: \"MMMM\",\n },\n day: {\n numeric: \"d\",\n \"2-digit\": \"dd\",\n },\n weekday: {\n short: \"EEE\",\n long: \"EEEE\",\n },\n dayperiod: \"a\",\n dayPeriod: \"a\",\n hour12: {\n numeric: \"h\",\n \"2-digit\": \"hh\",\n },\n hour24: {\n numeric: \"H\",\n \"2-digit\": \"HH\",\n },\n minute: {\n numeric: \"m\",\n \"2-digit\": \"mm\",\n },\n second: {\n numeric: \"s\",\n \"2-digit\": \"ss\",\n },\n timeZoneName: {\n long: \"ZZZZZ\",\n short: \"ZZZ\",\n },\n};\n\nfunction tokenForPart(part, formatOpts, resolvedOpts) {\n const { type, value } = part;\n\n if (type === \"literal\") {\n const isSpace = /^\\s+$/.test(value);\n return {\n literal: !isSpace,\n val: isSpace ? \" \" : value,\n };\n }\n\n const style = formatOpts[type];\n\n // The user might have explicitly specified hour12 or hourCycle\n // if so, respect their decision\n // if not, refer back to the resolvedOpts, which are based on the locale\n let actualType = type;\n if (type === \"hour\") {\n if (formatOpts.hour12 != null) {\n actualType = formatOpts.hour12 ? \"hour12\" : \"hour24\";\n } else if (formatOpts.hourCycle != null) {\n if (formatOpts.hourCycle === \"h11\" || formatOpts.hourCycle === \"h12\") {\n actualType = \"hour12\";\n } else {\n actualType = \"hour24\";\n }\n } else {\n // tokens only differentiate between 24 hours or not,\n // so we do not need to check hourCycle here, which is less supported anyways\n actualType = resolvedOpts.hour12 ? \"hour12\" : \"hour24\";\n }\n }\n let val = partTypeStyleToTokenVal[actualType];\n if (typeof val === \"object\") {\n val = val[style];\n }\n\n if (val) {\n return {\n literal: false,\n val,\n };\n }\n\n return undefined;\n}\n\nfunction buildRegex(units) {\n const re = units.map((u) => u.regex).reduce((f, r) => `${f}(${r.source})`, \"\");\n return [`^${re}$`, units];\n}\n\nfunction match(input, regex, handlers) {\n const matches = input.match(regex);\n\n if (matches) {\n const all = {};\n let matchIndex = 1;\n for (const i in handlers) {\n if (hasOwnProperty(handlers, i)) {\n const h = handlers[i],\n groups = h.groups ? h.groups + 1 : 1;\n if (!h.literal && h.token) {\n all[h.token.val[0]] = h.deser(matches.slice(matchIndex, matchIndex + groups));\n }\n matchIndex += groups;\n }\n }\n return [matches, all];\n } else {\n return [matches, {}];\n }\n}\n\nfunction dateTimeFromMatches(matches) {\n const toField = (token) => {\n switch (token) {\n case \"S\":\n return \"millisecond\";\n case \"s\":\n return \"second\";\n case \"m\":\n return \"minute\";\n case \"h\":\n case \"H\":\n return \"hour\";\n case \"d\":\n return \"day\";\n case \"o\":\n return \"ordinal\";\n case \"L\":\n case \"M\":\n return \"month\";\n case \"y\":\n return \"year\";\n case \"E\":\n case \"c\":\n return \"weekday\";\n case \"W\":\n return \"weekNumber\";\n case \"k\":\n return \"weekYear\";\n case \"q\":\n return \"quarter\";\n default:\n return null;\n }\n };\n\n let zone = null;\n let specificOffset;\n if (!isUndefined(matches.z)) {\n zone = IANAZone.create(matches.z);\n }\n\n if (!isUndefined(matches.Z)) {\n if (!zone) {\n zone = new FixedOffsetZone(matches.Z);\n }\n specificOffset = matches.Z;\n }\n\n if (!isUndefined(matches.q)) {\n matches.M = (matches.q - 1) * 3 + 1;\n }\n\n if (!isUndefined(matches.h)) {\n if (matches.h < 12 && matches.a === 1) {\n matches.h += 12;\n } else if (matches.h === 12 && matches.a === 0) {\n matches.h = 0;\n }\n }\n\n if (matches.G === 0 && matches.y) {\n matches.y = -matches.y;\n }\n\n if (!isUndefined(matches.u)) {\n matches.S = parseMillis(matches.u);\n }\n\n const vals = Object.keys(matches).reduce((r, k) => {\n const f = toField(k);\n if (f) {\n r[f] = matches[k];\n }\n\n return r;\n }, {});\n\n return [vals, zone, specificOffset];\n}\n\nlet dummyDateTimeCache = null;\n\nfunction getDummyDateTime() {\n if (!dummyDateTimeCache) {\n dummyDateTimeCache = DateTime.fromMillis(1555555555555);\n }\n\n return dummyDateTimeCache;\n}\n\nfunction maybeExpandMacroToken(token, locale) {\n if (token.literal) {\n return token;\n }\n\n const formatOpts = Formatter.macroTokenToFormatOpts(token.val);\n const tokens = formatOptsToTokens(formatOpts, locale);\n\n if (tokens == null || tokens.includes(undefined)) {\n return token;\n }\n\n return tokens;\n}\n\nexport function expandMacroTokens(tokens, locale) {\n return Array.prototype.concat(...tokens.map((t) => maybeExpandMacroToken(t, locale)));\n}\n\n/**\n * @private\n */\n\nexport class TokenParser {\n constructor(locale, format) {\n this.locale = locale;\n this.format = format;\n this.tokens = expandMacroTokens(Formatter.parseFormat(format), locale);\n this.units = this.tokens.map((t) => unitForToken(t, locale));\n this.disqualifyingUnit = this.units.find((t) => t.invalidReason);\n\n if (!this.disqualifyingUnit) {\n const [regexString, handlers] = buildRegex(this.units);\n this.regex = RegExp(regexString, \"i\");\n this.handlers = handlers;\n }\n }\n\n explainFromTokens(input) {\n if (!this.isValid) {\n return { input, tokens: this.tokens, invalidReason: this.invalidReason };\n } else {\n const [rawMatches, matches] = match(input, this.regex, this.handlers),\n [result, zone, specificOffset] = matches\n ? dateTimeFromMatches(matches)\n : [null, null, undefined];\n if (hasOwnProperty(matches, \"a\") && hasOwnProperty(matches, \"H\")) {\n throw new ConflictingSpecificationError(\n \"Can't include meridiem when specifying 24-hour format\"\n );\n }\n return {\n input,\n tokens: this.tokens,\n regex: this.regex,\n rawMatches,\n matches,\n result,\n zone,\n specificOffset,\n };\n }\n }\n\n get isValid() {\n return !this.disqualifyingUnit;\n }\n\n get invalidReason() {\n return this.disqualifyingUnit ? this.disqualifyingUnit.invalidReason : null;\n }\n}\n\nexport function explainFromTokens(locale, input, format) {\n const parser = new TokenParser(locale, format);\n return parser.explainFromTokens(input);\n}\n\nexport function parseFromTokens(locale, input, format) {\n const { result, zone, specificOffset, invalidReason } = explainFromTokens(locale, input, format);\n return [result, zone, specificOffset, invalidReason];\n}\n\nexport function formatOptsToTokens(formatOpts, locale) {\n if (!formatOpts) {\n return null;\n }\n\n const formatter = Formatter.create(locale, formatOpts);\n const df = formatter.dtFormatter(getDummyDateTime());\n const parts = df.formatToParts();\n const resolvedOpts = df.resolvedOptions();\n return parts.map((p) => tokenForPart(p, formatOpts, resolvedOpts));\n}\n","import Duration from \"./duration.js\";\nimport Interval from \"./interval.js\";\nimport Settings from \"./settings.js\";\nimport Info from \"./info.js\";\nimport Formatter from \"./impl/formatter.js\";\nimport FixedOffsetZone from \"./zones/fixedOffsetZone.js\";\nimport Locale from \"./impl/locale.js\";\nimport {\n isUndefined,\n maybeArray,\n isDate,\n isNumber,\n bestBy,\n daysInMonth,\n daysInYear,\n isLeapYear,\n weeksInWeekYear,\n normalizeObject,\n roundTo,\n objToLocalTS,\n padStart,\n} from \"./impl/util.js\";\nimport { normalizeZone } from \"./impl/zoneUtil.js\";\nimport diff from \"./impl/diff.js\";\nimport { parseRFC2822Date, parseISODate, parseHTTPDate, parseSQL } from \"./impl/regexParser.js\";\nimport {\n parseFromTokens,\n explainFromTokens,\n formatOptsToTokens,\n expandMacroTokens,\n TokenParser,\n} from \"./impl/tokenParser.js\";\nimport {\n gregorianToWeek,\n weekToGregorian,\n gregorianToOrdinal,\n ordinalToGregorian,\n hasInvalidGregorianData,\n hasInvalidWeekData,\n hasInvalidOrdinalData,\n hasInvalidTimeData,\n usesLocalWeekValues,\n isoWeekdayToLocal,\n} from \"./impl/conversions.js\";\nimport * as Formats from \"./impl/formats.js\";\nimport {\n InvalidArgumentError,\n ConflictingSpecificationError,\n InvalidUnitError,\n InvalidDateTimeError,\n} from \"./errors.js\";\nimport Invalid from \"./impl/invalid.js\";\n\nconst INVALID = \"Invalid DateTime\";\nconst MAX_DATE = 8.64e15;\n\nfunction unsupportedZone(zone) {\n return new Invalid(\"unsupported zone\", `the zone \"${zone.name}\" is not supported`);\n}\n\n// we cache week data on the DT object and this intermediates the cache\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedWeekData(dt) {\n if (dt.weekData === null) {\n dt.weekData = gregorianToWeek(dt.c);\n }\n return dt.weekData;\n}\n\n/**\n * @param {DateTime} dt\n */\nfunction possiblyCachedLocalWeekData(dt) {\n if (dt.localWeekData === null) {\n dt.localWeekData = gregorianToWeek(\n dt.c,\n dt.loc.getMinDaysInFirstWeek(),\n dt.loc.getStartOfWeek()\n );\n }\n return dt.localWeekData;\n}\n\n// clone really means, \"make a new object with these modifications\". all \"setters\" really use this\n// to create a new object while only changing some of the properties\nfunction clone(inst, alts) {\n const current = {\n ts: inst.ts,\n zone: inst.zone,\n c: inst.c,\n o: inst.o,\n loc: inst.loc,\n invalid: inst.invalid,\n };\n return new DateTime({ ...current, ...alts, old: current });\n}\n\n// find the right offset a given local time. The o input is our guess, which determines which\n// offset we'll pick in ambiguous cases (e.g. there are two 3 AMs b/c Fallback DST)\nfunction fixOffset(localTS, o, tz) {\n // Our UTC time is just a guess because our offset is just a guess\n let utcGuess = localTS - o * 60 * 1000;\n\n // Test whether the zone matches the offset for this ts\n const o2 = tz.offset(utcGuess);\n\n // If so, offset didn't change and we're done\n if (o === o2) {\n return [utcGuess, o];\n }\n\n // If not, change the ts by the difference in the offset\n utcGuess -= (o2 - o) * 60 * 1000;\n\n // If that gives us the local time we want, we're done\n const o3 = tz.offset(utcGuess);\n if (o2 === o3) {\n return [utcGuess, o2];\n }\n\n // If it's different, we're in a hole time. The offset has changed, but the we don't adjust the time\n return [localTS - Math.min(o2, o3) * 60 * 1000, Math.max(o2, o3)];\n}\n\n// convert an epoch timestamp into a calendar object with the given offset\nfunction tsToObj(ts, offset) {\n ts += offset * 60 * 1000;\n\n const d = new Date(ts);\n\n return {\n year: d.getUTCFullYear(),\n month: d.getUTCMonth() + 1,\n day: d.getUTCDate(),\n hour: d.getUTCHours(),\n minute: d.getUTCMinutes(),\n second: d.getUTCSeconds(),\n millisecond: d.getUTCMilliseconds(),\n };\n}\n\n// convert a calendar object to a epoch timestamp\nfunction objToTS(obj, offset, zone) {\n return fixOffset(objToLocalTS(obj), offset, zone);\n}\n\n// create a new DT instance by adding a duration, adjusting for DSTs\nfunction adjustTime(inst, dur) {\n const oPre = inst.o,\n year = inst.c.year + Math.trunc(dur.years),\n month = inst.c.month + Math.trunc(dur.months) + Math.trunc(dur.quarters) * 3,\n c = {\n ...inst.c,\n year,\n month,\n day:\n Math.min(inst.c.day, daysInMonth(year, month)) +\n Math.trunc(dur.days) +\n Math.trunc(dur.weeks) * 7,\n },\n millisToAdd = Duration.fromObject({\n years: dur.years - Math.trunc(dur.years),\n quarters: dur.quarters - Math.trunc(dur.quarters),\n months: dur.months - Math.trunc(dur.months),\n weeks: dur.weeks - Math.trunc(dur.weeks),\n days: dur.days - Math.trunc(dur.days),\n hours: dur.hours,\n minutes: dur.minutes,\n seconds: dur.seconds,\n milliseconds: dur.milliseconds,\n }).as(\"milliseconds\"),\n localTS = objToLocalTS(c);\n\n let [ts, o] = fixOffset(localTS, oPre, inst.zone);\n\n if (millisToAdd !== 0) {\n ts += millisToAdd;\n // that could have changed the offset by going over a DST, but we want to keep the ts the same\n o = inst.zone.offset(ts);\n }\n\n return { ts, o };\n}\n\n// helper useful in turning the results of parsing into real dates\n// by handling the zone options\nfunction parseDataToDateTime(parsed, parsedZone, opts, format, text, specificOffset) {\n const { setZone, zone } = opts;\n if ((parsed && Object.keys(parsed).length !== 0) || parsedZone) {\n const interpretationZone = parsedZone || zone,\n inst = DateTime.fromObject(parsed, {\n ...opts,\n zone: interpretationZone,\n specificOffset,\n });\n return setZone ? inst : inst.setZone(zone);\n } else {\n return DateTime.invalid(\n new Invalid(\"unparsable\", `the input \"${text}\" can't be parsed as ${format}`)\n );\n }\n}\n\n// if you want to output a technical format (e.g. RFC 2822), this helper\n// helps handle the details\nfunction toTechFormat(dt, format, allowZ = true) {\n return dt.isValid\n ? Formatter.create(Locale.create(\"en-US\"), {\n allowZ,\n forceSimple: true,\n }).formatDateTimeFromString(dt, format)\n : null;\n}\n\nfunction toISODate(o, extended, precision) {\n const longFormat = o.c.year > 9999 || o.c.year < 0;\n let c = \"\";\n if (longFormat && o.c.year >= 0) c += \"+\";\n c += padStart(o.c.year, longFormat ? 6 : 4);\n if (precision === \"year\") return c;\n if (extended) {\n c += \"-\";\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n c += \"-\";\n } else {\n c += padStart(o.c.month);\n if (precision === \"month\") return c;\n }\n c += padStart(o.c.day);\n return c;\n}\n\nfunction toISOTime(\n o,\n extended,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n) {\n let showSeconds = !suppressSeconds || o.c.millisecond !== 0 || o.c.second !== 0,\n c = \"\";\n switch (precision) {\n case \"day\":\n case \"month\":\n case \"year\":\n break;\n default:\n c += padStart(o.c.hour);\n if (precision === \"hour\") break;\n if (extended) {\n c += \":\";\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += \":\";\n c += padStart(o.c.second);\n }\n } else {\n c += padStart(o.c.minute);\n if (precision === \"minute\") break;\n if (showSeconds) {\n c += padStart(o.c.second);\n }\n }\n if (precision === \"second\") break;\n if (showSeconds && (!suppressMilliseconds || o.c.millisecond !== 0)) {\n c += \".\";\n c += padStart(o.c.millisecond, 3);\n }\n }\n\n if (includeOffset) {\n if (o.isOffsetFixed && o.offset === 0 && !extendedZone) {\n c += \"Z\";\n } else if (o.o < 0) {\n c += \"-\";\n c += padStart(Math.trunc(-o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(-o.o % 60));\n } else {\n c += \"+\";\n c += padStart(Math.trunc(o.o / 60));\n c += \":\";\n c += padStart(Math.trunc(o.o % 60));\n }\n }\n\n if (extendedZone) {\n c += \"[\" + o.zone.ianaName + \"]\";\n }\n return c;\n}\n\n// defaults for unspecified units in the supported calendars\nconst defaultUnitValues = {\n month: 1,\n day: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultWeekUnitValues = {\n weekNumber: 1,\n weekday: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n },\n defaultOrdinalUnitValues = {\n ordinal: 1,\n hour: 0,\n minute: 0,\n second: 0,\n millisecond: 0,\n };\n\n// Units in the supported calendars, sorted by bigness\nconst orderedUnits = [\"year\", \"month\", \"day\", \"hour\", \"minute\", \"second\", \"millisecond\"],\n orderedWeekUnits = [\n \"weekYear\",\n \"weekNumber\",\n \"weekday\",\n \"hour\",\n \"minute\",\n \"second\",\n \"millisecond\",\n ],\n orderedOrdinalUnits = [\"year\", \"ordinal\", \"hour\", \"minute\", \"second\", \"millisecond\"];\n\n// standardize case and plurality in units\nfunction normalizeUnit(unit) {\n const normalized = {\n year: \"year\",\n years: \"year\",\n month: \"month\",\n months: \"month\",\n day: \"day\",\n days: \"day\",\n hour: \"hour\",\n hours: \"hour\",\n minute: \"minute\",\n minutes: \"minute\",\n quarter: \"quarter\",\n quarters: \"quarter\",\n second: \"second\",\n seconds: \"second\",\n millisecond: \"millisecond\",\n milliseconds: \"millisecond\",\n weekday: \"weekday\",\n weekdays: \"weekday\",\n weeknumber: \"weekNumber\",\n weeksnumber: \"weekNumber\",\n weeknumbers: \"weekNumber\",\n weekyear: \"weekYear\",\n weekyears: \"weekYear\",\n ordinal: \"ordinal\",\n }[unit.toLowerCase()];\n\n if (!normalized) throw new InvalidUnitError(unit);\n\n return normalized;\n}\n\nfunction normalizeUnitWithLocalWeeks(unit) {\n switch (unit.toLowerCase()) {\n case \"localweekday\":\n case \"localweekdays\":\n return \"localWeekday\";\n case \"localweeknumber\":\n case \"localweeknumbers\":\n return \"localWeekNumber\";\n case \"localweekyear\":\n case \"localweekyears\":\n return \"localWeekYear\";\n default:\n return normalizeUnit(unit);\n }\n}\n\n// cache offsets for zones based on the current timestamp when this function is\n// first called. When we are handling a datetime from components like (year,\n// month, day, hour) in a time zone, we need a guess about what the timezone\n// offset is so that we can convert into a UTC timestamp. One way is to find the\n// offset of now in the zone. The actual date may have a different offset (for\n// example, if we handle a date in June while we're in December in a zone that\n// observes DST), but we can check and adjust that.\n//\n// When handling many dates, calculating the offset for now every time is\n// expensive. It's just a guess, so we can cache the offset to use even if we\n// are right on a time change boundary (we'll just correct in the other\n// direction). Using a timestamp from first read is a slight optimization for\n// handling dates close to the current date, since those dates will usually be\n// in the same offset (we could set the timestamp statically, instead). We use a\n// single timestamp for all zones to make things a bit more predictable.\n//\n// This is safe for quickDT (used by local() and utc()) because we don't fill in\n// higher-order units from tsNow (as we do in fromObject, this requires that\n// offset is calculated from tsNow).\n/**\n * @param {Zone} zone\n * @return {number}\n */\nfunction guessOffsetForZone(zone) {\n if (zoneOffsetTs === undefined) {\n zoneOffsetTs = Settings.now();\n }\n\n // Do not cache anything but IANA zones, because it is not safe to do so.\n // Guessing an offset which is not present in the zone can cause wrong results from fixOffset\n if (zone.type !== \"iana\") {\n return zone.offset(zoneOffsetTs);\n }\n const zoneName = zone.name;\n let offsetGuess = zoneOffsetGuessCache.get(zoneName);\n if (offsetGuess === undefined) {\n offsetGuess = zone.offset(zoneOffsetTs);\n zoneOffsetGuessCache.set(zoneName, offsetGuess);\n }\n return offsetGuess;\n}\n\n// this is a dumbed down version of fromObject() that runs about 60% faster\n// but doesn't do any validation, makes a bunch of assumptions about what units\n// are present, and so on.\nfunction quickDT(obj, opts) {\n const zone = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n }\n\n const loc = Locale.fromObject(opts);\n\n let ts, o;\n\n // assume we have the higher-order units\n if (!isUndefined(obj.year)) {\n for (const u of orderedUnits) {\n if (isUndefined(obj[u])) {\n obj[u] = defaultUnitValues[u];\n }\n }\n\n const invalid = hasInvalidGregorianData(obj) || hasInvalidTimeData(obj);\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n const offsetProvis = guessOffsetForZone(zone);\n [ts, o] = objToTS(obj, offsetProvis, zone);\n } else {\n ts = Settings.now();\n }\n\n return new DateTime({ ts, zone, loc, o });\n}\n\nfunction diffRelative(start, end, opts) {\n const round = isUndefined(opts.round) ? true : opts.round,\n rounding = isUndefined(opts.rounding) ? \"trunc\" : opts.rounding,\n format = (c, unit) => {\n c = roundTo(c, round || opts.calendary ? 0 : 2, opts.calendary ? \"round\" : rounding);\n const formatter = end.loc.clone(opts).relFormatter(opts);\n return formatter.format(c, unit);\n },\n differ = (unit) => {\n if (opts.calendary) {\n if (!end.hasSame(start, unit)) {\n return end.startOf(unit).diff(start.startOf(unit), unit).get(unit);\n } else return 0;\n } else {\n return end.diff(start, unit).get(unit);\n }\n };\n\n if (opts.unit) {\n return format(differ(opts.unit), opts.unit);\n }\n\n for (const unit of opts.units) {\n const count = differ(unit);\n if (Math.abs(count) >= 1) {\n return format(count, unit);\n }\n }\n return format(start > end ? -0 : 0, opts.units[opts.units.length - 1]);\n}\n\nfunction lastOpts(argList) {\n let opts = {},\n args;\n if (argList.length > 0 && typeof argList[argList.length - 1] === \"object\") {\n opts = argList[argList.length - 1];\n args = Array.from(argList).slice(0, argList.length - 1);\n } else {\n args = Array.from(argList);\n }\n return [opts, args];\n}\n\n/**\n * Timestamp to use for cached zone offset guesses (exposed for test)\n */\nlet zoneOffsetTs;\n/**\n * Cache for zone offset guesses (exposed for test).\n *\n * This optimizes quickDT via guessOffsetForZone to avoid repeated calls of\n * zone.offset().\n */\nconst zoneOffsetGuessCache = new Map();\n\n/**\n * A DateTime is an immutable data structure representing a specific date and time and accompanying methods. It contains class and instance methods for creating, parsing, interrogating, transforming, and formatting them.\n *\n * A DateTime comprises of:\n * * A timestamp. Each DateTime instance refers to a specific millisecond of the Unix epoch.\n * * A time zone. Each instance is considered in the context of a specific zone (by default the local system's zone).\n * * Configuration properties that effect how output strings are formatted, such as `locale`, `numberingSystem`, and `outputCalendar`.\n *\n * Here is a brief overview of the most commonly used functionality it provides:\n *\n * * **Creation**: To create a DateTime from its components, use one of its factory class methods: {@link DateTime.local}, {@link DateTime.utc}, and (most flexibly) {@link DateTime.fromObject}. To create one from a standard string format, use {@link DateTime.fromISO}, {@link DateTime.fromHTTP}, and {@link DateTime.fromRFC2822}. To create one from a custom string format, use {@link DateTime.fromFormat}. To create one from a native JS date, use {@link DateTime.fromJSDate}.\n * * **Gregorian calendar and time**: To examine the Gregorian properties of a DateTime individually (i.e as opposed to collectively through {@link DateTime#toObject}), use the {@link DateTime#year}, {@link DateTime#month},\n * {@link DateTime#day}, {@link DateTime#hour}, {@link DateTime#minute}, {@link DateTime#second}, {@link DateTime#millisecond} accessors.\n * * **Week calendar**: For ISO week calendar attributes, see the {@link DateTime#weekYear}, {@link DateTime#weekNumber}, and {@link DateTime#weekday} accessors.\n * * **Configuration** See the {@link DateTime#locale} and {@link DateTime#numberingSystem} accessors.\n * * **Transformation**: To transform the DateTime into other DateTimes, use {@link DateTime#set}, {@link DateTime#reconfigure}, {@link DateTime#setZone}, {@link DateTime#setLocale}, {@link DateTime.plus}, {@link DateTime#minus}, {@link DateTime#endOf}, {@link DateTime#startOf}, {@link DateTime#toUTC}, and {@link DateTime#toLocal}.\n * * **Output**: To convert the DateTime to other representations, use the {@link DateTime#toRelative}, {@link DateTime#toRelativeCalendar}, {@link DateTime#toJSON}, {@link DateTime#toISO}, {@link DateTime#toHTTP}, {@link DateTime#toObject}, {@link DateTime#toRFC2822}, {@link DateTime#toString}, {@link DateTime#toLocaleString}, {@link DateTime#toFormat}, {@link DateTime#toMillis} and {@link DateTime#toJSDate}.\n *\n * There's plenty others documented below. In addition, for more information on subtler topics like internationalization, time zones, alternative calendars, validity, and so on, see the external documentation.\n */\nexport default class DateTime {\n /**\n * @access private\n */\n constructor(config) {\n const zone = config.zone || Settings.defaultZone;\n\n let invalid =\n config.invalid ||\n (Number.isNaN(config.ts) ? new Invalid(\"invalid input\") : null) ||\n (!zone.isValid ? unsupportedZone(zone) : null);\n /**\n * @access private\n */\n this.ts = isUndefined(config.ts) ? Settings.now() : config.ts;\n\n let c = null,\n o = null;\n if (!invalid) {\n const unchanged = config.old && config.old.ts === this.ts && config.old.zone.equals(zone);\n\n if (unchanged) {\n [c, o] = [config.old.c, config.old.o];\n } else {\n // If an offset has been passed and we have not been called from\n // clone(), we can trust it and avoid the offset calculation.\n const ot = isNumber(config.o) && !config.old ? config.o : zone.offset(this.ts);\n c = tsToObj(this.ts, ot);\n invalid = Number.isNaN(c.year) ? new Invalid(\"invalid input\") : null;\n c = invalid ? null : c;\n o = invalid ? null : ot;\n }\n }\n\n /**\n * @access private\n */\n this._zone = zone;\n /**\n * @access private\n */\n this.loc = config.loc || Locale.create();\n /**\n * @access private\n */\n this.invalid = invalid;\n /**\n * @access private\n */\n this.weekData = null;\n /**\n * @access private\n */\n this.localWeekData = null;\n /**\n * @access private\n */\n this.c = c;\n /**\n * @access private\n */\n this.o = o;\n /**\n * @access private\n */\n this.isLuxonDateTime = true;\n }\n\n // CONSTRUCT\n\n /**\n * Create a DateTime for the current instant, in the system's time zone.\n *\n * Use Settings to override these default values if needed.\n * @example DateTime.now().toISO() //~> now in the ISO format\n * @return {DateTime}\n */\n static now() {\n return new DateTime({});\n }\n\n /**\n * Create a local DateTime\n * @param {number} [year] - The calendar year. If omitted (as in, call `local()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month, 1-indexed\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @example DateTime.local() //~> now\n * @example DateTime.local({ zone: \"America/New_York\" }) //~> now, in US east coast time\n * @example DateTime.local(2017) //~> 2017-01-01T00:00:00\n * @example DateTime.local(2017, 3) //~> 2017-03-01T00:00:00\n * @example DateTime.local(2017, 3, 12, { locale: \"fr\" }) //~> 2017-03-12T00:00:00, with a French locale\n * @example DateTime.local(2017, 3, 12, 5) //~> 2017-03-12T05:00:00\n * @example DateTime.local(2017, 3, 12, 5, { zone: \"utc\" }) //~> 2017-03-12T05:00:00, in UTC\n * @example DateTime.local(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00\n * @example DateTime.local(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10\n * @example DateTime.local(2017, 3, 12, 5, 45, 10, 765) //~> 2017-03-12T05:45:10.765\n * @return {DateTime}\n */\n static local() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime in UTC\n * @param {number} [year] - The calendar year. If omitted (as in, call `utc()` with no arguments), the current time will be used\n * @param {number} [month=1] - The month, 1-indexed\n * @param {number} [day=1] - The day of the month\n * @param {number} [hour=0] - The hour of the day, in 24-hour time\n * @param {number} [minute=0] - The minute of the hour, meaning a number between 0 and 59\n * @param {number} [second=0] - The second of the minute, meaning a number between 0 and 59\n * @param {number} [millisecond=0] - The millisecond of the second, meaning a number between 0 and 999\n * @param {Object} options - configuration options for the DateTime\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} [options.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [options.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [options.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.utc() //~> now\n * @example DateTime.utc(2017) //~> 2017-01-01T00:00:00Z\n * @example DateTime.utc(2017, 3) //~> 2017-03-01T00:00:00Z\n * @example DateTime.utc(2017, 3, 12) //~> 2017-03-12T00:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5) //~> 2017-03-12T05:00:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45) //~> 2017-03-12T05:45:00Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, { locale: \"fr\" }) //~> 2017-03-12T05:45:00Z with a French locale\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10) //~> 2017-03-12T05:45:10Z\n * @example DateTime.utc(2017, 3, 12, 5, 45, 10, 765, { locale: \"fr\" }) //~> 2017-03-12T05:45:10.765Z with a French locale\n * @return {DateTime}\n */\n static utc() {\n const [opts, args] = lastOpts(arguments),\n [year, month, day, hour, minute, second, millisecond] = args;\n\n opts.zone = FixedOffsetZone.utcInstance;\n return quickDT({ year, month, day, hour, minute, second, millisecond }, opts);\n }\n\n /**\n * Create a DateTime from a JavaScript Date object. Uses the default zone.\n * @param {Date} date - a JavaScript Date object\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @return {DateTime}\n */\n static fromJSDate(date, options = {}) {\n const ts = isDate(date) ? date.valueOf() : NaN;\n if (Number.isNaN(ts)) {\n return DateTime.invalid(\"invalid input\");\n }\n\n const zoneToUse = normalizeZone(options.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n return new DateTime({\n ts: ts,\n zone: zoneToUse,\n loc: Locale.fromObject(options),\n });\n }\n\n /**\n * Create a DateTime from a number of milliseconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} milliseconds - a number of milliseconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromMillis(milliseconds, options = {}) {\n if (!isNumber(milliseconds)) {\n throw new InvalidArgumentError(\n `fromMillis requires a numerical input, but received a ${typeof milliseconds} with value ${milliseconds}`\n );\n } else if (milliseconds < -MAX_DATE || milliseconds > MAX_DATE) {\n // this isn't perfect because we can still end up out of range because of additional shifting, but it's a start\n return DateTime.invalid(\"Timestamp out of range\");\n } else {\n return new DateTime({\n ts: milliseconds,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a number of seconds since the epoch (meaning since 1 January 1970 00:00:00 UTC). Uses the default zone.\n * @param {number} seconds - a number of seconds since 1970 UTC\n * @param {Object} options - configuration options for the DateTime\n * @param {string|Zone} [options.zone='local'] - the zone to place the DateTime into\n * @param {string} [options.locale] - a locale to set on the resulting DateTime instance\n * @param {string} options.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} options.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} options.weekSettings - the week settings to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromSeconds(seconds, options = {}) {\n if (!isNumber(seconds)) {\n throw new InvalidArgumentError(\"fromSeconds requires a numerical input\");\n } else {\n return new DateTime({\n ts: seconds * 1000,\n zone: normalizeZone(options.zone, Settings.defaultZone),\n loc: Locale.fromObject(options),\n });\n }\n }\n\n /**\n * Create a DateTime from a JavaScript object with keys like 'year' and 'hour' with reasonable defaults.\n * @param {Object} obj - the object to create the DateTime from\n * @param {number} obj.year - a year, such as 1987\n * @param {number} obj.month - a month, 1-12\n * @param {number} obj.day - a day of the month, 1-31, depending on the month\n * @param {number} obj.ordinal - day of the year, 1-365 or 366\n * @param {number} obj.weekYear - an ISO week year\n * @param {number} obj.weekNumber - an ISO week number, between 1 and 52 or 53, depending on the year\n * @param {number} obj.weekday - an ISO weekday, 1-7, where 1 is Monday and 7 is Sunday\n * @param {number} obj.localWeekYear - a week year, according to the locale\n * @param {number} obj.localWeekNumber - a week number, between 1 and 52 or 53, depending on the year, according to the locale\n * @param {number} obj.localWeekday - a weekday, 1-7, where 1 is the first and 7 is the last day of the week, according to the locale\n * @param {number} obj.hour - hour of the day, 0-23\n * @param {number} obj.minute - minute of the hour, 0-59\n * @param {number} obj.second - second of the minute, 0-59\n * @param {number} obj.millisecond - millisecond of the second, 0-999\n * @param {Object} opts - options for creating this DateTime\n * @param {string|Zone} [opts.zone='local'] - interpret the numbers in the context of a particular zone. Can take any value taken as the first argument to setZone()\n * @param {string} [opts.locale='system\\'s locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromObject({ year: 1982, month: 5, day: 25}).toISODate() //=> '1982-05-25'\n * @example DateTime.fromObject({ year: 1982 }).toISODate() //=> '1982-01-01'\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }) //~> today at 10:26:06\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'utc' }),\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'local' })\n * @example DateTime.fromObject({ hour: 10, minute: 26, second: 6 }, { zone: 'America/New_York' })\n * @example DateTime.fromObject({ weekYear: 2016, weekNumber: 2, weekday: 3 }).toISODate() //=> '2016-01-13'\n * @example DateTime.fromObject({ localWeekYear: 2022, localWeekNumber: 1, localWeekday: 1 }, { locale: \"en-US\" }).toISODate() //=> '2021-12-26'\n * @return {DateTime}\n */\n static fromObject(obj, opts = {}) {\n obj = obj || {};\n const zoneToUse = normalizeZone(opts.zone, Settings.defaultZone);\n if (!zoneToUse.isValid) {\n return DateTime.invalid(unsupportedZone(zoneToUse));\n }\n\n const loc = Locale.fromObject(opts);\n const normalized = normalizeObject(obj, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, loc);\n\n const tsNow = Settings.now(),\n offsetProvis = !isUndefined(opts.specificOffset)\n ? opts.specificOffset\n : zoneToUse.offset(tsNow),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n // cases:\n // just a weekday -> this week's instance of that weekday, no worries\n // (gregorian data or ordinal) + (weekYear or weekNumber) -> error\n // (gregorian month or day) + ordinal -> error\n // otherwise just use weeks or ordinals or gregorian, depending on what's specified\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n const useWeekData = definiteWeekDef || (normalized.weekday && !containsGregor);\n\n // configure ourselves to deal with gregorian dates or week stuff\n let units,\n defaultValues,\n objNow = tsToObj(tsNow, offsetProvis);\n if (useWeekData) {\n units = orderedWeekUnits;\n defaultValues = defaultWeekUnitValues;\n objNow = gregorianToWeek(objNow, minDaysInFirstWeek, startOfWeek);\n } else if (containsOrdinal) {\n units = orderedOrdinalUnits;\n defaultValues = defaultOrdinalUnitValues;\n objNow = gregorianToOrdinal(objNow);\n } else {\n units = orderedUnits;\n defaultValues = defaultUnitValues;\n }\n\n // set default values for missing stuff\n let foundFirst = false;\n for (const u of units) {\n const v = normalized[u];\n if (!isUndefined(v)) {\n foundFirst = true;\n } else if (foundFirst) {\n normalized[u] = defaultValues[u];\n } else {\n normalized[u] = objNow[u];\n }\n }\n\n // make sure the values we have are in range\n const higherOrderInvalid = useWeekData\n ? hasInvalidWeekData(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? hasInvalidOrdinalData(normalized)\n : hasInvalidGregorianData(normalized),\n invalid = higherOrderInvalid || hasInvalidTimeData(normalized);\n\n if (invalid) {\n return DateTime.invalid(invalid);\n }\n\n // compute the actual time\n const gregorian = useWeekData\n ? weekToGregorian(normalized, minDaysInFirstWeek, startOfWeek)\n : containsOrdinal\n ? ordinalToGregorian(normalized)\n : normalized,\n [tsFinal, offsetFinal] = objToTS(gregorian, offsetProvis, zoneToUse),\n inst = new DateTime({\n ts: tsFinal,\n zone: zoneToUse,\n o: offsetFinal,\n loc,\n });\n\n // gregorian data + weekday serves only to validate\n if (normalized.weekday && containsGregor && obj.weekday !== inst.weekday) {\n return DateTime.invalid(\n \"mismatched weekday\",\n `you can't specify both a weekday of ${normalized.weekday} and a date of ${inst.toISO()}`\n );\n }\n\n if (!inst.isValid) {\n return DateTime.invalid(inst.invalid);\n }\n\n return inst;\n }\n\n /**\n * Create a DateTime from an ISO 8601 string\n * @param {string} text - the ISO string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the time to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} [opts.outputCalendar] - the output calendar to set on the resulting DateTime instance\n * @param {string} [opts.numberingSystem] - the numbering system to set on the resulting DateTime instance\n * @param {string} [opts.weekSettings] - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromISO('2016-05-25T09:08:34.123')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00')\n * @example DateTime.fromISO('2016-05-25T09:08:34.123+06:00', {setZone: true})\n * @example DateTime.fromISO('2016-05-25T09:08:34.123', {zone: 'utc'})\n * @example DateTime.fromISO('2016-W05-4')\n * @return {DateTime}\n */\n static fromISO(text, opts = {}) {\n const [vals, parsedZone] = parseISODate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"ISO 8601\", text);\n }\n\n /**\n * Create a DateTime from an RFC 2822 string\n * @param {string} text - the RFC 2822 string\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since the offset is always specified in the string itself, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with a fixed-offset zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23:12 GMT')\n * @example DateTime.fromRFC2822('Fri, 25 Nov 2016 13:23:12 +0600')\n * @example DateTime.fromRFC2822('25 Nov 2016 13:23 Z')\n * @return {DateTime}\n */\n static fromRFC2822(text, opts = {}) {\n const [vals, parsedZone] = parseRFC2822Date(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"RFC 2822\", text);\n }\n\n /**\n * Create a DateTime from an HTTP header date\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @param {string} text - the HTTP header date\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - convert the time to this zone. Since HTTP dates are always in UTC, this has no effect on the interpretation of string, merely the zone the resulting DateTime is expressed in.\n * @param {boolean} [opts.setZone=false] - override the zone with the fixed-offset zone specified in the string. For HTTP dates, this is always UTC, so this option is equivalent to setting the `zone` option to 'utc', but this option is included for consistency with similar methods.\n * @param {string} [opts.locale='system's locale'] - a locale to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @param {string} opts.numberingSystem - the numbering system to set on the resulting DateTime instance\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @example DateTime.fromHTTP('Sun, 06 Nov 1994 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sunday, 06-Nov-94 08:49:37 GMT')\n * @example DateTime.fromHTTP('Sun Nov 6 08:49:37 1994')\n * @return {DateTime}\n */\n static fromHTTP(text, opts = {}) {\n const [vals, parsedZone] = parseHTTPDate(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"HTTP\", opts);\n }\n\n /**\n * Create a DateTime from an input string and format string.\n * Defaults to en-US if no locale has been specified, regardless of the system's locale. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/parsing?id=table-of-tokens).\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see the link below for the formats)\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @return {DateTime}\n */\n static fromFormat(text, fmt, opts = {}) {\n if (isUndefined(text) || isUndefined(fmt)) {\n throw new InvalidArgumentError(\"fromFormat requires an input string and a format\");\n }\n\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n }),\n [vals, parsedZone, specificOffset, invalid] = parseFromTokens(localeToUse, text, fmt);\n if (invalid) {\n return DateTime.invalid(invalid);\n } else {\n return parseDataToDateTime(vals, parsedZone, opts, `format ${fmt}`, text, specificOffset);\n }\n }\n\n /**\n * @deprecated use fromFormat instead\n */\n static fromString(text, fmt, opts = {}) {\n return DateTime.fromFormat(text, fmt, opts);\n }\n\n /**\n * Create a DateTime from a SQL date, time, or datetime\n * Defaults to en-US if no locale has been specified, regardless of the system's locale\n * @param {string} text - the string to parse\n * @param {Object} opts - options to affect the creation\n * @param {string|Zone} [opts.zone='local'] - use this zone if no offset is specified in the input string itself. Will also convert the DateTime to this zone\n * @param {boolean} [opts.setZone=false] - override the zone with a zone specified in the string itself, if it specifies one\n * @param {string} [opts.locale='en-US'] - a locale string to use when parsing. Will also set the DateTime to this locale\n * @param {string} opts.numberingSystem - the numbering system to use when parsing. Will also set the resulting DateTime to this numbering system\n * @param {string} opts.weekSettings - the week settings to set on the resulting DateTime instance\n * @param {string} opts.outputCalendar - the output calendar to set on the resulting DateTime instance\n * @example DateTime.fromSQL('2017-05-15')\n * @example DateTime.fromSQL('2017-05-15 09:12:34')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342+06:00')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles')\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342 America/Los_Angeles', { setZone: true })\n * @example DateTime.fromSQL('2017-05-15 09:12:34.342', { zone: 'America/Los_Angeles' })\n * @example DateTime.fromSQL('09:12:34.342')\n * @return {DateTime}\n */\n static fromSQL(text, opts = {}) {\n const [vals, parsedZone] = parseSQL(text);\n return parseDataToDateTime(vals, parsedZone, opts, \"SQL\", text);\n }\n\n /**\n * Create an invalid DateTime.\n * @param {string} reason - simple string of why this DateTime is invalid. Should not contain parameters or anything else data-dependent.\n * @param {string} [explanation=null] - longer explanation, may include parameters and other useful debugging information\n * @return {DateTime}\n */\n static invalid(reason, explanation = null) {\n if (!reason) {\n throw new InvalidArgumentError(\"need to specify a reason the DateTime is invalid\");\n }\n\n const invalid = reason instanceof Invalid ? reason : new Invalid(reason, explanation);\n\n if (Settings.throwOnInvalid) {\n throw new InvalidDateTimeError(invalid);\n } else {\n return new DateTime({ invalid });\n }\n }\n\n /**\n * Check if an object is an instance of DateTime. Works across context boundaries\n * @param {object} o\n * @return {boolean}\n */\n static isDateTime(o) {\n return (o && o.isLuxonDateTime) || false;\n }\n\n /**\n * Produce the format string for a set of options\n * @param formatOpts\n * @param localeOpts\n * @returns {string}\n */\n static parseFormatForOpts(formatOpts, localeOpts = {}) {\n const tokenList = formatOptsToTokens(formatOpts, Locale.fromObject(localeOpts));\n return !tokenList ? null : tokenList.map((t) => (t ? t.val : null)).join(\"\");\n }\n\n /**\n * Produce the the fully expanded format token for the locale\n * Does NOT quote characters, so quoted tokens will not round trip correctly\n * @param fmt\n * @param localeOpts\n * @returns {string}\n */\n static expandFormat(fmt, localeOpts = {}) {\n const expanded = expandMacroTokens(Formatter.parseFormat(fmt), Locale.fromObject(localeOpts));\n return expanded.map((t) => t.val).join(\"\");\n }\n\n static resetCache() {\n zoneOffsetTs = undefined;\n zoneOffsetGuessCache.clear();\n }\n\n // INFO\n\n /**\n * Get the value of unit.\n * @param {string} unit - a unit such as 'minute' or 'day'\n * @example DateTime.local(2017, 7, 4).get('month'); //=> 7\n * @example DateTime.local(2017, 7, 4).get('day'); //=> 4\n * @return {number}\n */\n get(unit) {\n return this[unit];\n }\n\n /**\n * Returns whether the DateTime is valid. Invalid DateTimes occur when:\n * * The DateTime was created from invalid calendar information, such as the 13th month or February 30\n * * The DateTime was created by an operation on another invalid date\n * @type {boolean}\n */\n get isValid() {\n return this.invalid === null;\n }\n\n /**\n * Returns an error code if this DateTime is invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidReason() {\n return this.invalid ? this.invalid.reason : null;\n }\n\n /**\n * Returns an explanation of why this DateTime became invalid, or null if the DateTime is valid\n * @type {string}\n */\n get invalidExplanation() {\n return this.invalid ? this.invalid.explanation : null;\n }\n\n /**\n * Get the locale of a DateTime, such 'en-GB'. The locale is used when formatting the DateTime\n *\n * @type {string}\n */\n get locale() {\n return this.isValid ? this.loc.locale : null;\n }\n\n /**\n * Get the numbering system of a DateTime, such 'beng'. The numbering system is used when formatting the DateTime\n *\n * @type {string}\n */\n get numberingSystem() {\n return this.isValid ? this.loc.numberingSystem : null;\n }\n\n /**\n * Get the output calendar of a DateTime, such 'islamic'. The output calendar is used when formatting the DateTime\n *\n * @type {string}\n */\n get outputCalendar() {\n return this.isValid ? this.loc.outputCalendar : null;\n }\n\n /**\n * Get the time zone associated with this DateTime.\n * @type {Zone}\n */\n get zone() {\n return this._zone;\n }\n\n /**\n * Get the name of the time zone.\n * @type {string}\n */\n get zoneName() {\n return this.isValid ? this.zone.name : null;\n }\n\n /**\n * Get the year\n * @example DateTime.local(2017, 5, 25).year //=> 2017\n * @type {number}\n */\n get year() {\n return this.isValid ? this.c.year : NaN;\n }\n\n /**\n * Get the quarter\n * @example DateTime.local(2017, 5, 25).quarter //=> 2\n * @type {number}\n */\n get quarter() {\n return this.isValid ? Math.ceil(this.c.month / 3) : NaN;\n }\n\n /**\n * Get the month (1-12).\n * @example DateTime.local(2017, 5, 25).month //=> 5\n * @type {number}\n */\n get month() {\n return this.isValid ? this.c.month : NaN;\n }\n\n /**\n * Get the day of the month (1-30ish).\n * @example DateTime.local(2017, 5, 25).day //=> 25\n * @type {number}\n */\n get day() {\n return this.isValid ? this.c.day : NaN;\n }\n\n /**\n * Get the hour of the day (0-23).\n * @example DateTime.local(2017, 5, 25, 9).hour //=> 9\n * @type {number}\n */\n get hour() {\n return this.isValid ? this.c.hour : NaN;\n }\n\n /**\n * Get the minute of the hour (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30).minute //=> 30\n * @type {number}\n */\n get minute() {\n return this.isValid ? this.c.minute : NaN;\n }\n\n /**\n * Get the second of the minute (0-59).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52).second //=> 52\n * @type {number}\n */\n get second() {\n return this.isValid ? this.c.second : NaN;\n }\n\n /**\n * Get the millisecond of the second (0-999).\n * @example DateTime.local(2017, 5, 25, 9, 30, 52, 654).millisecond //=> 654\n * @type {number}\n */\n get millisecond() {\n return this.isValid ? this.c.millisecond : NaN;\n }\n\n /**\n * Get the week year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 12, 31).weekYear //=> 2015\n * @type {number}\n */\n get weekYear() {\n return this.isValid ? possiblyCachedWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the week number of the week year (1-52ish).\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2017, 5, 25).weekNumber //=> 21\n * @type {number}\n */\n get weekNumber() {\n return this.isValid ? possiblyCachedWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the day of the week.\n * 1 is Monday and 7 is Sunday\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2014, 11, 31).weekday //=> 4\n * @type {number}\n */\n get weekday() {\n return this.isValid ? possiblyCachedWeekData(this).weekday : NaN;\n }\n\n /**\n * Returns true if this date is on a weekend according to the locale, false otherwise\n * @returns {boolean}\n */\n get isWeekend() {\n return this.isValid && this.loc.getWeekendDays().includes(this.weekday);\n }\n\n /**\n * Get the day of the week according to the locale.\n * 1 is the first day of the week and 7 is the last day of the week.\n * If the locale assigns Sunday as the first day of the week, then a date which is a Sunday will return 1,\n * @returns {number}\n */\n get localWeekday() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekday : NaN;\n }\n\n /**\n * Get the week number of the week year according to the locale. Different locales assign week numbers differently,\n * because the week can start on different days of the week (see localWeekday) and because a different number of days\n * is required for a week to count as the first week of a year.\n * @returns {number}\n */\n get localWeekNumber() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekNumber : NaN;\n }\n\n /**\n * Get the week year according to the locale. Different locales assign week numbers (and therefor week years)\n * differently, see localWeekNumber.\n * @returns {number}\n */\n get localWeekYear() {\n return this.isValid ? possiblyCachedLocalWeekData(this).weekYear : NaN;\n }\n\n /**\n * Get the ordinal (meaning the day of the year)\n * @example DateTime.local(2017, 5, 25).ordinal //=> 145\n * @type {number|DateTime}\n */\n get ordinal() {\n return this.isValid ? gregorianToOrdinal(this.c).ordinal : NaN;\n }\n\n /**\n * Get the human readable short month name, such as 'Oct'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthShort //=> Oct\n * @type {string}\n */\n get monthShort() {\n return this.isValid ? Info.months(\"short\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable long month name, such as 'October'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).monthLong //=> October\n * @type {string}\n */\n get monthLong() {\n return this.isValid ? Info.months(\"long\", { locObj: this.loc })[this.month - 1] : null;\n }\n\n /**\n * Get the human readable short weekday, such as 'Mon'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayShort //=> Mon\n * @type {string}\n */\n get weekdayShort() {\n return this.isValid ? Info.weekdays(\"short\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the human readable long weekday, such as 'Monday'.\n * Defaults to the system's locale if no locale has been specified\n * @example DateTime.local(2017, 10, 30).weekdayLong //=> Monday\n * @type {string}\n */\n get weekdayLong() {\n return this.isValid ? Info.weekdays(\"long\", { locObj: this.loc })[this.weekday - 1] : null;\n }\n\n /**\n * Get the UTC offset of this DateTime in minutes\n * @example DateTime.now().offset //=> -240\n * @example DateTime.utc().offset //=> 0\n * @type {number}\n */\n get offset() {\n return this.isValid ? +this.o : NaN;\n }\n\n /**\n * Get the short human name for the zone's current offset, for example \"EST\" or \"EDT\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameShort() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"short\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get the long human name for the zone's current offset, for example \"Eastern Standard Time\" or \"Eastern Daylight Time\".\n * Defaults to the system's locale if no locale has been specified\n * @type {string}\n */\n get offsetNameLong() {\n if (this.isValid) {\n return this.zone.offsetName(this.ts, {\n format: \"long\",\n locale: this.locale,\n });\n } else {\n return null;\n }\n }\n\n /**\n * Get whether this zone's offset ever changes, as in a DST.\n * @type {boolean}\n */\n get isOffsetFixed() {\n return this.isValid ? this.zone.isUniversal : null;\n }\n\n /**\n * Get whether the DateTime is in a DST.\n * @type {boolean}\n */\n get isInDST() {\n if (this.isOffsetFixed) {\n return false;\n } else {\n return (\n this.offset > this.set({ month: 1, day: 1 }).offset ||\n this.offset > this.set({ month: 5 }).offset\n );\n }\n }\n\n /**\n * Get those DateTimes which have the same local time as this DateTime, but a different offset from UTC\n * in this DateTime's zone. During DST changes local time can be ambiguous, for example\n * `2023-10-29T02:30:00` in `Europe/Berlin` can have offset `+01:00` or `+02:00`.\n * This method will return both possible DateTimes if this DateTime's local time is ambiguous.\n * @returns {DateTime[]}\n */\n getPossibleOffsets() {\n if (!this.isValid || this.isOffsetFixed) {\n return [this];\n }\n const dayMs = 86400000;\n const minuteMs = 60000;\n const localTS = objToLocalTS(this.c);\n const oEarlier = this.zone.offset(localTS - dayMs);\n const oLater = this.zone.offset(localTS + dayMs);\n\n const o1 = this.zone.offset(localTS - oEarlier * minuteMs);\n const o2 = this.zone.offset(localTS - oLater * minuteMs);\n if (o1 === o2) {\n return [this];\n }\n const ts1 = localTS - o1 * minuteMs;\n const ts2 = localTS - o2 * minuteMs;\n const c1 = tsToObj(ts1, o1);\n const c2 = tsToObj(ts2, o2);\n if (\n c1.hour === c2.hour &&\n c1.minute === c2.minute &&\n c1.second === c2.second &&\n c1.millisecond === c2.millisecond\n ) {\n return [clone(this, { ts: ts1 }), clone(this, { ts: ts2 })];\n }\n return [this];\n }\n\n /**\n * Returns true if this DateTime is in a leap year, false otherwise\n * @example DateTime.local(2016).isInLeapYear //=> true\n * @example DateTime.local(2013).isInLeapYear //=> false\n * @type {boolean}\n */\n get isInLeapYear() {\n return isLeapYear(this.year);\n }\n\n /**\n * Returns the number of days in this DateTime's month\n * @example DateTime.local(2016, 2).daysInMonth //=> 29\n * @example DateTime.local(2016, 3).daysInMonth //=> 31\n * @type {number}\n */\n get daysInMonth() {\n return daysInMonth(this.year, this.month);\n }\n\n /**\n * Returns the number of days in this DateTime's year\n * @example DateTime.local(2016).daysInYear //=> 366\n * @example DateTime.local(2013).daysInYear //=> 365\n * @type {number}\n */\n get daysInYear() {\n return this.isValid ? daysInYear(this.year) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's year\n * @see https://en.wikipedia.org/wiki/ISO_week_date\n * @example DateTime.local(2004).weeksInWeekYear //=> 53\n * @example DateTime.local(2013).weeksInWeekYear //=> 52\n * @type {number}\n */\n get weeksInWeekYear() {\n return this.isValid ? weeksInWeekYear(this.weekYear) : NaN;\n }\n\n /**\n * Returns the number of weeks in this DateTime's local week year\n * @example DateTime.local(2020, 6, {locale: 'en-US'}).weeksInLocalWeekYear //=> 52\n * @example DateTime.local(2020, 6, {locale: 'de-DE'}).weeksInLocalWeekYear //=> 53\n * @type {number}\n */\n get weeksInLocalWeekYear() {\n return this.isValid\n ? weeksInWeekYear(\n this.localWeekYear,\n this.loc.getMinDaysInFirstWeek(),\n this.loc.getStartOfWeek()\n )\n : NaN;\n }\n\n /**\n * Returns the resolved Intl options for this DateTime.\n * This is useful in understanding the behavior of formatting methods\n * @param {Object} opts - the same options as toLocaleString\n * @return {Object}\n */\n resolvedLocaleOptions(opts = {}) {\n const { locale, numberingSystem, calendar } = Formatter.create(\n this.loc.clone(opts),\n opts\n ).resolvedOptions(this);\n return { locale, numberingSystem, outputCalendar: calendar };\n }\n\n // TRANSFORM\n\n /**\n * \"Set\" the DateTime's zone to UTC. Returns a newly-constructed DateTime.\n *\n * Equivalent to {@link DateTime#setZone}('utc')\n * @param {number} [offset=0] - optionally, an offset from UTC in minutes\n * @param {Object} [opts={}] - options to pass to `setZone()`\n * @return {DateTime}\n */\n toUTC(offset = 0, opts = {}) {\n return this.setZone(FixedOffsetZone.instance(offset), opts);\n }\n\n /**\n * \"Set\" the DateTime's zone to the host's local zone. Returns a newly-constructed DateTime.\n *\n * Equivalent to `setZone('local')`\n * @return {DateTime}\n */\n toLocal() {\n return this.setZone(Settings.defaultZone);\n }\n\n /**\n * \"Set\" the DateTime's zone to specified zone. Returns a newly-constructed DateTime.\n *\n * By default, the setter keeps the underlying time the same (as in, the same timestamp), but the new instance will report different local times and consider DSTs when making computations, as with {@link DateTime#plus}. You may wish to use {@link DateTime#toLocal} and {@link DateTime#toUTC} which provide simple convenience wrappers for commonly used zones.\n * @param {string|Zone} [zone='local'] - a zone identifier. As a string, that can be any IANA zone supported by the host environment, or a fixed-offset name of the form 'UTC+3', or the strings 'local' or 'utc'. You may also supply an instance of a {@link DateTime#Zone} class.\n * @param {Object} opts - options\n * @param {boolean} [opts.keepLocalTime=false] - If true, adjust the underlying time so that the local time stays the same, but in the target zone. You should rarely need this.\n * @return {DateTime}\n */\n setZone(zone, { keepLocalTime = false, keepCalendarTime = false } = {}) {\n zone = normalizeZone(zone, Settings.defaultZone);\n if (zone.equals(this.zone)) {\n return this;\n } else if (!zone.isValid) {\n return DateTime.invalid(unsupportedZone(zone));\n } else {\n let newTS = this.ts;\n if (keepLocalTime || keepCalendarTime) {\n const offsetGuess = zone.offset(this.ts);\n const asObj = this.toObject();\n [newTS] = objToTS(asObj, offsetGuess, zone);\n }\n return clone(this, { ts: newTS, zone });\n }\n }\n\n /**\n * \"Set\" the locale, numberingSystem, or outputCalendar. Returns a newly-constructed DateTime.\n * @param {Object} properties - the properties to set\n * @example DateTime.local(2017, 5, 25).reconfigure({ locale: 'en-GB' })\n * @return {DateTime}\n */\n reconfigure({ locale, numberingSystem, outputCalendar } = {}) {\n const loc = this.loc.clone({ locale, numberingSystem, outputCalendar });\n return clone(this, { loc });\n }\n\n /**\n * \"Set\" the locale. Returns a newly-constructed DateTime.\n * Just a convenient alias for reconfigure({ locale })\n * @example DateTime.local(2017, 5, 25).setLocale('en-GB')\n * @return {DateTime}\n */\n setLocale(locale) {\n return this.reconfigure({ locale });\n }\n\n /**\n * \"Set\" the values of specified units. Returns a newly-constructed DateTime.\n * You can only set units with this method; for \"setting\" metadata, see {@link DateTime#reconfigure} and {@link DateTime#setZone}.\n *\n * This method also supports setting locale-based week units, i.e. `localWeekday`, `localWeekNumber` and `localWeekYear`.\n * They cannot be mixed with ISO-week units like `weekday`.\n * @param {Object} values - a mapping of units to numbers\n * @example dt.set({ year: 2017 })\n * @example dt.set({ hour: 8, minute: 30 })\n * @example dt.set({ weekday: 5 })\n * @example dt.set({ year: 2005, ordinal: 234 })\n * @return {DateTime}\n */\n set(values) {\n if (!this.isValid) return this;\n\n const normalized = normalizeObject(values, normalizeUnitWithLocalWeeks);\n const { minDaysInFirstWeek, startOfWeek } = usesLocalWeekValues(normalized, this.loc);\n\n const settingWeekStuff =\n !isUndefined(normalized.weekYear) ||\n !isUndefined(normalized.weekNumber) ||\n !isUndefined(normalized.weekday),\n containsOrdinal = !isUndefined(normalized.ordinal),\n containsGregorYear = !isUndefined(normalized.year),\n containsGregorMD = !isUndefined(normalized.month) || !isUndefined(normalized.day),\n containsGregor = containsGregorYear || containsGregorMD,\n definiteWeekDef = normalized.weekYear || normalized.weekNumber;\n\n if ((containsGregor || containsOrdinal) && definiteWeekDef) {\n throw new ConflictingSpecificationError(\n \"Can't mix weekYear/weekNumber units with year/month/day or ordinals\"\n );\n }\n\n if (containsGregorMD && containsOrdinal) {\n throw new ConflictingSpecificationError(\"Can't mix ordinal dates with month/day\");\n }\n\n let mixed;\n if (settingWeekStuff) {\n mixed = weekToGregorian(\n { ...gregorianToWeek(this.c, minDaysInFirstWeek, startOfWeek), ...normalized },\n minDaysInFirstWeek,\n startOfWeek\n );\n } else if (!isUndefined(normalized.ordinal)) {\n mixed = ordinalToGregorian({ ...gregorianToOrdinal(this.c), ...normalized });\n } else {\n mixed = { ...this.toObject(), ...normalized };\n\n // if we didn't set the day but we ended up on an overflow date,\n // use the last day of the right month\n if (isUndefined(normalized.day)) {\n mixed.day = Math.min(daysInMonth(mixed.year, mixed.month), mixed.day);\n }\n }\n\n const [ts, o] = objToTS(mixed, this.o, this.zone);\n return clone(this, { ts, o });\n }\n\n /**\n * Add a period of time to this DateTime and return the resulting DateTime\n *\n * Adding hours, minutes, seconds, or milliseconds increases the timestamp by the right number of milliseconds. Adding days, months, or years shifts the calendar, accounting for DSTs and leap years along the way. Thus, `dt.plus({ hours: 24 })` may result in a different time than `dt.plus({ days: 1 })` if there's a DST shift in between.\n * @param {Duration|Object|number} duration - The amount to add. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n * @example DateTime.now().plus(123) //~> in 123 milliseconds\n * @example DateTime.now().plus({ minutes: 15 }) //~> in 15 minutes\n * @example DateTime.now().plus({ days: 1 }) //~> this time tomorrow\n * @example DateTime.now().plus({ days: -1 }) //~> this time yesterday\n * @example DateTime.now().plus({ hours: 3, minutes: 13 }) //~> in 3 hr, 13 min\n * @example DateTime.now().plus(Duration.fromObject({ hours: 3, minutes: 13 })) //~> in 3 hr, 13 min\n * @return {DateTime}\n */\n plus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration);\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * Subtract a period of time to this DateTime and return the resulting DateTime\n * See {@link DateTime#plus}\n * @param {Duration|Object|number} duration - The amount to subtract. Either a Luxon Duration, a number of milliseconds, the object argument to Duration.fromObject()\n @return {DateTime}\n */\n minus(duration) {\n if (!this.isValid) return this;\n const dur = Duration.fromDurationLike(duration).negate();\n return clone(this, adjustTime(this, dur));\n }\n\n /**\n * \"Set\" this DateTime to the beginning of a unit of time.\n * @param {string} unit - The unit to go to the beginning of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).startOf('month').toISODate(); //=> '2014-03-01'\n * @example DateTime.local(2014, 3, 3).startOf('year').toISODate(); //=> '2014-01-01'\n * @example DateTime.local(2014, 3, 3).startOf('week').toISODate(); //=> '2014-03-03', weeks always start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('day').toISOTime(); //=> '00:00.000-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).startOf('hour').toISOTime(); //=> '05:00:00.000-05:00'\n * @return {DateTime}\n */\n startOf(unit, { useLocaleWeeks = false } = {}) {\n if (!this.isValid) return this;\n\n const o = {},\n normalizedUnit = Duration.normalizeUnit(unit);\n switch (normalizedUnit) {\n case \"years\":\n o.month = 1;\n // falls through\n case \"quarters\":\n case \"months\":\n o.day = 1;\n // falls through\n case \"weeks\":\n case \"days\":\n o.hour = 0;\n // falls through\n case \"hours\":\n o.minute = 0;\n // falls through\n case \"minutes\":\n o.second = 0;\n // falls through\n case \"seconds\":\n o.millisecond = 0;\n break;\n case \"milliseconds\":\n break;\n // no default, invalid units throw in normalizeUnit()\n }\n\n if (normalizedUnit === \"weeks\") {\n if (useLocaleWeeks) {\n const startOfWeek = this.loc.getStartOfWeek();\n const { weekday } = this;\n if (weekday < startOfWeek) {\n o.weekNumber = this.weekNumber - 1;\n }\n o.weekday = startOfWeek;\n } else {\n o.weekday = 1;\n }\n }\n\n if (normalizedUnit === \"quarters\") {\n const q = Math.ceil(this.month / 3);\n o.month = (q - 1) * 3 + 1;\n }\n\n return this.set(o);\n }\n\n /**\n * \"Set\" this DateTime to the end (meaning the last millisecond) of a unit of time\n * @param {string} unit - The unit to go to the end of. Can be 'year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', or 'millisecond'.\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week\n * @example DateTime.local(2014, 3, 3).endOf('month').toISO(); //=> '2014-03-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('year').toISO(); //=> '2014-12-31T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3).endOf('week').toISO(); // => '2014-03-09T23:59:59.999-05:00', weeks start on Mondays\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('day').toISO(); //=> '2014-03-03T23:59:59.999-05:00'\n * @example DateTime.local(2014, 3, 3, 5, 30).endOf('hour').toISO(); //=> '2014-03-03T05:59:59.999-05:00'\n * @return {DateTime}\n */\n endOf(unit, opts) {\n return this.isValid\n ? this.plus({ [unit]: 1 })\n .startOf(unit, opts)\n .minus(1)\n : this;\n }\n\n // OUTPUT\n\n /**\n * Returns a string representation of this DateTime formatted according to the specified format string.\n * **You may not want this.** See {@link DateTime#toLocaleString} for a more flexible formatting tool. For a table of tokens and their interpretations, see [here](https://moment.github.io/luxon/#/formatting?id=table-of-tokens).\n * Defaults to en-US if no locale has been specified, regardless of the system's locale.\n * @param {string} fmt - the format string\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toFormat('yyyy LLL dd') //=> '2017 Apr 22'\n * @example DateTime.now().setLocale('fr').toFormat('yyyy LLL dd') //=> '2017 avr. 22'\n * @example DateTime.now().toFormat('yyyy LLL dd', { locale: \"fr\" }) //=> '2017 avr. 22'\n * @example DateTime.now().toFormat(\"HH 'hours and' mm 'minutes'\") //=> '20 hours and 55 minutes'\n * @return {string}\n */\n toFormat(fmt, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.redefaultToEN(opts)).formatDateTimeFromString(this, fmt)\n : INVALID;\n }\n\n /**\n * Returns a localized string representing this date. Accepts the same options as the Intl.DateTimeFormat constructor and any presets defined by Luxon, such as `DateTime.DATE_FULL` or `DateTime.TIME_SIMPLE`.\n * The exact behavior of this method is browser-specific, but in general it will return an appropriate representation\n * of the DateTime in the assigned locale.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat\n * @param formatOpts {Object} - Intl.DateTimeFormat constructor options and configuration options\n * @param {Object} opts - opts to override the configuration options on this DateTime\n * @example DateTime.now().toLocaleString(); //=> 4/20/2017\n * @example DateTime.now().setLocale('en-gb').toLocaleString(); //=> '20/04/2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL); //=> 'April 20, 2017'\n * @example DateTime.now().toLocaleString(DateTime.DATE_FULL, { locale: 'fr' }); //=> '28 août 2022'\n * @example DateTime.now().toLocaleString(DateTime.TIME_SIMPLE); //=> '11:32 AM'\n * @example DateTime.now().toLocaleString(DateTime.DATETIME_SHORT); //=> '4/20/2017, 11:32 AM'\n * @example DateTime.now().toLocaleString({ weekday: 'long', month: 'long', day: '2-digit' }); //=> 'Thursday, April 20'\n * @example DateTime.now().toLocaleString({ weekday: 'short', month: 'short', day: '2-digit', hour: '2-digit', minute: '2-digit' }); //=> 'Thu, Apr 20, 11:27 AM'\n * @example DateTime.now().toLocaleString({ hour: '2-digit', minute: '2-digit', hourCycle: 'h23' }); //=> '11:32'\n * @return {string}\n */\n toLocaleString(formatOpts = Formats.DATE_SHORT, opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), formatOpts).formatDateTime(this)\n : INVALID;\n }\n\n /**\n * Returns an array of format \"parts\", meaning individual tokens along with metadata. This is allows callers to post-process individual sections of the formatted output.\n * Defaults to the system's locale if no locale has been specified\n * @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DateTimeFormat/formatToParts\n * @param opts {Object} - Intl.DateTimeFormat constructor options, same as `toLocaleString`.\n * @example DateTime.now().toLocaleParts(); //=> [\n * //=> { type: 'day', value: '25' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'month', value: '05' },\n * //=> { type: 'literal', value: '/' },\n * //=> { type: 'year', value: '1982' }\n * //=> ]\n */\n toLocaleParts(opts = {}) {\n return this.isValid\n ? Formatter.create(this.loc.clone(opts), opts).formatDateTimeParts(this)\n : [];\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=false] - add the time zone format extension\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'years', 'months', 'days', 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc(1983, 5, 25).toISO() //=> '1982-05-25T00:00:00.000Z'\n * @example DateTime.now().toISO() //=> '2017-04-22T20:47:05.335-04:00'\n * @example DateTime.now().toISO({ includeOffset: false }) //=> '2017-04-22T20:47:05.335'\n * @example DateTime.now().toISO({ format: 'basic' }) //=> '20170422T204705.335-0400'\n * @example DateTime.now().toISO({ precision: 'day' }) //=> '2017-04-22Z'\n * @example DateTime.now().toISO({ precision: 'minute' }) //=> '2017-04-22T20:47Z'\n * @return {string|null}\n */\n toISO({\n format = \"extended\",\n suppressSeconds = false,\n suppressMilliseconds = false,\n includeOffset = true,\n extendedZone = false,\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n const ext = format === \"extended\";\n\n let c = toISODate(this, ext, precision);\n if (orderedUnits.indexOf(precision) >= 3) c += \"T\";\n c += toISOTime(\n this,\n ext,\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n );\n return c;\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's date component\n * @param {Object} opts - options\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='day'] - truncate output to desired precision: 'years', 'months', or 'days'.\n * @example DateTime.utc(1982, 5, 25).toISODate() //=> '1982-05-25'\n * @example DateTime.utc(1982, 5, 25).toISODate({ format: 'basic' }) //=> '19820525'\n * @example DateTime.utc(1982, 5, 25).toISODate({ precision: 'month' }) //=> '1982-05'\n * @return {string|null}\n */\n toISODate({ format = \"extended\", precision = \"day\" } = {}) {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, format === \"extended\", normalizeUnit(precision));\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's week date\n * @example DateTime.utc(1982, 5, 25).toISOWeekDate() //=> '1982-W21-2'\n * @return {string}\n */\n toISOWeekDate() {\n return toTechFormat(this, \"kkkk-'W'WW-c\");\n }\n\n /**\n * Returns an ISO 8601-compliant string representation of this DateTime's time component\n * @param {Object} opts - options\n * @param {boolean} [opts.suppressMilliseconds=false] - exclude milliseconds from the format if they're 0\n * @param {boolean} [opts.suppressSeconds=false] - exclude seconds from the format if they're 0\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.extendedZone=true] - add the time zone format extension\n * @param {boolean} [opts.includePrefix=false] - include the `T` prefix\n * @param {string} [opts.format='extended'] - choose between the basic and extended format\n * @param {string} [opts.precision='milliseconds'] - truncate output to desired presicion: 'hours', 'minutes', 'seconds' or 'milliseconds'. When precision and suppressSeconds or suppressMilliseconds are used together, precision sets the maximum unit shown in the output, however seconds or milliseconds will still be suppressed if they are 0.\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime() //=> '07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, seconds: 0, milliseconds: 0 }).toISOTime({ suppressSeconds: true }) //=> '07:34Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ format: 'basic' }) //=> '073419.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34 }).toISOTime({ includePrefix: true }) //=> 'T07:34:19.361Z'\n * @example DateTime.utc().set({ hour: 7, minute: 34, second: 56 }).toISOTime({ precision: 'minute' }) //=> '07:34Z'\n * @return {string}\n */\n toISOTime({\n suppressMilliseconds = false,\n suppressSeconds = false,\n includeOffset = true,\n includePrefix = false,\n extendedZone = false,\n format = \"extended\",\n precision = \"milliseconds\",\n } = {}) {\n if (!this.isValid) {\n return null;\n }\n\n precision = normalizeUnit(precision);\n let c = includePrefix && orderedUnits.indexOf(precision) >= 3 ? \"T\" : \"\";\n return (\n c +\n toISOTime(\n this,\n format === \"extended\",\n suppressSeconds,\n suppressMilliseconds,\n includeOffset,\n extendedZone,\n precision\n )\n );\n }\n\n /**\n * Returns an RFC 2822-compatible string representation of this DateTime\n * @example DateTime.utc(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 +0000'\n * @example DateTime.local(2014, 7, 13).toRFC2822() //=> 'Sun, 13 Jul 2014 00:00:00 -0400'\n * @return {string}\n */\n toRFC2822() {\n return toTechFormat(this, \"EEE, dd LLL yyyy HH:mm:ss ZZZ\", false);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in HTTP headers. The output is always expressed in GMT.\n * Specifically, the string conforms to RFC 1123.\n * @see https://www.w3.org/Protocols/rfc2616/rfc2616-sec3.html#sec3.3.1\n * @example DateTime.utc(2014, 7, 13).toHTTP() //=> 'Sun, 13 Jul 2014 00:00:00 GMT'\n * @example DateTime.utc(2014, 7, 13, 19).toHTTP() //=> 'Sun, 13 Jul 2014 19:00:00 GMT'\n * @return {string}\n */\n toHTTP() {\n return toTechFormat(this.toUTC(), \"EEE, dd LLL yyyy HH:mm:ss 'GMT'\");\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Date\n * @example DateTime.utc(2014, 7, 13).toSQLDate() //=> '2014-07-13'\n * @return {string|null}\n */\n toSQLDate() {\n if (!this.isValid) {\n return null;\n }\n return toISODate(this, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL Time\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc().toSQL() //=> '05:15:16.345'\n * @example DateTime.now().toSQL() //=> '05:15:16.345 -04:00'\n * @example DateTime.now().toSQL({ includeOffset: false }) //=> '05:15:16.345'\n * @example DateTime.now().toSQL({ includeZone: false }) //=> '05:15:16.345 America/New_York'\n * @return {string}\n */\n toSQLTime({ includeOffset = true, includeZone = false, includeOffsetSpace = true } = {}) {\n let fmt = \"HH:mm:ss.SSS\";\n\n if (includeZone || includeOffset) {\n if (includeOffsetSpace) {\n fmt += \" \";\n }\n if (includeZone) {\n fmt += \"z\";\n } else if (includeOffset) {\n fmt += \"ZZ\";\n }\n }\n\n return toTechFormat(this, fmt, true);\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for use in SQL DateTime\n * @param {Object} opts - options\n * @param {boolean} [opts.includeZone=false] - include the zone, such as 'America/New_York'. Overrides includeOffset.\n * @param {boolean} [opts.includeOffset=true] - include the offset, such as 'Z' or '-04:00'\n * @param {boolean} [opts.includeOffsetSpace=true] - include the space between the time and the offset, such as '05:15:16.345 -04:00'\n * @example DateTime.utc(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 Z'\n * @example DateTime.local(2014, 7, 13).toSQL() //=> '2014-07-13 00:00:00.000 -04:00'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeOffset: false }) //=> '2014-07-13 00:00:00.000'\n * @example DateTime.local(2014, 7, 13).toSQL({ includeZone: true }) //=> '2014-07-13 00:00:00.000 America/New_York'\n * @return {string}\n */\n toSQL(opts = {}) {\n if (!this.isValid) {\n return null;\n }\n\n return `${this.toSQLDate()} ${this.toSQLTime(opts)}`;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for debugging\n * @return {string}\n */\n toString() {\n return this.isValid ? this.toISO() : INVALID;\n }\n\n /**\n * Returns a string representation of this DateTime appropriate for the REPL.\n * @return {string}\n */\n [Symbol.for(\"nodejs.util.inspect.custom\")]() {\n if (this.isValid) {\n return `DateTime { ts: ${this.toISO()}, zone: ${this.zone.name}, locale: ${this.locale} }`;\n } else {\n return `DateTime { Invalid, reason: ${this.invalidReason} }`;\n }\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime. Alias of {@link DateTime#toMillis}\n * @return {number}\n */\n valueOf() {\n return this.toMillis();\n }\n\n /**\n * Returns the epoch milliseconds of this DateTime.\n * @return {number}\n */\n toMillis() {\n return this.isValid ? this.ts : NaN;\n }\n\n /**\n * Returns the epoch seconds (including milliseconds in the fractional part) of this DateTime.\n * @return {number}\n */\n toSeconds() {\n return this.isValid ? this.ts / 1000 : NaN;\n }\n\n /**\n * Returns the epoch seconds (as a whole number) of this DateTime.\n * @return {number}\n */\n toUnixInteger() {\n return this.isValid ? Math.floor(this.ts / 1000) : NaN;\n }\n\n /**\n * Returns an ISO 8601 representation of this DateTime appropriate for use in JSON.\n * @return {string}\n */\n toJSON() {\n return this.toISO();\n }\n\n /**\n * Returns a BSON serializable equivalent to this DateTime.\n * @return {Date}\n */\n toBSON() {\n return this.toJSDate();\n }\n\n /**\n * Returns a JavaScript object with this DateTime's year, month, day, and so on.\n * @param opts - options for generating the object\n * @param {boolean} [opts.includeConfig=false] - include configuration attributes in the output\n * @example DateTime.now().toObject() //=> { year: 2017, month: 4, day: 22, hour: 20, minute: 49, second: 42, millisecond: 268 }\n * @return {Object}\n */\n toObject(opts = {}) {\n if (!this.isValid) return {};\n\n const base = { ...this.c };\n\n if (opts.includeConfig) {\n base.outputCalendar = this.outputCalendar;\n base.numberingSystem = this.loc.numberingSystem;\n base.locale = this.loc.locale;\n }\n return base;\n }\n\n /**\n * Returns a JavaScript Date equivalent to this DateTime.\n * @return {Date}\n */\n toJSDate() {\n return new Date(this.isValid ? this.ts : NaN);\n }\n\n // COMPARE\n\n /**\n * Return the difference between two DateTimes as a Duration.\n * @param {DateTime} otherDateTime - the DateTime to compare this one to\n * @param {string|string[]} [unit=['milliseconds']] - the unit or array of units (such as 'hours' or 'days') to include in the duration.\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @example\n * var i1 = DateTime.fromISO('1982-05-25T09:45'),\n * i2 = DateTime.fromISO('1983-10-14T10:30');\n * i2.diff(i1).toObject() //=> { milliseconds: 43807500000 }\n * i2.diff(i1, 'hours').toObject() //=> { hours: 12168.75 }\n * i2.diff(i1, ['months', 'days']).toObject() //=> { months: 16, days: 19.03125 }\n * i2.diff(i1, ['months', 'days', 'hours']).toObject() //=> { months: 16, days: 19, hours: 0.75 }\n * @return {Duration}\n */\n diff(otherDateTime, unit = \"milliseconds\", opts = {}) {\n if (!this.isValid || !otherDateTime.isValid) {\n return Duration.invalid(\"created by diffing an invalid DateTime\");\n }\n\n const durOpts = { locale: this.locale, numberingSystem: this.numberingSystem, ...opts };\n\n const units = maybeArray(unit).map(Duration.normalizeUnit),\n otherIsLater = otherDateTime.valueOf() > this.valueOf(),\n earlier = otherIsLater ? this : otherDateTime,\n later = otherIsLater ? otherDateTime : this,\n diffed = diff(earlier, later, units, durOpts);\n\n return otherIsLater ? diffed.negate() : diffed;\n }\n\n /**\n * Return the difference between this DateTime and right now.\n * See {@link DateTime#diff}\n * @param {string|string[]} [unit=['milliseconds']] - the unit or units units (such as 'hours' or 'days') to include in the duration\n * @param {Object} opts - options that affect the creation of the Duration\n * @param {string} [opts.conversionAccuracy='casual'] - the conversion system to use\n * @return {Duration}\n */\n diffNow(unit = \"milliseconds\", opts = {}) {\n return this.diff(DateTime.now(), unit, opts);\n }\n\n /**\n * Return an Interval spanning between this DateTime and another DateTime\n * @param {DateTime} otherDateTime - the other end point of the Interval\n * @return {Interval|DateTime}\n */\n until(otherDateTime) {\n return this.isValid ? Interval.fromDateTimes(this, otherDateTime) : this;\n }\n\n /**\n * Return whether this DateTime is in the same unit of time as another DateTime.\n * Higher-order units must also be identical for this function to return `true`.\n * Note that time zones are **ignored** in this comparison, which compares the **local** calendar time. Use {@link DateTime#setZone} to convert one of the dates if needed.\n * @param {DateTime} otherDateTime - the other DateTime\n * @param {string} unit - the unit of time to check sameness on\n * @param {Object} opts - options\n * @param {boolean} [opts.useLocaleWeeks=false] - If true, use weeks based on the locale, i.e. use the locale-dependent start of the week; only the locale of this DateTime is used\n * @example DateTime.now().hasSame(otherDT, 'day'); //~> true if otherDT is in the same current calendar day\n * @return {boolean}\n */\n hasSame(otherDateTime, unit, opts) {\n if (!this.isValid) return false;\n\n const inputMs = otherDateTime.valueOf();\n const adjustedToZone = this.setZone(otherDateTime.zone, { keepLocalTime: true });\n return (\n adjustedToZone.startOf(unit, opts) <= inputMs && inputMs <= adjustedToZone.endOf(unit, opts)\n );\n }\n\n /**\n * Equality check\n * Two DateTimes are equal if and only if they represent the same millisecond, have the same zone and location, and are both valid.\n * To compare just the millisecond values, use `+dt1 === +dt2`.\n * @param {DateTime} other - the other DateTime\n * @return {boolean}\n */\n equals(other) {\n return (\n this.isValid &&\n other.isValid &&\n this.valueOf() === other.valueOf() &&\n this.zone.equals(other.zone) &&\n this.loc.equals(other.loc)\n );\n }\n\n /**\n * Returns a string representation of a this time relative to now, such as \"in two days\". Can only internationalize if your\n * platform supports Intl.RelativeTimeFormat. Rounds towards zero by default.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} [options.style=\"long\"] - the style of units, must be \"long\", \"short\", or \"narrow\"\n * @param {string|string[]} options.unit - use a specific unit or array of units; if omitted, or an array, the method will pick the best unit. Use an array or one of \"years\", \"quarters\", \"months\", \"weeks\", \"days\", \"hours\", \"minutes\", or \"seconds\"\n * @param {boolean} [options.round=true] - whether to round the numbers in the output.\n * @param {string} [options.rounding=\"trunc\"] - rounding method to use when rounding the numbers in the output. Can be \"trunc\" (toward zero), \"expand\" (away from zero), \"round\", \"floor\", or \"ceil\".\n * @param {number} [options.padding=0] - padding in milliseconds. This allows you to round up the result if it fits inside the threshold. Don't use in combination with {round: false} because the decimal output will include the padding.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelative() //=> \"in 1 day\"\n * @example DateTime.now().setLocale(\"es\").toRelative({ days: 1 }) //=> \"dentro de 1 día\"\n * @example DateTime.now().plus({ days: 1 }).toRelative({ locale: \"fr\" }) //=> \"dans 23 heures\"\n * @example DateTime.now().minus({ days: 2 }).toRelative() //=> \"2 days ago\"\n * @example DateTime.now().minus({ days: 2 }).toRelative({ unit: \"hours\" }) //=> \"48 hours ago\"\n * @example DateTime.now().minus({ hours: 36 }).toRelative({ round: false }) //=> \"1.5 days ago\"\n */\n toRelative(options = {}) {\n if (!this.isValid) return null;\n const base = options.base || DateTime.fromObject({}, { zone: this.zone }),\n padding = options.padding ? (this < base ? -options.padding : options.padding) : 0;\n let units = [\"years\", \"months\", \"days\", \"hours\", \"minutes\", \"seconds\"];\n let unit = options.unit;\n if (Array.isArray(options.unit)) {\n units = options.unit;\n unit = undefined;\n }\n return diffRelative(base, this.plus(padding), {\n ...options,\n numeric: \"always\",\n units,\n unit,\n });\n }\n\n /**\n * Returns a string representation of this date relative to today, such as \"yesterday\" or \"next month\".\n * Only internationalizes on platforms that supports Intl.RelativeTimeFormat.\n * @param {Object} options - options that affect the output\n * @param {DateTime} [options.base=DateTime.now()] - the DateTime to use as the basis to which this time is compared. Defaults to now.\n * @param {string} options.locale - override the locale of this DateTime\n * @param {string} options.unit - use a specific unit; if omitted, the method will pick the unit. Use one of \"years\", \"quarters\", \"months\", \"weeks\", or \"days\"\n * @param {string} options.numberingSystem - override the numberingSystem of this DateTime. The Intl system may choose not to honor this\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar() //=> \"tomorrow\"\n * @example DateTime.now().setLocale(\"es\").plus({ days: 1 }).toRelative() //=> \"\"mañana\"\n * @example DateTime.now().plus({ days: 1 }).toRelativeCalendar({ locale: \"fr\" }) //=> \"demain\"\n * @example DateTime.now().minus({ days: 2 }).toRelativeCalendar() //=> \"2 days ago\"\n */\n toRelativeCalendar(options = {}) {\n if (!this.isValid) return null;\n\n return diffRelative(options.base || DateTime.fromObject({}, { zone: this.zone }), this, {\n ...options,\n numeric: \"auto\",\n units: [\"years\", \"months\", \"days\"],\n calendary: true,\n });\n }\n\n /**\n * Return the min of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the minimum\n * @return {DateTime} the min DateTime, or undefined if called with no argument\n */\n static min(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"min requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.min);\n }\n\n /**\n * Return the max of several date times\n * @param {...DateTime} dateTimes - the DateTimes from which to choose the maximum\n * @return {DateTime} the max DateTime, or undefined if called with no argument\n */\n static max(...dateTimes) {\n if (!dateTimes.every(DateTime.isDateTime)) {\n throw new InvalidArgumentError(\"max requires all arguments be DateTimes\");\n }\n return bestBy(dateTimes, (i) => i.valueOf(), Math.max);\n }\n\n // MISC\n\n /**\n * Explain how a string would be parsed by fromFormat()\n * @param {string} text - the string to parse\n * @param {string} fmt - the format the string is expected to be in (see description)\n * @param {Object} options - options taken by fromFormat()\n * @return {Object}\n */\n static fromFormatExplain(text, fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return explainFromTokens(localeToUse, text, fmt);\n }\n\n /**\n * @deprecated use fromFormatExplain instead\n */\n static fromStringExplain(text, fmt, options = {}) {\n return DateTime.fromFormatExplain(text, fmt, options);\n }\n\n /**\n * Build a parser for `fmt` using the given locale. This parser can be passed\n * to {@link DateTime.fromFormatParser} to a parse a date in this format. This\n * can be used to optimize cases where many dates need to be parsed in a\n * specific format.\n *\n * @param {String} fmt - the format the string is expected to be in (see\n * description)\n * @param {Object} options - options used to set locale and numberingSystem\n * for parser\n * @returns {TokenParser} - opaque object to be used\n */\n static buildFormatParser(fmt, options = {}) {\n const { locale = null, numberingSystem = null } = options,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n return new TokenParser(localeToUse, fmt);\n }\n\n /**\n * Create a DateTime from an input string and format parser.\n *\n * The format parser must have been created with the same locale as this call.\n *\n * @param {String} text - the string to parse\n * @param {TokenParser} formatParser - parser from {@link DateTime.buildFormatParser}\n * @param {Object} opts - options taken by fromFormat()\n * @returns {DateTime}\n */\n static fromFormatParser(text, formatParser, opts = {}) {\n if (isUndefined(text) || isUndefined(formatParser)) {\n throw new InvalidArgumentError(\n \"fromFormatParser requires an input string and a format parser\"\n );\n }\n const { locale = null, numberingSystem = null } = opts,\n localeToUse = Locale.fromOpts({\n locale,\n numberingSystem,\n defaultToEN: true,\n });\n\n if (!localeToUse.equals(formatParser.locale)) {\n throw new InvalidArgumentError(\n `fromFormatParser called with a locale of ${localeToUse}, ` +\n `but the format parser was created for ${formatParser.locale}`\n );\n }\n\n const { result, zone, specificOffset, invalidReason } = formatParser.explainFromTokens(text);\n\n if (invalidReason) {\n return DateTime.invalid(invalidReason);\n } else {\n return parseDataToDateTime(\n result,\n zone,\n opts,\n `format ${formatParser.format}`,\n text,\n specificOffset\n );\n }\n }\n\n // FORMAT PRESETS\n\n /**\n * {@link DateTime#toLocaleString} format like 10/14/1983\n * @type {Object}\n */\n static get DATE_SHORT() {\n return Formats.DATE_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED() {\n return Formats.DATE_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, Oct 14, 1983'\n * @type {Object}\n */\n static get DATE_MED_WITH_WEEKDAY() {\n return Formats.DATE_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983'\n * @type {Object}\n */\n static get DATE_FULL() {\n return Formats.DATE_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Tuesday, October 14, 1983'\n * @type {Object}\n */\n static get DATE_HUGE() {\n return Formats.DATE_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_SIMPLE() {\n return Formats.TIME_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SECONDS() {\n return Formats.TIME_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_SHORT_OFFSET() {\n return Formats.TIME_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get TIME_WITH_LONG_OFFSET() {\n return Formats.TIME_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_SIMPLE() {\n return Formats.TIME_24_SIMPLE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SECONDS() {\n return Formats.TIME_24_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 EDT', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_SHORT_OFFSET() {\n return Formats.TIME_24_WITH_SHORT_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '09:30:23 Eastern Daylight Time', always 24-hour.\n * @type {Object}\n */\n static get TIME_24_WITH_LONG_OFFSET() {\n return Formats.TIME_24_WITH_LONG_OFFSET;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT() {\n return Formats.DATETIME_SHORT;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like '10/14/1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_SHORT_WITH_SECONDS() {\n return Formats.DATETIME_SHORT_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED() {\n return Formats.DATETIME_MED;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Oct 14, 1983, 9:30:33 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_SECONDS() {\n return Formats.DATETIME_MED_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Fri, 14 Oct 1983, 9:30 AM'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_MED_WITH_WEEKDAY() {\n return Formats.DATETIME_MED_WITH_WEEKDAY;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL() {\n return Formats.DATETIME_FULL;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'October 14, 1983, 9:30:33 AM EDT'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_FULL_WITH_SECONDS() {\n return Formats.DATETIME_FULL_WITH_SECONDS;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE() {\n return Formats.DATETIME_HUGE;\n }\n\n /**\n * {@link DateTime#toLocaleString} format like 'Friday, October 14, 1983, 9:30:33 AM Eastern Daylight Time'. Only 12-hour if the locale is.\n * @type {Object}\n */\n static get DATETIME_HUGE_WITH_SECONDS() {\n return Formats.DATETIME_HUGE_WITH_SECONDS;\n }\n}\n\n/**\n * @private\n */\nexport function friendlyDateTime(dateTimeish) {\n if (DateTime.isDateTime(dateTimeish)) {\n return dateTimeish;\n } else if (dateTimeish && dateTimeish.valueOf && isNumber(dateTimeish.valueOf())) {\n return DateTime.fromJSDate(dateTimeish);\n } else if (dateTimeish && typeof dateTimeish === \"object\") {\n return DateTime.fromObject(dateTimeish);\n } else {\n throw new InvalidArgumentError(\n `Unknown datetime argument: ${dateTimeish}, of type ${typeof dateTimeish}`\n );\n }\n}\n","!function(t,e){\"object\"==typeof exports&&\"undefined\"!=typeof module?module.exports=e():\"function\"==typeof define&&define.amd?define(e):(t=\"undefined\"!=typeof globalThis?globalThis:t||self).dayjs=e()}(this,(function(){\"use strict\";var t=1e3,e=6e4,n=36e5,r=\"millisecond\",i=\"second\",s=\"minute\",u=\"hour\",a=\"day\",o=\"week\",c=\"month\",f=\"quarter\",h=\"year\",d=\"date\",l=\"Invalid Date\",$=/^(\\d{4})[-/]?(\\d{1,2})?[-/]?(\\d{0,2})[Tt\\s]*(\\d{1,2})?:?(\\d{1,2})?:?(\\d{1,2})?[.:]?(\\d+)?$/,y=/\\[([^\\]]+)]|Y{1,4}|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|a|A|m{1,2}|s{1,2}|Z{1,2}|SSS/g,M={name:\"en\",weekdays:\"Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday\".split(\"_\"),months:\"January_February_March_April_May_June_July_August_September_October_November_December\".split(\"_\"),ordinal:function(t){var e=[\"th\",\"st\",\"nd\",\"rd\"],n=t%100;return\"[\"+t+(e[(n-20)%10]||e[n]||e[0])+\"]\"}},m=function(t,e,n){var r=String(t);return!r||r.length>=e?t:\"\"+Array(e+1-r.length).join(n)+t},v={s:m,z:function(t){var e=-t.utcOffset(),n=Math.abs(e),r=Math.floor(n/60),i=n%60;return(e<=0?\"+\":\"-\")+m(r,2,\"0\")+\":\"+m(i,2,\"0\")},m:function t(e,n){if(e.date()<n.date())return-t(n,e);var r=12*(n.year()-e.year())+(n.month()-e.month()),i=e.clone().add(r,c),s=n-i<0,u=e.clone().add(r+(s?-1:1),c);return+(-(r+(n-i)/(s?i-u:u-i))||0)},a:function(t){return t<0?Math.ceil(t)||0:Math.floor(t)},p:function(t){return{M:c,y:h,w:o,d:a,D:d,h:u,m:s,s:i,ms:r,Q:f}[t]||String(t||\"\").toLowerCase().replace(/s$/,\"\")},u:function(t){return void 0===t}},g=\"en\",D={};D[g]=M;var p=\"$isDayjsObject\",S=function(t){return t instanceof _||!(!t||!t[p])},w=function t(e,n,r){var i;if(!e)return g;if(\"string\"==typeof e){var s=e.toLowerCase();D[s]&&(i=s),n&&(D[s]=n,i=s);var u=e.split(\"-\");if(!i&&u.length>1)return t(u[0])}else{var a=e.name;D[a]=e,i=a}return!r&&i&&(g=i),i||!r&&g},O=function(t,e){if(S(t))return t.clone();var n=\"object\"==typeof e?e:{};return n.date=t,n.args=arguments,new _(n)},b=v;b.l=w,b.i=S,b.w=function(t,e){return O(t,{locale:e.$L,utc:e.$u,x:e.$x,$offset:e.$offset})};var _=function(){function M(t){this.$L=w(t.locale,null,!0),this.parse(t),this.$x=this.$x||t.x||{},this[p]=!0}var m=M.prototype;return m.parse=function(t){this.$d=function(t){var e=t.date,n=t.utc;if(null===e)return new Date(NaN);if(b.u(e))return new Date;if(e instanceof Date)return new Date(e);if(\"string\"==typeof e&&!/Z$/i.test(e)){var r=e.match($);if(r){var i=r[2]-1||0,s=(r[7]||\"0\").substring(0,3);return n?new Date(Date.UTC(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)):new Date(r[1],i,r[3]||1,r[4]||0,r[5]||0,r[6]||0,s)}}return new Date(e)}(t),this.init()},m.init=function(){var t=this.$d;this.$y=t.getFullYear(),this.$M=t.getMonth(),this.$D=t.getDate(),this.$W=t.getDay(),this.$H=t.getHours(),this.$m=t.getMinutes(),this.$s=t.getSeconds(),this.$ms=t.getMilliseconds()},m.$utils=function(){return b},m.isValid=function(){return!(this.$d.toString()===l)},m.isSame=function(t,e){var n=O(t);return this.startOf(e)<=n&&n<=this.endOf(e)},m.isAfter=function(t,e){return O(t)<this.startOf(e)},m.isBefore=function(t,e){return this.endOf(e)<O(t)},m.$g=function(t,e,n){return b.u(t)?this[e]:this.set(n,t)},m.unix=function(){return Math.floor(this.valueOf()/1e3)},m.valueOf=function(){return this.$d.getTime()},m.startOf=function(t,e){var n=this,r=!!b.u(e)||e,f=b.p(t),l=function(t,e){var i=b.w(n.$u?Date.UTC(n.$y,e,t):new Date(n.$y,e,t),n);return r?i:i.endOf(a)},$=function(t,e){return b.w(n.toDate()[t].apply(n.toDate(\"s\"),(r?[0,0,0,0]:[23,59,59,999]).slice(e)),n)},y=this.$W,M=this.$M,m=this.$D,v=\"set\"+(this.$u?\"UTC\":\"\");switch(f){case h:return r?l(1,0):l(31,11);case c:return r?l(1,M):l(0,M+1);case o:var g=this.$locale().weekStart||0,D=(y<g?y+7:y)-g;return l(r?m-D:m+(6-D),M);case a:case d:return $(v+\"Hours\",0);case u:return $(v+\"Minutes\",1);case s:return $(v+\"Seconds\",2);case i:return $(v+\"Milliseconds\",3);default:return this.clone()}},m.endOf=function(t){return this.startOf(t,!1)},m.$set=function(t,e){var n,o=b.p(t),f=\"set\"+(this.$u?\"UTC\":\"\"),l=(n={},n[a]=f+\"Date\",n[d]=f+\"Date\",n[c]=f+\"Month\",n[h]=f+\"FullYear\",n[u]=f+\"Hours\",n[s]=f+\"Minutes\",n[i]=f+\"Seconds\",n[r]=f+\"Milliseconds\",n)[o],$=o===a?this.$D+(e-this.$W):e;if(o===c||o===h){var y=this.clone().set(d,1);y.$d[l]($),y.init(),this.$d=y.set(d,Math.min(this.$D,y.daysInMonth())).$d}else l&&this.$d[l]($);return this.init(),this},m.set=function(t,e){return this.clone().$set(t,e)},m.get=function(t){return this[b.p(t)]()},m.add=function(r,f){var d,l=this;r=Number(r);var $=b.p(f),y=function(t){var e=O(l);return b.w(e.date(e.date()+Math.round(t*r)),l)};if($===c)return this.set(c,this.$M+r);if($===h)return this.set(h,this.$y+r);if($===a)return y(1);if($===o)return y(7);var M=(d={},d[s]=e,d[u]=n,d[i]=t,d)[$]||1,m=this.$d.getTime()+r*M;return b.w(m,this)},m.subtract=function(t,e){return this.add(-1*t,e)},m.format=function(t){var e=this,n=this.$locale();if(!this.isValid())return n.invalidDate||l;var r=t||\"YYYY-MM-DDTHH:mm:ssZ\",i=b.z(this),s=this.$H,u=this.$m,a=this.$M,o=n.weekdays,c=n.months,f=n.meridiem,h=function(t,n,i,s){return t&&(t[n]||t(e,r))||i[n].slice(0,s)},d=function(t){return b.s(s%12||12,t,\"0\")},$=f||function(t,e,n){var r=t<12?\"AM\":\"PM\";return n?r.toLowerCase():r};return r.replace(y,(function(t,r){return r||function(t){switch(t){case\"YY\":return String(e.$y).slice(-2);case\"YYYY\":return b.s(e.$y,4,\"0\");case\"M\":return a+1;case\"MM\":return b.s(a+1,2,\"0\");case\"MMM\":return h(n.monthsShort,a,c,3);case\"MMMM\":return h(c,a);case\"D\":return e.$D;case\"DD\":return b.s(e.$D,2,\"0\");case\"d\":return String(e.$W);case\"dd\":return h(n.weekdaysMin,e.$W,o,2);case\"ddd\":return h(n.weekdaysShort,e.$W,o,3);case\"dddd\":return o[e.$W];case\"H\":return String(s);case\"HH\":return b.s(s,2,\"0\");case\"h\":return d(1);case\"hh\":return d(2);case\"a\":return $(s,u,!0);case\"A\":return $(s,u,!1);case\"m\":return String(u);case\"mm\":return b.s(u,2,\"0\");case\"s\":return String(e.$s);case\"ss\":return b.s(e.$s,2,\"0\");case\"SSS\":return b.s(e.$ms,3,\"0\");case\"Z\":return i}return null}(t)||i.replace(\":\",\"\")}))},m.utcOffset=function(){return 15*-Math.round(this.$d.getTimezoneOffset()/15)},m.diff=function(r,d,l){var $,y=this,M=b.p(d),m=O(r),v=(m.utcOffset()-this.utcOffset())*e,g=this-m,D=function(){return b.m(y,m)};switch(M){case h:$=D()/12;break;case c:$=D();break;case f:$=D()/3;break;case o:$=(g-v)/6048e5;break;case a:$=(g-v)/864e5;break;case u:$=g/n;break;case s:$=g/e;break;case i:$=g/t;break;default:$=g}return l?$:b.a($)},m.daysInMonth=function(){return this.endOf(c).$D},m.$locale=function(){return D[this.$L]},m.locale=function(t,e){if(!t)return this.$L;var n=this.clone(),r=w(t,e,!0);return r&&(n.$L=r),n},m.clone=function(){return b.w(this.$d,this)},m.toDate=function(){return new Date(this.valueOf())},m.toJSON=function(){return this.isValid()?this.toISOString():null},m.toISOString=function(){return this.$d.toISOString()},m.toString=function(){return this.$d.toUTCString()},M}(),k=_.prototype;return O.prototype=k,[[\"$ms\",r],[\"$s\",i],[\"$m\",s],[\"$H\",u],[\"$W\",a],[\"$M\",c],[\"$y\",h],[\"$D\",d]].forEach((function(t){k[t[1]]=function(e){return this.$g(e,t[0],t[1])}})),O.extend=function(t,e){return t.$i||(t(e,_,O),t.$i=!0),O},O.locale=w,O.isDayjs=S,O.unix=function(t){return O(1e3*t)},O.en=D[g],O.Ls=D,O.p={},O}));","/*\n|--------------------------------------------------------------------------\n| Type Guards\n|--------------------------------------------------------------------------\n|\n| Utility functions that help determine the type of unknown values\n|\n*/\n\nimport { DateTime } from 'luxon'\nimport type { DateObjectUnits } from 'luxon'\n\n/**\n * Checks if a value is an instance of a specific class.\n * @param value - The value to check\n * @param type - The name of the class to check against\n * @returns true if the value is an instance of the specified class, false otherwise\n */\nexport const isInstanceOf = <T>(\n value: unknown,\n type: string,\n ctor?: new (...args: any[]) => T\n): value is T => {\n if ('undefined' !== typeof ctor && value instanceof ctor) return true\n if (\n 'undefined' !== typeof ctor &&\n typeof ctor[Symbol.hasInstance] === 'function' &&\n ctor[Symbol.hasInstance](value)\n )\n /* v8 ignore next 1 */\n return true\n if ('object' === typeof value && null !== value) {\n const valueWithConstructor = value as { constructor?: Function }\n const constructorName = valueWithConstructor.constructor?.name\n return constructorName === type\n }\n return false\n}\n\n/**\n * Type guard to check if a value is a Luxon DateTime instance\n * @param value - The value to check\n * @returns True if the value is a Luxon DateTime, false otherwise\n */\nexport const isLuxonDateTime = (value: unknown): value is DateTime => {\n if (value instanceof DateTime) return true\n if ('object' !== typeof value || null === value) return false\n if (!('isLuxonDateTime' in value)) return false\n return value.isLuxonDateTime === true\n}\n\n/**\n * Type guard to check if a value is a plain object (not null, not array)\n * @param value - The value to check\n * @returns True if the value is a plain object, false otherwise\n */\nexport const isPlainObject = (value: unknown): value is { [key: string]: unknown } => {\n return typeof value === 'object' && value !== null && !Array.isArray(value)\n}\n\n/**\n * Type guard to check if a value is an array\n * @param value - The value to check\n * @returns True if the value is an array, false otherwise\n */\nexport const isArray = (value: unknown): value is unknown[] => {\n return Array.isArray(value)\n}\n\n/**\n * Type guard to check if a value is a valid Luxon DateObjectUnits object.\n *\n * This function validates that the input is a plain object containing only valid\n * Luxon date/time unit properties with numeric values. It ensures type safety\n * when working with objects that should represent date/time units for Luxon operations.\n *\n * @param value - The value to check for DateObjectUnits compatibility\n * @returns True if the value is a valid DateObjectUnits object, false otherwise\n *\n * @example\n * ```typescript\n * // Valid DateObjectUnits objects\n * const validUnits1 = { year: 2023, month: 12, day: 25 };\n * const validUnits2 = { hour: 14, minute: 30, second: 45 };\n * const validUnits3 = { weekYear: 2023, weekNumber: 52 };\n *\n * console.log(isDateObjectUnits(validUnits1)); // true\n * console.log(isDateObjectUnits(validUnits2)); // true\n * console.log(isDateObjectUnits(validUnits3)); // true\n *\n * // Invalid cases\n * console.log(isDateObjectUnits({})); // false (empty object)\n * console.log(isDateObjectUnits({ year: \"2023\" })); // false (string value)\n * console.log(isDateObjectUnits({ invalid: 123 })); // false (invalid property)\n * console.log(isDateObjectUnits(null)); // false\n * console.log(isDateObjectUnits([])); // false\n * ```\n *\n * @remarks\n * The function validates against all supported Luxon DateObjectUnits properties:\n * - Time units: year, month, day, ordinal\n * - Week-based units: weekYear, localWeekYear, weekNumber, localWeekNumber, weekday, localWeekday\n * - Time of day units: hour, minute, second, millisecond\n *\n * All property values must be numbers or undefined. The object must contain at least one property.\n */\nexport const isDateObjectUnits = (value: unknown): value is DateObjectUnits => {\n if (!isPlainObject(value)) return false\n const keys = Object.keys(value)\n if (keys.length === 0) return false\n const valids = [\n 'year',\n 'month',\n 'day',\n 'ordinal',\n 'weekYear',\n 'localWeekYear',\n 'weekNumber',\n 'localWeekNumber',\n 'weekday',\n 'localWeekday',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ]\n const invalidKeys = keys.filter((key) => !valids.includes(key))\n if (invalidKeys.length > 0) return false\n return keys.every((key) => {\n const val = value[key]\n /* v8 ignore next 1 */\n return typeof val === 'number' || typeof val === 'undefined'\n })\n}\n","import { DateTime } from 'luxon'\nimport { Settings } from 'luxon'\nimport { default as dayjs, Dayjs } from 'dayjs'\nimport { isLuxonDateTime, isInstanceOf, isDateObjectUnits } from '../guards'\nimport type { Tokens } from '../types'\nimport type { AnySchema } from '../schemas'\nimport type { Zone, LocaleOptions, DateObjectUnits } from 'luxon'\nimport type { Root, ExtensionFactory, CustomHelpers, Reference } from 'joi'\n\nSettings.defaultZone = 'utc'\nSettings.defaultLocale = 'en'\nSettings.defaultWeekSettings = {\n firstDay: 7,\n minimalDays: 4,\n weekend: [6, 7],\n}\nSettings.throwOnInvalid = false\n\nconst messages = {\n 'datetime.base': '{{#label}} must be a datetime value',\n 'datetime.exactly': '{{#label}} must be a datetime exactly equal to {{#limit}}',\n 'datetime.equals': '{{#label}} must be a datetime equal to {{#limit}}',\n 'datetime.after': '{{#label}} must be a datetime after {{#limit}}',\n 'datetime.greater': '{{#label}} must be a datetime after {{#limit}}',\n 'datetime.before': '{{#label}} must be a datetime before {{#limit}}',\n 'datetime.less': '{{#label}} must be a datetime before {{#limit}}',\n 'datetime.afterOrEqual': '{{#label}} must be a datetime after or equal to {{#limit}}',\n 'datetime.min': '{{#label}} must be a datetime after or equal to {{#limit}}',\n 'datetime.beforeOrEqual': '{{#label}} must be a datetime before or equal to {{#limit}}',\n 'datetime.max': '{{#label}} must be a datetime before or equal to {{#limit}}',\n 'datetime.weekend': '{{#label}} is not a weekend',\n 'datetime.weekday': '{{#label}} is not a weekday',\n}\n\nconst compare = (\n value: DateTime,\n limit: DateTime,\n operator: '===' | '=' | '>' | '<' | '>=' | '<='\n) => {\n value = toDateTime(value) as DateTime\n limit = toDateTime(limit) as DateTime\n switch (operator) {\n case '===':\n return value.equals(limit)\n case '=':\n return value.hasSame(limit, 'millisecond')\n case '>':\n return value > limit\n case '<':\n return value < limit\n case '>=':\n return value >= limit\n case '<=':\n return value <= limit\n /* v8 ignore next 2 */\n default:\n return false\n }\n}\n\nconst toDateTime = (value: unknown, format?: Tokens): DateTime | false => {\n if (isLuxonDateTime(value)) {\n return value\n }\n if (isInstanceOf<Date>(value, 'Date', Date)) {\n return DateTime.fromJSDate(value)\n }\n if (isInstanceOf<Dayjs>(value, 'Dayjs', Dayjs) || dayjs.isDayjs(value)) {\n return DateTime.fromJSDate(value.toDate())\n }\n if (isDateObjectUnits(value)) {\n return DateTime.fromObject(value, { zone: 'utc' })\n }\n if (typeof value === 'number') {\n const day = dayjs(value)\n if (day.isValid()) {\n return DateTime.fromJSDate(day.toDate(), { zone: 'utc' })\n }\n }\n if (typeof value === 'string') {\n /* v8 ignore next 6 */\n if (format) {\n const dateTime = DateTime.fromFormat(value, format, { zone: 'utc' })\n if (dateTime.isValid) {\n return dateTime\n }\n }\n const luxonMethods = [\n DateTime.fromISO,\n DateTime.fromRFC2822,\n DateTime.fromHTTP,\n DateTime.fromSQL,\n ]\n for (const method of luxonMethods) {\n const dateTime = method(value, { zone: 'utc' })\n if (dateTime.isValid) {\n return dateTime\n }\n }\n const day = dayjs(value)\n if (day.isValid()) {\n return DateTime.fromJSDate(day.toDate(), { zone: 'utc' })\n }\n }\n return false\n}\n\nconst coerce = (value: unknown, helpers: CustomHelpers) => {\n const converted = toDateTime(value)\n if (converted) {\n const { schema, prefs } = helpers\n if (prefs.convert) {\n let returnable = converted\n if (schema._flags.setZone) {\n switch (schema._flags.setZone) {\n case 'utc':\n returnable = returnable.toUTC()\n break\n case 'local':\n returnable = returnable.toLocal()\n break\n default:\n returnable = returnable.setZone(schema._flags.setZone)\n break\n }\n }\n if (schema._flags.setLocale) {\n returnable = returnable.setLocale(schema._flags.setLocale)\n }\n if (schema._flags.toFormat) {\n if (Array.isArray(schema._flags.toFormat)) {\n const fmt = Array.from(schema._flags.toFormat)\n const method = fmt.shift()\n // @ts-ignore\n returnable = returnable[method](...fmt)\n } else if (typeof schema._flags.toFormat === 'string') {\n // @ts-ignore\n returnable = returnable.toFormat(schema._flags.toFormat)\n }\n }\n return { value: returnable }\n }\n /* v8 ignore next 2 */\n return { value: converted }\n }\n return {\n value,\n errors: [\n helpers.error('datetime.base', {\n value: String(value),\n }),\n ],\n }\n}\n\n/**\n * Types that can be parsed into a DateTime object.\n *\n * Supports Luxon DateTime objects, JavaScript Date objects, Day.js objects,\n * ISO strings, Unix timestamps, and Luxon DateObjectUnits.\n *\n * @example\n * ```typescript\n * const schema = joi.datetime()\n *\n * // All of these are valid Parseable types:\n * schema.validate('2023-01-01T00:00:00Z') // ISO string\n * schema.validate(1672531200000) // Unix timestamp\n * schema.validate(new Date()) // JavaScript Date\n * schema.validate(DateTime.now()) // Luxon DateTime\n * schema.validate({ year: 2023, month: 1, day: 1 }) // DateObjectUnits\n * ```\n */\nexport type Parseable = DateTime | Date | Dayjs | string | number | DateObjectUnits\n\n/**\n * Schema for datetime validation with comprehensive formatting and comparison methods.\n *\n * Extends the base AnySchema to provide datetime-specific validation rules including\n * comparisons (before/after), weekend/weekday checks, timezone conversions, and\n * various output formatting options.\n *\n * @template TSchema - The output type after validation and potential transformation\n *\n * @example\n * ```typescript\n * const schema: DatetimeSchema = joi.datetime()\n * .after('2023-01-01')\n * .toUTC()\n * .toISO()\n *\n * const result = schema.validate('2023-06-15T10:30:00Z')\n * // Returns ISO string in UTC timezone\n * ```\n */\nexport interface DatetimeSchema<TSchema = DateTime> extends AnySchema<TSchema> {\n /**\n * Validates that the datetime is exactly equal to the specified limit.\n * Uses strict equality comparison (===) between DateTime objects.\n *\n * @param limit - The datetime value to compare against\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().exactly('2023-01-01T00:00:00Z')\n * schema.validate('2023-01-01T00:00:00Z') // Valid\n * schema.validate('2023-01-01T00:00:01Z') // Invalid\n * ```\n */\n exactly(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is equal to the specified limit.\n * Uses loose equality comparison (==) between DateTime objects.\n *\n * @param limit - The datetime value to compare against\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().equals('2023-01-01T00:00:00Z')\n * schema.validate('2023-01-01T00:00:00.000Z') // Valid (same moment)\n * ```\n */\n equals(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is after the specified limit.\n *\n * @param limit - The datetime value that the input must be after\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().after('2023-01-01T00:00:00Z')\n * schema.validate('2023-01-02T00:00:00Z') // Valid\n * schema.validate('2022-12-31T23:59:59Z') // Invalid\n * ```\n */\n after(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is greater than the specified limit.\n * Alias for `after()`.\n *\n * @param limit - The datetime value that the input must be greater than\n * @returns The schema instance for method chaining\n */\n greater(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is before the specified limit.\n *\n * @param limit - The datetime value that the input must be before\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().before('2023-12-31T23:59:59Z')\n * schema.validate('2023-06-15T12:00:00Z') // Valid\n * schema.validate('2024-01-01T00:00:00Z') // Invalid\n * ```\n */\n before(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is less than the specified limit.\n * Alias for `before()`.\n *\n * @param limit - The datetime value that the input must be less than\n * @returns The schema instance for method chaining\n */\n less(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is after or equal to the specified limit.\n *\n * @param limit - The datetime value that the input must be after or equal to\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().afterOrEqual('2023-01-01T00:00:00Z')\n * schema.validate('2023-01-01T00:00:00Z') // Valid (equal)\n * schema.validate('2023-01-02T00:00:00Z') // Valid (after)\n * schema.validate('2022-12-31T23:59:59Z') // Invalid\n * ```\n */\n afterOrEqual(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is greater than or equal to the specified limit.\n * Alias for `afterOrEqual()`.\n *\n * @param limit - The minimum datetime value\n * @returns The schema instance for method chaining\n */\n min(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is before or equal to the specified limit.\n *\n * @param limit - The datetime value that the input must be before or equal to\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().beforeOrEqual('2023-12-31T23:59:59Z')\n * schema.validate('2023-12-31T23:59:59Z') // Valid (equal)\n * schema.validate('2023-06-15T12:00:00Z') // Valid (before)\n * schema.validate('2024-01-01T00:00:00Z') // Invalid\n * ```\n */\n beforeOrEqual(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime is less than or equal to the specified limit.\n * Alias for `beforeOrEqual()`.\n *\n * @param limit - The maximum datetime value\n * @returns The schema instance for method chaining\n */\n max(limit: Parseable | Reference): this\n\n /**\n * Validates that the datetime falls on a weekend day.\n * Based on the configured weekend days in Luxon settings (default: Saturday and Sunday).\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().weekend()\n * schema.validate('2023-07-01T12:00:00Z') // Valid if Saturday\n * schema.validate('2023-07-03T12:00:00Z') // Invalid if Monday\n * ```\n */\n weekend(): this\n\n /**\n * Validates that the datetime falls on a weekday (non-weekend day).\n * Based on the configured weekend days in Luxon settings.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().weekday()\n * schema.validate('2023-07-03T12:00:00Z') // Valid if Monday\n * schema.validate('2023-07-01T12:00:00Z') // Invalid if Saturday\n * ```\n */\n weekday(): this\n\n /**\n * Converts the datetime to UTC timezone during validation.\n * The output will be a DateTime object in UTC.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toUTC()\n * const result = schema.validate('2023-07-15T10:30:00-05:00')\n * // Returns DateTime in UTC: 2023-07-15T15:30:00Z\n * ```\n */\n toUTC(): this\n\n /**\n * Converts the datetime to local timezone during validation.\n * The output will be a DateTime object in the system's local timezone.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toLocal()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns DateTime in local timezone\n * ```\n */\n toLocal(): this\n\n /**\n * Sets the timezone for the datetime during validation.\n *\n * @param zone - The timezone to set (IANA timezone name or Luxon Zone object)\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().setZone('America/New_York')\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns DateTime in Eastern timezone\n * ```\n */\n setZone(zone: string | Zone): this\n\n /**\n * Formats the datetime using a custom format string during validation.\n *\n * @param format - The format string (Luxon format tokens)\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toFormat('yyyy-MM-dd HH:mm:ss')\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"2023-07-15 15:30:00\"\n * ```\n */\n toFormat(format: Tokens): this\n\n /**\n * Formats the datetime using locale-specific formatting during validation.\n *\n * @param formatOpts - Locale formatting options\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toLocaleString({ month: 'long', day: 'numeric' })\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"July 15\" (or localized equivalent)\n * ```\n */\n toLocalizedString(formatOpts: LocaleOptions): this\n\n /**\n * Converts the datetime to ISO 8601 string format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toISO()\n * const result = schema.validate('July 15, 2023 3:30 PM')\n * // Returns: \"2023-07-15T15:30:00.000Z\"\n * ```\n */\n toISO(): this\n\n /**\n * Converts the datetime to ISO date format (YYYY-MM-DD) during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toISODate()\n * const result = schema.validate('July 15, 2023 3:30 PM')\n * // Returns: \"2023-07-15\"\n * ```\n */\n toISODate(): this\n\n /**\n * Converts the datetime to ISO week date format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toISOWeekDate()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"2023-W28-6\"\n * ```\n */\n toISOWeekDate(): this\n\n /**\n * Converts the datetime to ISO time format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toISOTime()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"15:30:00.000Z\"\n * ```\n */\n toISOTime(): this\n\n /**\n * Converts the datetime to RFC 2822 format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toRFC2822()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"Sat, 15 Jul 2023 15:30:00 +0000\"\n * ```\n */\n toRFC2822(): this\n\n /**\n * Converts the datetime to HTTP date format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toHTTP()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"Sat, 15 Jul 2023 15:30:00 GMT\"\n * ```\n */\n toHTTP(): this\n\n /**\n * Converts the datetime to SQL date format (YYYY-MM-DD) during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toSQLDate()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"2023-07-15\"\n * ```\n */\n toSQLDate(): this\n\n /**\n * Converts the datetime to SQL time format (HH:mm:ss.SSS) during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toSQLTime()\n * const result = schema.validate('2023-07-15T15:30:45.123Z')\n * // Returns: \"15:30:45.123\"\n * ```\n */\n toSQLTime(): this\n\n /**\n * Converts the datetime to SQL datetime format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toSQL()\n * const result = schema.validate('2023-07-15T15:30:45.123Z')\n * // Returns: \"2023-07-15 15:30:45.123 Z\"\n * ```\n */\n toSQL(): this\n\n /**\n * Converts the datetime to milliseconds since Unix epoch during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toMillis()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: 1689433800000\n * ```\n */\n toMillis(): this\n\n /**\n * Converts the datetime to seconds since Unix epoch during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toSeconds()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: 1689433800.0\n * ```\n */\n toSeconds(): this\n\n /**\n * Converts the datetime to Unix timestamp (seconds as integer) during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toUnixInteger()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: 1689433800\n * ```\n */\n toUnixInteger(): this\n\n /**\n * Converts the datetime to JSON string format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toJSON()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"2023-07-15T15:30:00.000Z\"\n * ```\n */\n toJSON(): this\n\n /**\n * Converts the datetime to BSON format during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toBSON()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: Date object for BSON serialization\n * ```\n */\n toBSON(): this\n\n /**\n * Converts the datetime to a plain object representation during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toObject()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: { year: 2023, month: 7, day: 15, hour: 15, minute: 30, second: 0, millisecond: 0 }\n * ```\n */\n toObject(): this\n\n /**\n * Converts the datetime to a JavaScript Date object during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toJSDate()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: Date object\n * ```\n */\n toJSDate(): this\n\n /**\n * Converts the datetime to a relative time string during validation.\n *\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().toRelative()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns: \"2 hours ago\" (relative to current time)\n * ```\n */\n toRelative(): this\n\n /**\n * Sets the locale for the datetime during validation.\n *\n * @param locale - The locale code (e.g., 'en-US', 'fr-FR')\n * @returns The schema instance for method chaining\n *\n * @example\n * ```typescript\n * const schema = joi.datetime().setLocale('fr-FR').toLocaleString()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns localized string in French\n * ```\n */\n setLocale(locale: string): this\n}\n\n/**\n * Joi extension factory for datetime validation using Luxon.\n *\n * Creates a comprehensive datetime validation schema that can parse various input formats\n * (ISO strings, Unix timestamps, JavaScript Dates, Day.js objects, etc.) and convert them\n * to Luxon DateTime objects. Provides extensive validation rules for comparisons, formatting,\n * timezone handling, and output transformations.\n *\n * The schema automatically handles timezone conversion to UTC by default for consistent\n * datetime handling across different environments. All parsing attempts maintain UTC timezone\n * unless explicitly overridden.\n *\n * @param this - The Joi root instance\n * @param joi - The Joi root instance for creating base schemas\n * @returns Joi extension configuration object\n *\n * @example Basic Usage\n * ```typescript\n * import Joi from 'joi'\n * import { datetime } from './datetime'\n *\n * const extendedJoi = Joi.extend(datetime)\n *\n * const schema = extendedJoi.datetime()\n * const result = schema.validate('2023-07-15T15:30:00Z')\n * // Returns { value: DateTime, error: undefined }\n * ```\n *\n * @example With Validation Rules\n * ```typescript\n * const schema = extendedJoi.datetime()\n * .after('2023-01-01')\n * .before('2024-01-01')\n * .weekday()\n *\n * schema.validate('2023-07-17T10:00:00Z') // Valid (Monday in 2023)\n * schema.validate('2023-07-15T10:00:00Z') // Invalid (Saturday)\n * ```\n *\n * @example With Output Formatting\n * ```typescript\n * const schema = extendedJoi.datetime()\n * .toUTC()\n * .toISO()\n *\n * const result = schema.validate('2023-07-15T10:30:00-05:00')\n * // Returns: \"2023-07-15T15:30:00.000Z\"\n * ```\n *\n * @example Supported Input Formats\n * ```typescript\n * const schema = extendedJoi.datetime()\n *\n * // All of these are valid inputs:\n * schema.validate('2023-07-15T15:30:00Z') // ISO string\n * schema.validate('Sat, 15 Jul 2023 15:30:00 GMT') // RFC2822\n * schema.validate(1689433800000) // Unix timestamp (ms)\n * schema.validate(new Date()) // JavaScript Date\n * schema.validate(DateTime.now()) // Luxon DateTime\n * schema.validate({ year: 2023, month: 7, day: 15 }) // DateObjectUnits\n * ```\n */\nexport const datetime: ExtensionFactory = function (this: Root, joi: Root) {\n return {\n type: 'datetime',\n base: joi.any(),\n coerce: {\n from: ['string', 'number', 'date', 'object'],\n method: coerce,\n },\n rules: {\n compare: {\n method: false,\n /* v8 ignore start */\n validate(value, helpers, { limit }, { name, operator }) {\n const src = toDateTime(value)\n const threshold = toDateTime(limit)\n if (!src) {\n return helpers.error('datetime.base', {\n value: isLuxonDateTime(value)\n ? value.toLocaleString(DateTime.DATETIME_MED)\n : String(value),\n })\n }\n if (!threshold) {\n return helpers.error('datetime.base', {\n value: isLuxonDateTime(value)\n ? value.toLocaleString(DateTime.DATETIME_MED)\n : String(value),\n })\n }\n /* v8 ignore stop */\n const valid = compare(src, threshold, operator)\n if (valid) {\n return value\n }\n return helpers.error('datetime.' + name, {\n limit: threshold.toLocaleString(DateTime.DATETIME_MED),\n value: src.toLocaleString(DateTime.DATETIME_MED),\n })\n },\n args: [\n {\n name: 'limit',\n ref: true,\n assert: (value: unknown) => isLuxonDateTime(toDateTime(value)),\n message: 'must be a datetime',\n },\n ],\n },\n exactly: {\n method(limit) {\n return this.$_addRule({\n name: 'exactly',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '===',\n })\n },\n },\n equals: {\n method(limit) {\n return this.$_addRule({\n name: 'equals',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '=',\n })\n },\n },\n after: {\n method(limit) {\n return this.$_addRule({\n name: 'after',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '>',\n })\n },\n },\n greater: {\n method(limit) {\n return this.$_addRule({\n name: 'greater',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '>',\n })\n },\n },\n before: {\n method(limit) {\n return this.$_addRule({\n name: 'before',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '<',\n })\n },\n },\n less: {\n method(limit) {\n return this.$_addRule({\n name: 'less',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '<',\n })\n },\n },\n afterOrEqual: {\n method(limit) {\n return this.$_addRule({\n name: 'afterOrEqual',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '>=',\n })\n },\n },\n min: {\n method(limit) {\n return this.$_addRule({\n name: 'min',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '>=',\n })\n },\n },\n beforeOrEqual: {\n method(limit) {\n return this.$_addRule({\n name: 'beforeOrEqual',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '<=',\n })\n },\n },\n max: {\n method(limit) {\n return this.$_addRule({\n name: 'max',\n // @ts-ignore\n method: 'compare',\n args: { limit },\n operator: '<=',\n })\n },\n },\n weekend: {\n method() {\n return this.$_addRule({ name: 'weekend' })\n },\n validate(value: DateTime, helpers) {\n const confirmable = toDateTime(value) as DateTime\n if (!confirmable.isWeekend) {\n return helpers.error('datetime.weekend', {\n value: confirmable.toLocaleString(DateTime.DATE_MED),\n })\n }\n return value\n },\n },\n weekday: {\n method() {\n return this.$_addRule({ name: 'weekday' })\n },\n validate(value: DateTime, helpers) {\n const confirmable = toDateTime(value) as DateTime\n if (confirmable.isWeekend) {\n return helpers.error('datetime.weekday', {\n value: confirmable.toLocaleString(DateTime.DATE_MED),\n })\n }\n return value\n },\n },\n toUTC: {\n method() {\n return this.$_setFlag('setZone', 'utc')\n },\n },\n toLocal: {\n method() {\n return this.$_setFlag('setZone', 'local')\n },\n },\n setZone: {\n method(zone: string | Zone) {\n return this.$_setFlag('setZone', zone)\n },\n },\n toFormat: {\n method(format: Tokens) {\n return this.$_setFlag('toFormat', format, { clone: true })\n },\n },\n toLocalizedString: {\n method(this: DatetimeSchema, formatOpts: LocaleOptions) {\n return this.$_setFlag('toFormat', ['toLocaleString', formatOpts], { clone: true })\n },\n },\n toISO: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toISO'], { clone: true })\n },\n },\n toISODate: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toISODate'], { clone: true })\n },\n },\n toISOWeekDate: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toISOWeekDate'], { clone: true })\n },\n },\n toISOTime: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toISOTime'], { clone: true })\n },\n },\n toRFC2822: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toRFC2822'], { clone: true })\n },\n },\n toHTTP: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toHTTP'], { clone: true })\n },\n },\n toSQLDate: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toSQLDate'], { clone: true })\n },\n },\n toSQLTime: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toSQLTime'], { clone: true })\n },\n },\n toSQL: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toSQL'], { clone: true })\n },\n },\n toMillis: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toMillis'], { clone: true })\n },\n },\n toSeconds: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toSeconds'], { clone: true })\n },\n },\n toUnixInteger: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toUnixInteger'], { clone: true })\n },\n },\n toJSON: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toJSON'], { clone: true })\n },\n },\n toBSON: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toBSON'], { clone: true })\n },\n },\n toObject: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toObject', { includeConfig: false }], { clone: true })\n },\n },\n toJSDate: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toJSDate'], { clone: true })\n },\n },\n toRelative: {\n method(this: DatetimeSchema) {\n return this.$_setFlag('toFormat', ['toRelative'], { clone: true })\n },\n },\n setLocale: {\n method(this: DatetimeSchema, locale: string) {\n return this.$_setFlag('setLocale', locale)\n },\n },\n },\n messages,\n }\n}\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\nvar hookCallback;\n\nfunction hooks() {\n return hookCallback.apply(null, arguments);\n}\n\n// This is done to register the method called with moment()\n// without creating circular dependencies.\nfunction setHookCallback(callback) {\n hookCallback = callback;\n}\n\nfunction isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n}\n\nfunction isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n}\n\nfunction hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n}\n\nfunction isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction isUndefined(input) {\n return input === void 0;\n}\n\nfunction isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n}\n\nfunction isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n}\n\nfunction map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n}\n\nfunction extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n}\n\nfunction createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n}\n\nfunction defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n}\n\nfunction getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n}\n\nvar some;\nif (Array.prototype.some) {\n some = Array.prototype.some;\n} else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n}\n\nfunction isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n}\n\nfunction createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n}\n\n// Plugins that add properties should also add the key here (null value),\n// so we can properly clone ourselves.\nvar momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\nfunction copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n}\n\n// Moment prototype object\nfunction Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n}\n\nfunction isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n}\n\nfunction warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n}\n\nfunction deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n}\n\nvar deprecations = {};\n\nfunction deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n}\n\nhooks.suppressDeprecationWarnings = false;\nhooks.deprecationHandler = null;\n\nfunction isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n}\n\nfunction set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n}\n\nfunction mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n}\n\nfunction Locale(config) {\n if (config != null) {\n this.set(config);\n }\n}\n\nvar keys;\n\nif (Object.keys) {\n keys = Object.keys;\n} else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n}\n\nvar defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n};\n\nfunction calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n}\n\nfunction zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n}\n\nvar formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n// token: 'M'\n// padded: ['MM', 2]\n// ordinal: 'Mo'\n// callback: function () { this.month() + 1 }\nfunction addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n}\n\nfunction removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n}\n\nfunction makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n}\n\n// format date using native date object\nfunction formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n}\n\nfunction expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n}\n\nvar defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n};\n\nfunction longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n}\n\nvar defaultInvalidDate = 'Invalid date';\n\nfunction invalidDate() {\n return this._invalidDate;\n}\n\nvar defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\nfunction ordinal(number) {\n return this._ordinal.replace('%d', number);\n}\n\nvar defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n};\n\nfunction relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n}\n\nfunction pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n}\n\nvar aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n};\n\nfunction normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n}\n\nfunction normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n}\n\nvar priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n};\n\nfunction getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n}\n\nvar match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\nregexes = {};\n\nfunction addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n}\n\nfunction getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n}\n\n// Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\nfunction unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n}\n\nfunction regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n}\n\nfunction absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n}\n\nfunction toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n}\n\nvar tokens = {};\n\nfunction addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n}\n\nfunction addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n}\n\nfunction addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n}\n\nfunction isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n}\n\nvar YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n// FORMATTING\n\naddFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n});\n\naddFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n});\n\naddFormatToken(0, ['YYYY', 4], 0, 'year');\naddFormatToken(0, ['YYYYY', 5], 0, 'year');\naddFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n// PARSING\n\naddRegexToken('Y', matchSigned);\naddRegexToken('YY', match1to2, match2);\naddRegexToken('YYYY', match1to4, match4);\naddRegexToken('YYYYY', match1to6, match6);\naddRegexToken('YYYYYY', match1to6, match6);\n\naddParseToken(['YYYYY', 'YYYYYY'], YEAR);\naddParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n});\naddParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n});\naddParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n});\n\n// HELPERS\n\nfunction daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n}\n\n// HOOKS\n\nhooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n};\n\n// MOMENTS\n\nvar getSetYear = makeGetSet('FullYear', true);\n\nfunction getIsLeapYear() {\n return isLeapYear(this.year());\n}\n\nfunction makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n}\n\nfunction get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n}\n\nfunction set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n}\n\n// MOMENTS\n\nfunction stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n}\n\nfunction stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n}\n\nfunction mod(n, x) {\n return ((n % x) + x) % x;\n}\n\nvar indexOf;\n\nif (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n} else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n}\n\nfunction daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n}\n\n// FORMATTING\n\naddFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n});\n\naddFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n});\n\naddFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n});\n\n// PARSING\n\naddRegexToken('M', match1to2, match1to2NoLeadingZero);\naddRegexToken('MM', match1to2, match2);\naddRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n});\naddRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n});\n\naddParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n});\n\naddParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n});\n\n// LOCALES\n\nvar defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\nfunction localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n}\n\nfunction localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n}\n\nfunction handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n}\n\nfunction localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n}\n\n// MOMENTS\n\nfunction setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n}\n\nfunction getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n}\n\nfunction getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n}\n\nfunction monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n}\n\nfunction monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n}\n\nfunction computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n}\n\nfunction createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n}\n\nfunction createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n}\n\n// start-of-first-week - start-of-year\nfunction firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n}\n\n// https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\nfunction dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n}\n\nfunction weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n}\n\nfunction weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n}\n\n// FORMATTING\n\naddFormatToken('w', ['ww', 2], 'wo', 'week');\naddFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n// PARSING\n\naddRegexToken('w', match1to2, match1to2NoLeadingZero);\naddRegexToken('ww', match1to2, match2);\naddRegexToken('W', match1to2, match1to2NoLeadingZero);\naddRegexToken('WW', match1to2, match2);\n\naddWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n);\n\n// HELPERS\n\n// LOCALES\n\nfunction localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n}\n\nvar defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n};\n\nfunction localeFirstDayOfWeek() {\n return this._week.dow;\n}\n\nfunction localeFirstDayOfYear() {\n return this._week.doy;\n}\n\n// MOMENTS\n\nfunction getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\nfunction getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('d', 0, 'do', 'day');\n\naddFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n});\n\naddFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n});\n\naddFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n});\n\naddFormatToken('e', 0, 0, 'weekday');\naddFormatToken('E', 0, 0, 'isoWeekday');\n\n// PARSING\n\naddRegexToken('d', match1to2);\naddRegexToken('e', match1to2);\naddRegexToken('E', match1to2);\naddRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n});\naddRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n});\naddRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n});\n\naddWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n});\n\naddWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n});\n\n// HELPERS\n\nfunction parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n}\n\nfunction parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n}\n\n// LOCALES\nfunction shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n}\n\nvar defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\nfunction localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n}\n\nfunction localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n}\n\nfunction localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n}\n\nfunction handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n}\n\nfunction localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n}\n\n// MOMENTS\n\nfunction getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n}\n\nfunction getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n}\n\nfunction getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n}\n\nfunction weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n}\n\nfunction weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n}\n\nfunction weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n}\n\nfunction computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n}\n\n// FORMATTING\n\nfunction hFormat() {\n return this.hours() % 12 || 12;\n}\n\nfunction kFormat() {\n return this.hours() || 24;\n}\n\naddFormatToken('H', ['HH', 2], 0, 'hour');\naddFormatToken('h', ['hh', 2], 0, hFormat);\naddFormatToken('k', ['kk', 2], 0, kFormat);\n\naddFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n});\n\naddFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n});\n\naddFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n});\n\nfunction meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n}\n\nmeridiem('a', true);\nmeridiem('A', false);\n\n// PARSING\n\nfunction matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n}\n\naddRegexToken('a', matchMeridiem);\naddRegexToken('A', matchMeridiem);\naddRegexToken('H', match1to2, match1to2HasZero);\naddRegexToken('h', match1to2, match1to2NoLeadingZero);\naddRegexToken('k', match1to2, match1to2NoLeadingZero);\naddRegexToken('HH', match1to2, match2);\naddRegexToken('hh', match1to2, match2);\naddRegexToken('kk', match1to2, match2);\n\naddRegexToken('hmm', match3to4);\naddRegexToken('hmmss', match5to6);\naddRegexToken('Hmm', match3to4);\naddRegexToken('Hmmss', match5to6);\n\naddParseToken(['H', 'HH'], HOUR);\naddParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n});\naddParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n});\naddParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n});\naddParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n});\naddParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n});\n\n// LOCALES\n\nfunction localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n}\n\nvar defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\nfunction localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n}\n\nvar baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n};\n\n// internal storage for locale config files\nvar locales = {},\n localeFamilies = {},\n globalLocale;\n\nfunction commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n}\n\nfunction normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n}\n\n// pick the locale from the array\n// try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n// substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\nfunction chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n}\n\nfunction isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n}\n\nfunction loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n}\n\n// This function will load locale and then set the global locale. If\n// no arguments are passed in, it will simply return the current global\n// locale key.\nfunction getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n}\n\nfunction defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n}\n\nfunction updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n}\n\n// returns locale data\nfunction getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n}\n\nfunction listLocales() {\n return keys(locales);\n}\n\nfunction checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n}\n\n// iso 8601 regex\n// 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\nvar extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n// date from iso format\nfunction configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n}\n\nfunction extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n}\n\nfunction untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n}\n\nfunction preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n}\n\nfunction checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n}\n\nfunction calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n}\n\n// date and time from ref 2822 format\nfunction configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n}\n\n// date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\nfunction configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n}\n\nhooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n);\n\n// Pick the first defined of two or three arguments.\nfunction defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n}\n\nfunction currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n}\n\n// convert an array to a date.\n// the array should mirror the parameters below\n// note: all values past the year are optional and will default to the lowest possible value.\n// [year, month, day , hour, minute, second, millisecond]\nfunction configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n}\n\nfunction dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n}\n\n// constant that refers to the ISO standard\nhooks.ISO_8601 = function () {};\n\n// constant that refers to the RFC 2822 form\nhooks.RFC_2822 = function () {};\n\n// date from string and format string\nfunction configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n}\n\nfunction meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n}\n\n// date from string and array of format strings\nfunction configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n}\n\nfunction configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n}\n\nfunction createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n}\n\nfunction prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n}\n\nfunction configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n}\n\nfunction createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n}\n\nfunction createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n}\n\nvar prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n// Pick a moment m from moments so that m[fn](other) is true for all\n// other. This relies on the function fn to be transitive.\n//\n// moments should either be an array of moment objects or an array, whose\n// first element is an array of moment objects.\nfunction pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n}\n\n// TODO: Use [].sort instead?\nfunction min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n}\n\nfunction max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n}\n\nvar now = function () {\n return Date.now ? Date.now() : +new Date();\n};\n\nvar ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n];\n\nfunction isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n}\n\nfunction isValid$1() {\n return this._isValid;\n}\n\nfunction createInvalid$1() {\n return createDuration(NaN);\n}\n\nfunction Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n}\n\nfunction isDuration(obj) {\n return obj instanceof Duration;\n}\n\nfunction absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n}\n\n// compare two arrays, return the number of differences\nfunction compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n}\n\n// FORMATTING\n\nfunction offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n}\n\noffset('Z', ':');\noffset('ZZ', '');\n\n// PARSING\n\naddRegexToken('Z', matchShortOffset);\naddRegexToken('ZZ', matchShortOffset);\naddParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n});\n\n// HELPERS\n\n// timezone chunker\n// '+10:00' > ['10', '00']\n// '-1530' > ['-15', '30']\nvar chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\nfunction offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n}\n\n// Return a moment from input, that is local/utc/zone equivalent to model.\nfunction cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n}\n\nfunction getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n}\n\n// HOOKS\n\n// This function will be called whenever a moment is mutated.\n// It is intended to keep the offset in sync with the timezone.\nhooks.updateOffset = function () {};\n\n// MOMENTS\n\n// keepLocalTime = true means only change the timezone, without\n// affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n// 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n// +0200, so we adjust the time as needed, to be valid.\n//\n// Keeping the time actually adds/subtracts (one hour)\n// from the actual represented time. That is why we call updateOffset\n// a second time. In case it wants us to change the offset again\n// _changeInProgress == true case, then we have to adjust, because\n// there is no such time in the given timezone.\nfunction getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n}\n\nfunction getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n}\n\nfunction setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n}\n\nfunction setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n}\n\nfunction setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n}\n\nfunction hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n}\n\nfunction isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n}\n\nfunction isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n}\n\nfunction isLocal() {\n return this.isValid() ? !this._isUTC : false;\n}\n\nfunction isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n}\n\nfunction isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n}\n\n// ASP.NET json date format regex\nvar aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\nfunction createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n}\n\ncreateDuration.fn = Duration.prototype;\ncreateDuration.invalid = createInvalid$1;\n\nfunction parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n}\n\nfunction positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n}\n\nfunction momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n}\n\n// TODO: remove 'name' arg after deprecation is removed\nfunction createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n}\n\nfunction addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n}\n\nvar add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\nfunction isString(input) {\n return typeof input === 'string' || input instanceof String;\n}\n\n// type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\nfunction isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n}\n\nfunction isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n}\n\nfunction isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n}\n\nfunction isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n}\n\nfunction getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n}\n\nfunction calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n}\n\nfunction clone() {\n return new Moment(this);\n}\n\nfunction isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n}\n\nfunction isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n}\n\nfunction isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n}\n\nfunction isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n}\n\nfunction isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n}\n\nfunction isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n}\n\nfunction diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n}\n\nfunction monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n}\n\nhooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\nhooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\nfunction toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n}\n\nfunction toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n}\n\n/**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\nfunction inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n}\n\nfunction format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n}\n\nfunction from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n}\n\nfunction fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n}\n\nfunction to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n}\n\nfunction toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n}\n\n// If passed a locale key, it will set the locale for this\n// instance. Otherwise, it will return the locale configuration\n// variables for this instance.\nfunction locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n}\n\nvar lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n);\n\nfunction localeData() {\n return this._locale;\n}\n\nvar MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n// actual modulo - handles negative numbers (for dates before 1970):\nfunction mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n}\n\nfunction localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n}\n\nfunction utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n}\n\nfunction startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n}\n\nfunction endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n}\n\nfunction valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n}\n\nfunction unix() {\n return Math.floor(this.valueOf() / 1000);\n}\n\nfunction toDate() {\n return new Date(this.valueOf());\n}\n\nfunction toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n}\n\nfunction toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n}\n\nfunction toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n}\n\nfunction isValid$2() {\n return isValid(this);\n}\n\nfunction parsingFlags() {\n return extend({}, getParsingFlags(this));\n}\n\nfunction invalidAt() {\n return getParsingFlags(this).overflow;\n}\n\nfunction creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n}\n\naddFormatToken('N', 0, 0, 'eraAbbr');\naddFormatToken('NN', 0, 0, 'eraAbbr');\naddFormatToken('NNN', 0, 0, 'eraAbbr');\naddFormatToken('NNNN', 0, 0, 'eraName');\naddFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\naddFormatToken('y', ['y', 1], 'yo', 'eraYear');\naddFormatToken('y', ['yy', 2], 0, 'eraYear');\naddFormatToken('y', ['yyy', 3], 0, 'eraYear');\naddFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\naddRegexToken('N', matchEraAbbr);\naddRegexToken('NN', matchEraAbbr);\naddRegexToken('NNN', matchEraAbbr);\naddRegexToken('NNNN', matchEraName);\naddRegexToken('NNNNN', matchEraNarrow);\n\naddParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n);\n\naddRegexToken('y', matchUnsigned);\naddRegexToken('yy', matchUnsigned);\naddRegexToken('yyy', matchUnsigned);\naddRegexToken('yyyy', matchUnsigned);\naddRegexToken('yo', matchEraYearOrdinal);\n\naddParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\naddParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n});\n\nfunction localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n}\n\nfunction localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n}\n\nfunction localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n}\n\nfunction getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n}\n\nfunction getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n}\n\nfunction getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n}\n\nfunction getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n}\n\nfunction erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n}\n\nfunction erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n}\n\nfunction erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n}\n\nfunction matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n}\n\nfunction matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n}\n\nfunction matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n}\n\nfunction matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n}\n\nfunction computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n}\n\n// FORMATTING\n\naddFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n});\n\naddFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n});\n\nfunction addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n}\n\naddWeekYearFormatToken('gggg', 'weekYear');\naddWeekYearFormatToken('ggggg', 'weekYear');\naddWeekYearFormatToken('GGGG', 'isoWeekYear');\naddWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n// ALIASES\n\n// PARSING\n\naddRegexToken('G', matchSigned);\naddRegexToken('g', matchSigned);\naddRegexToken('GG', match1to2, match2);\naddRegexToken('gg', match1to2, match2);\naddRegexToken('GGGG', match1to4, match4);\naddRegexToken('gggg', match1to4, match4);\naddRegexToken('GGGGG', match1to6, match6);\naddRegexToken('ggggg', match1to6, match6);\n\naddWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n);\n\naddWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n});\n\n// MOMENTS\n\nfunction getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n}\n\nfunction getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n}\n\nfunction getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n}\n\nfunction getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n}\n\nfunction getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n}\n\nfunction getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n}\n\nfunction setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n}\n\n// FORMATTING\n\naddFormatToken('Q', 0, 'Qo', 'quarter');\n\n// PARSING\n\naddRegexToken('Q', match1);\naddParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n});\n\n// MOMENTS\n\nfunction getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n}\n\n// FORMATTING\n\naddFormatToken('D', ['DD', 2], 'Do', 'date');\n\n// PARSING\n\naddRegexToken('D', match1to2, match1to2NoLeadingZero);\naddRegexToken('DD', match1to2, match2);\naddRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n});\n\naddParseToken(['D', 'DD'], DATE);\naddParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n});\n\n// MOMENTS\n\nvar getSetDayOfMonth = makeGetSet('Date', true);\n\n// FORMATTING\n\naddFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n// PARSING\n\naddRegexToken('DDD', match1to3);\naddRegexToken('DDDD', match3);\naddParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n});\n\n// HELPERS\n\n// MOMENTS\n\nfunction getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n}\n\n// FORMATTING\n\naddFormatToken('m', ['mm', 2], 0, 'minute');\n\n// PARSING\n\naddRegexToken('m', match1to2, match1to2HasZero);\naddRegexToken('mm', match1to2, match2);\naddParseToken(['m', 'mm'], MINUTE);\n\n// MOMENTS\n\nvar getSetMinute = makeGetSet('Minutes', false);\n\n// FORMATTING\n\naddFormatToken('s', ['ss', 2], 0, 'second');\n\n// PARSING\n\naddRegexToken('s', match1to2, match1to2HasZero);\naddRegexToken('ss', match1to2, match2);\naddParseToken(['s', 'ss'], SECOND);\n\n// MOMENTS\n\nvar getSetSecond = makeGetSet('Seconds', false);\n\n// FORMATTING\n\naddFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n});\n\naddFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n});\n\naddFormatToken(0, ['SSS', 3], 0, 'millisecond');\naddFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n});\naddFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n});\naddFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n});\naddFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n});\naddFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n});\naddFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n});\n\n// PARSING\n\naddRegexToken('S', match1to3, match1);\naddRegexToken('SS', match1to3, match2);\naddRegexToken('SSS', match1to3, match3);\n\nvar token, getSetMillisecond;\nfor (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n}\n\nfunction parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n}\n\nfor (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n}\n\ngetSetMillisecond = makeGetSet('Milliseconds', false);\n\n// FORMATTING\n\naddFormatToken('z', 0, 0, 'zoneAbbr');\naddFormatToken('zz', 0, 0, 'zoneName');\n\n// MOMENTS\n\nfunction getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n}\n\nfunction getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n}\n\nvar proto = Moment.prototype;\n\nproto.add = add;\nproto.calendar = calendar$1;\nproto.clone = clone;\nproto.diff = diff;\nproto.endOf = endOf;\nproto.format = format;\nproto.from = from;\nproto.fromNow = fromNow;\nproto.to = to;\nproto.toNow = toNow;\nproto.get = stringGet;\nproto.invalidAt = invalidAt;\nproto.isAfter = isAfter;\nproto.isBefore = isBefore;\nproto.isBetween = isBetween;\nproto.isSame = isSame;\nproto.isSameOrAfter = isSameOrAfter;\nproto.isSameOrBefore = isSameOrBefore;\nproto.isValid = isValid$2;\nproto.lang = lang;\nproto.locale = locale;\nproto.localeData = localeData;\nproto.max = prototypeMax;\nproto.min = prototypeMin;\nproto.parsingFlags = parsingFlags;\nproto.set = stringSet;\nproto.startOf = startOf;\nproto.subtract = subtract;\nproto.toArray = toArray;\nproto.toObject = toObject;\nproto.toDate = toDate;\nproto.toISOString = toISOString;\nproto.inspect = inspect;\nif (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n}\nproto.toJSON = toJSON;\nproto.toString = toString;\nproto.unix = unix;\nproto.valueOf = valueOf;\nproto.creationData = creationData;\nproto.eraName = getEraName;\nproto.eraNarrow = getEraNarrow;\nproto.eraAbbr = getEraAbbr;\nproto.eraYear = getEraYear;\nproto.year = getSetYear;\nproto.isLeapYear = getIsLeapYear;\nproto.weekYear = getSetWeekYear;\nproto.isoWeekYear = getSetISOWeekYear;\nproto.quarter = proto.quarters = getSetQuarter;\nproto.month = getSetMonth;\nproto.daysInMonth = getDaysInMonth;\nproto.week = proto.weeks = getSetWeek;\nproto.isoWeek = proto.isoWeeks = getSetISOWeek;\nproto.weeksInYear = getWeeksInYear;\nproto.weeksInWeekYear = getWeeksInWeekYear;\nproto.isoWeeksInYear = getISOWeeksInYear;\nproto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\nproto.date = getSetDayOfMonth;\nproto.day = proto.days = getSetDayOfWeek;\nproto.weekday = getSetLocaleDayOfWeek;\nproto.isoWeekday = getSetISODayOfWeek;\nproto.dayOfYear = getSetDayOfYear;\nproto.hour = proto.hours = getSetHour;\nproto.minute = proto.minutes = getSetMinute;\nproto.second = proto.seconds = getSetSecond;\nproto.millisecond = proto.milliseconds = getSetMillisecond;\nproto.utcOffset = getSetOffset;\nproto.utc = setOffsetToUTC;\nproto.local = setOffsetToLocal;\nproto.parseZone = setOffsetToParsedOffset;\nproto.hasAlignedHourOffset = hasAlignedHourOffset;\nproto.isDST = isDaylightSavingTime;\nproto.isLocal = isLocal;\nproto.isUtcOffset = isUtcOffset;\nproto.isUtc = isUtc;\nproto.isUTC = isUtc;\nproto.zoneAbbr = getZoneAbbr;\nproto.zoneName = getZoneName;\nproto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n);\nproto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n);\nproto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n);\nproto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n);\nproto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n);\n\nfunction createUnix(input) {\n return createLocal(input * 1000);\n}\n\nfunction createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n}\n\nfunction preParsePostFormat(string) {\n return string;\n}\n\nvar proto$1 = Locale.prototype;\n\nproto$1.calendar = calendar;\nproto$1.longDateFormat = longDateFormat;\nproto$1.invalidDate = invalidDate;\nproto$1.ordinal = ordinal;\nproto$1.preparse = preParsePostFormat;\nproto$1.postformat = preParsePostFormat;\nproto$1.relativeTime = relativeTime;\nproto$1.pastFuture = pastFuture;\nproto$1.set = set;\nproto$1.eras = localeEras;\nproto$1.erasParse = localeErasParse;\nproto$1.erasConvertYear = localeErasConvertYear;\nproto$1.erasAbbrRegex = erasAbbrRegex;\nproto$1.erasNameRegex = erasNameRegex;\nproto$1.erasNarrowRegex = erasNarrowRegex;\n\nproto$1.months = localeMonths;\nproto$1.monthsShort = localeMonthsShort;\nproto$1.monthsParse = localeMonthsParse;\nproto$1.monthsRegex = monthsRegex;\nproto$1.monthsShortRegex = monthsShortRegex;\nproto$1.week = localeWeek;\nproto$1.firstDayOfYear = localeFirstDayOfYear;\nproto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\nproto$1.weekdays = localeWeekdays;\nproto$1.weekdaysMin = localeWeekdaysMin;\nproto$1.weekdaysShort = localeWeekdaysShort;\nproto$1.weekdaysParse = localeWeekdaysParse;\n\nproto$1.weekdaysRegex = weekdaysRegex;\nproto$1.weekdaysShortRegex = weekdaysShortRegex;\nproto$1.weekdaysMinRegex = weekdaysMinRegex;\n\nproto$1.isPM = localeIsPM;\nproto$1.meridiem = localeMeridiem;\n\nfunction get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n}\n\nfunction listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n}\n\n// ()\n// (5)\n// (fmt, 5)\n// (fmt)\n// (true)\n// (true, 5)\n// (true, fmt, 5)\n// (true, fmt)\nfunction listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n}\n\nfunction listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n}\n\nfunction listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n}\n\nfunction listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n}\n\nfunction listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n}\n\nfunction listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n}\n\ngetSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n});\n\n// Side effect imports\n\nhooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n);\nhooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n);\n\nvar mathAbs = Math.abs;\n\nfunction abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n}\n\nfunction addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n}\n\n// supports only 2.0-style add(1, 's') or add(duration)\nfunction add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n}\n\n// supports only 2.0-style subtract(1, 's') or subtract(duration)\nfunction subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n}\n\nfunction absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n}\n\nfunction bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n}\n\nfunction daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n}\n\nfunction monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n}\n\nfunction as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n}\n\nfunction makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n}\n\nvar asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\nfunction clone$1() {\n return createDuration(this);\n}\n\nfunction get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n}\n\nfunction makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n}\n\nvar milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\nfunction weeks() {\n return absFloor(this.days() / 7);\n}\n\nvar round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n// helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\nfunction substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n}\n\nfunction relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n}\n\n// This function allows you to set the rounding function for relative time strings\nfunction getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n}\n\n// This function allows you to set a threshold for relative time strings\nfunction getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n}\n\nfunction humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n}\n\nvar abs$1 = Math.abs;\n\nfunction sign(x) {\n return (x > 0) - (x < 0) || +x;\n}\n\nfunction toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n}\n\nvar proto$2 = Duration.prototype;\n\nproto$2.isValid = isValid$1;\nproto$2.abs = abs;\nproto$2.add = add$1;\nproto$2.subtract = subtract$1;\nproto$2.as = as;\nproto$2.asMilliseconds = asMilliseconds;\nproto$2.asSeconds = asSeconds;\nproto$2.asMinutes = asMinutes;\nproto$2.asHours = asHours;\nproto$2.asDays = asDays;\nproto$2.asWeeks = asWeeks;\nproto$2.asMonths = asMonths;\nproto$2.asQuarters = asQuarters;\nproto$2.asYears = asYears;\nproto$2.valueOf = valueOf$1;\nproto$2._bubble = bubble;\nproto$2.clone = clone$1;\nproto$2.get = get$2;\nproto$2.milliseconds = milliseconds;\nproto$2.seconds = seconds;\nproto$2.minutes = minutes;\nproto$2.hours = hours;\nproto$2.days = days;\nproto$2.weeks = weeks;\nproto$2.months = months;\nproto$2.years = years;\nproto$2.humanize = humanize;\nproto$2.toISOString = toISOString$1;\nproto$2.toString = toISOString$1;\nproto$2.toJSON = toISOString$1;\nproto$2.locale = locale;\nproto$2.localeData = localeData;\n\nproto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n);\nproto$2.lang = lang;\n\n// FORMATTING\n\naddFormatToken('X', 0, 0, 'unix');\naddFormatToken('x', 0, 0, 'valueOf');\n\n// PARSING\n\naddRegexToken('x', matchSigned);\naddRegexToken('X', matchTimestamp);\naddParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n});\naddParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n});\n\n//! moment.js\n\nhooks.version = '2.30.1';\n\nsetHookCallback(createLocal);\n\nhooks.fn = proto;\nhooks.min = min;\nhooks.max = max;\nhooks.now = now;\nhooks.utc = createUTC;\nhooks.unix = createUnix;\nhooks.months = listMonths;\nhooks.isDate = isDate;\nhooks.locale = getSetGlobalLocale;\nhooks.invalid = createInvalid;\nhooks.duration = createDuration;\nhooks.isMoment = isMoment;\nhooks.weekdays = listWeekdays;\nhooks.parseZone = createInZone;\nhooks.localeData = getLocale;\nhooks.isDuration = isDuration;\nhooks.monthsShort = listMonthsShort;\nhooks.weekdaysMin = listWeekdaysMin;\nhooks.defineLocale = defineLocale;\nhooks.updateLocale = updateLocale;\nhooks.locales = listLocales;\nhooks.weekdaysShort = listWeekdaysShort;\nhooks.normalizeUnits = normalizeUnits;\nhooks.relativeTimeRounding = getSetRelativeTimeRounding;\nhooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\nhooks.calendarFormat = getCalendarFormat;\nhooks.prototype = proto;\n\n// currently HTML5 input type only supports 24-hour formats\nhooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n};\n\nexport default hooks;\n","'use strict';\n\nconst Moment = require('moment');\n\n\nconst internals = {};\n\n\nmodule.exports = (joi) => {\n\n const args = {\n format: joi.alternatives([\n joi.string(),\n joi.array().items(joi.string().invalid('iso', 'javascript', 'unix'))\n ])\n };\n\n return {\n\n type: 'date',\n base: joi.date(),\n\n coerce: {\n from: 'string',\n method: function (value, { schema }) {\n\n const format = schema.$_getFlag('format');\n if (!format) {\n return;\n }\n\n const date = schema.$_getFlag('utc') ? Moment.utc(value, format, true) : Moment(value, format, true);\n if (date.isValid()) {\n return { value: date.toDate() };\n }\n }\n },\n\n rules: {\n utc: {\n method: function (enabled = true) {\n\n return this.$_setFlag('utc', enabled);\n }\n }\n },\n\n overrides: {\n format: function (format) {\n\n joi.attempt(format, args.format, 'Invalid format');\n\n if (['iso', 'javascript', 'unix'].includes(format)) {\n return this.$_super.format(format);\n }\n\n return this.$_setFlag('format', format);\n }\n }\n };\n};\n\n// Default export for TypeScript module interop\n\nmodule.exports.default = module.exports;\n","'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n","'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n","'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numberic identifiers include numberic identifiers but can be longer.\n// Therefore non-numberic identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifer, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n","'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n","'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n","'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n return (\n compareIdentifiers(this.major, other.major) ||\n compareIdentifiers(this.minor, other.minor) ||\n compareIdentifiers(this.patch, other.patch)\n )\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (compareIdentifiers(this.prerelease[0], identifier) === 0) {\n if (isNaN(this.prerelease[1])) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n","'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n","'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n","'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n","'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are preleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n","'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n","'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n","'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n","'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n","'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n","'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n","'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n","'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n","'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n","'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n","'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n","'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n","'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0 <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0 <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n }${z} <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n","'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n","'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n","'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n","'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n","'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n","'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n","'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n","'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n","'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n","'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !satisfies(gt.semver, String(c), options)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !satisfies(lt.semver, String(c), options)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n","'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([\n c + ';addEventListener(\"error\",function(e){e=e.error;postMessage({$e$:[e.message,e.code,e.stack]})})'\n ], { type: 'text/javascript' }))));\n w.onmessage = function (e) {\n var d = e.data, ed = d.$e$;\n if (ed) {\n var err = new Error(ed[0]);\n err['code'] = ed[1];\n err.stack = ed[2];\n cb(err, null);\n }\n else\n cb(null, d);\n };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, i32 = Int32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new i32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return { b: b, r: r };\n};\nvar _a = freb(fleb, 2), fl = _a.b, revfl = _a.r;\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b.b, revfd = _b.r;\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >> 8) | ((x & 0x00FF) << 8)) >> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i) {\n if (cd[i])\n ++l[cd[i] - 1];\n }\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 1; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p + 7) / 8) | 0; };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n return new u8(v.subarray(s, e));\n};\n/**\n * Codes for errors generated within this library\n */\nexport var FlateErrorCode = {\n UnexpectedEOF: 0,\n InvalidBlockType: 1,\n InvalidLengthLiteral: 2,\n InvalidDistance: 3,\n StreamFinished: 4,\n NoStreamHandler: 5,\n InvalidHeader: 6,\n NoCallback: 7,\n InvalidUTF8: 8,\n ExtraFieldTooLong: 9,\n InvalidDate: 10,\n FilenameTooLong: 11,\n StreamFinishing: 12,\n InvalidZipData: 13,\n UnknownCompressionMethod: 14\n};\n// error codes\nvar ec = [\n 'unexpected EOF',\n 'invalid block type',\n 'invalid length/literal',\n 'invalid distance',\n 'stream finished',\n 'no stream handler',\n ,\n 'no callback',\n 'invalid UTF-8 data',\n 'extra field too long',\n 'date not in range 1980-2099',\n 'filename too long',\n 'stream finishing',\n 'invalid zip data'\n // determined by unknown compression method\n];\n;\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, st, buf, dict) {\n // source length dict length\n var sl = dat.length, dl = dict ? dict.length : 0;\n if (!sl || st.f && !st.l)\n return buf || new u8(0);\n var noBuf = !buf;\n // have to estimate size\n var resize = noBuf || st.i != 2;\n // no state\n var noSt = st.i;\n // Assumes roughly 33% compression ratio average\n if (noBuf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n err(0);\n break;\n }\n // ensure size\n if (resize)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8, st.f = final;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n err(1);\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17\n if (resize)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (!c)\n err(2);\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >> 4;\n if (!d)\n err(3);\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & (1 << b) - 1, pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n err(0);\n break;\n }\n if (resize)\n cbuf(bt + 131072);\n var end = bt + add;\n if (bt < dt) {\n var shift = dl - dt, dend = Math.min(dt, end);\n if (shift + bt < 0)\n err(3);\n for (; bt < dend; ++bt)\n buf[bt] = dict[shift + bt];\n }\n for (; bt < end; ++bt)\n buf[bt] = buf[bt - dt];\n }\n }\n st.l = lm, st.p = lpos, st.b = bt, st.f = final;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n // don't reallocate for streams or user buffers\n return bt != buf.length && noBuf ? slc(buf, 0, bt) : buf.subarray(0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >> 8;\n d[o + 2] |= v >> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return { t: et, l: 0 };\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return { t: v, l: 1 };\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return { t: new u8(tr), l: mbt };\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return { c: cl.subarray(0, cli), n: s };\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a.t, mlb = _a.l;\n var _b = hTree(df, 15), ddt = _b.t, mdb = _b.l;\n var _c = lc(dlt), lclt = _c.c, nlc = _c.n;\n var _d = lc(ddt), lcdt = _d.c, ndc = _d.n;\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n ++lcfreq[lclt[i] & 31];\n for (var i = 0; i < lcdt.length; ++i)\n ++lcfreq[lcdt[i] & 31];\n var _e = hTree(lcfreq, 7), lct = _e.t, mlcb = _e.l;\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + 2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18];\n if (bs >= 0 && flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >> 5) & 127), p += clct[i] >> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n var sym = syms[i];\n if (sym > 255) {\n var len = (sym >> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (sym >> 23) & 31), p += fleb[len];\n var dst = sym & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (sym >> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[sym]), p += ll[sym];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new i32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, st) {\n var s = st.z || dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var lst = st.l;\n var pos = (st.r || 0) & 7;\n if (lvl) {\n if (pos)\n w[0] = st.r >> 3;\n var opt = deo[lvl - 1];\n var n = opt >> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = st.p || new u16(32768), head = st.h || new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new i32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx blkpos\n var lc_1 = 0, eb = 0, i = st.i || 0, li = 0, wi = st.w || 0, bs = 0;\n for (; i + 2 < s; ++i) {\n // hash value\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && (rem > 423 || !lst)) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = i - dif + j & 32767;\n var pti = prev[ti];\n var cd = ti - pti & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += imod - pimod & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one int32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n for (i = Math.max(i, wi); i < s; ++i) {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n if (!lst) {\n st.r = (pos & 7) | w[(pos / 8) | 0] << 3;\n // shft(pos) now 1 less if pos & 7 != 0\n pos -= 7;\n st.h = head, st.p = prev, st.i = i, st.w = wi;\n }\n }\n else {\n for (var i = st.w || 0; i < s + lst; i += 65535) {\n // end\n var e = i + 65535;\n if (e >= s) {\n // write final block\n w[(pos / 8) | 0] = lst;\n e = s;\n }\n pos = wfblk(w, pos + 1, dat.subarray(i, e));\n }\n st.i = s;\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Adler32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length | 0;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a & 0xFF00) << 8 | (b & 255) << 8 | (b >> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n if (!st) {\n st = { l: 1 };\n if (opt.dictionary) {\n var dict = opt.dictionary.subarray(-32768);\n var newDat = new u8(dict.length + dat.length);\n newDat.set(dict);\n newDat.set(dat, dict.length);\n dat = newDat;\n st.w = dict.length;\n }\n }\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? (st.l ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 20) : (12 + opt.mem), pre, post, st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/\\s+/g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return fnStr;\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k].buffer) {\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n fnStr = wcln(fns[i], fnStr, td_1);\n ch[id] = { c: wcln(fns[m], fnStr, td_1), e: td_1 };\n }\n var td = mrg({}, ch[id].e);\n return wk(ch[id].c + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, i32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, ec, hMap, max, bits, bits16, shft, slc, err, inflt, inflateSync, pbf, gopt]; };\nvar bDflt = function () { return [u8, u16, i32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zls]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get opts\nvar gopt = function (o) { return o && {\n out: o.size && new u8(o.size),\n dictionary: o.dictionary\n}; };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) {\n if (ev.data.length) {\n strm.push(ev.data[0], ev.data[1]);\n postMessage([ev.data[0].length]);\n }\n else\n strm.flush();\n };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id, flush, ext) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else if (!Array.isArray(dat))\n ext(dat);\n else if (dat.length == 1) {\n strm.queuedSize -= dat[0];\n if (strm.ondrain)\n strm.ondrain(dat[0]);\n }\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.queuedSize = 0;\n strm.push = function (d, f) {\n if (!strm.ondata)\n err(5);\n if (t)\n strm.ondata(err(4, 0, 1), null, !!f);\n strm.queuedSize += d.length;\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n if (flush) {\n strm.flush = function () { w.postMessage([]); };\n }\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n err(6, 'invalid gzip data');\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += (d[10] | d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + (o.filename ? o.filename.length + 1 : 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (o.dictionary && 32);\n c[1] |= 31 - ((c[0] << 8) | c[1]) % 31;\n if (o.dictionary) {\n var h = adler();\n h.p(o.dictionary);\n wbytes(c, 2, h.d());\n }\n};\n// zlib start\nvar zls = function (d, dict) {\n if ((d[0] & 15) != 8 || (d[0] >> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n err(6, 'invalid zlib data');\n if ((d[1] >> 5 & 1) == +!dict)\n err(6, 'invalid zlib data: ' + (d[1] & 32 ? 'need' : 'unexpected') + ' dictionary');\n return (d[1] >> 3 & 4) + 2;\n};\nfunction StrmOpt(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n this.s = { l: 0, i: 32768, w: 32768, z: 32768 };\n // Buffer length must always be 0 mod 32768 for index calculations to be correct when modifying head and prev\n // 98304 = 32768 (lookback) + 65536 (common chunk size)\n this.b = new u8(98304);\n if (this.o.dictionary) {\n var dict = this.o.dictionary.subarray(-32768);\n this.b.set(dict, 32768 - dict.length);\n this.s.i = 32768 - dict.length;\n }\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, this.s), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n var endLen = chunk.length + this.s.z;\n if (endLen > this.b.length) {\n if (endLen > 2 * this.b.length - 32768) {\n var newBuf = new u8(endLen & -32768);\n newBuf.set(this.b.subarray(0, this.s.z));\n this.b = newBuf;\n }\n var split = this.b.length - this.s.z;\n this.b.set(chunk.subarray(0, split), this.s.z);\n this.s.z = this.b.length;\n this.p(this.b, false);\n this.b.set(this.b.subarray(-32768));\n this.b.set(chunk.subarray(split), 32768);\n this.s.z = chunk.length - split + 32768;\n this.s.i = 32766, this.s.w = 32768;\n }\n else {\n this.b.set(chunk, this.s.z);\n this.s.z += chunk.length;\n }\n this.s.l = final & 1;\n if (this.s.z > this.s.w + 8191 || final) {\n this.p(this.b, final || false);\n this.s.w = this.s.i, this.s.i -= 2;\n }\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * deflated output for small inputs.\n */\n Deflate.prototype.flush = function () {\n if (!this.ondata)\n err(5);\n if (this.s.l)\n err(4);\n this.p(this.b, false);\n this.s.w = this.s.i, this.s.i -= 2;\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6, 1);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n function Inflate(opts, cb) {\n // no StrmOpt here to avoid adding to workerizer\n if (typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n var dict = opts && opts.dictionary && opts.dictionary.subarray(-32768);\n this.s = { i: 0, b: dict ? dict.length : 0 };\n this.o = new u8(32768);\n this.p = new u8(0);\n if (dict)\n this.o.set(dict);\n }\n Inflate.prototype.e = function (c) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n if (!this.p.length)\n this.p = c;\n else if (c.length) {\n var n = new u8(this.p.length + c.length);\n n.set(this.p), n.set(c, this.p.length), this.p = n;\n }\n };\n Inflate.prototype.c = function (final) {\n this.s.i = +(this.d = final || false);\n var bts = this.s.b;\n var dt = inflt(this.p, this.s, this.o);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n function AsyncInflate(opts, cb) {\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Inflate(ev.data);\n onmessage = astrm(strm);\n }, 7, 0);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gopt(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, opts) {\n return inflt(data, { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n this.l += chunk.length;\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, this.s);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * GZIPped output for small inputs.\n */\n Gzip.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8, 1);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming single or multi-member GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n function Gunzip(opts, cb) {\n this.v = 1;\n this.r = 0;\n Inflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n this.r += chunk.length;\n if (this.v) {\n var p = this.p.subarray(this.v - 1);\n var s = p.length > 3 ? gzs(p) : 4;\n if (s > p.length) {\n if (!final)\n return;\n }\n else if (this.v > 1 && this.onmember) {\n this.onmember(this.r - p.length);\n }\n this.p = p.subarray(s), this.v = 0;\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n // process concatenated GZIP\n if (this.s.f && !this.s.l && !final) {\n this.v = shft(this.s.p) + 9;\n this.s = { i: 0 };\n this.o = new u8(0);\n this.push(new u8(0), final);\n }\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming single or multi-member GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n function AsyncGunzip(opts, cb) {\n var _this = this;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Gunzip(ev.data);\n strm.onmember = function (offset) { return postMessage(offset); };\n onmessage = astrm(strm);\n }, 9, 0, function (offset) { return _this.onmember && _this.onmember(offset); });\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0], ev.data[1])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, opts) {\n var st = gzs(data);\n if (st + 8 > data.length)\n err(6, 'invalid gzip data');\n return inflt(data.subarray(st, -8), { i: 2 }, opts && opts.out || new u8(gzl(data)), opts && opts.dictionary);\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n this.c.p(chunk);\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n var raw = dopt(c, this.o, this.v && (this.o.dictionary ? 6 : 2), f && 4, this.s);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n /**\n * Flushes buffered uncompressed data. Useful to immediately retrieve the\n * zlibbed output for small inputs.\n */\n Zlib.prototype.flush = function () {\n Deflate.prototype.flush.call(this);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10, 1);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, opts.dictionary ? 6 : 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n function Unzlib(opts, cb) {\n Inflate.call(this, opts, cb);\n this.v = opts && opts.dictionary ? 2 : 1;\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 6 && !final)\n return;\n this.p = this.p.subarray(zls(this.p, this.v - 1)), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n err(6, 'invalid zlib data');\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n function AsyncUnzlib(opts, cb) {\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, StrmOpt.call(this, opts, cb), function (ev) {\n var strm = new Unzlib(ev.data);\n onmessage = astrm(strm);\n }, 11, 0);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gopt(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, opts) {\n return inflt(data.subarray(zls(data, opts && opts.dictionary), -4), { i: 2 }, opts && opts.out, opts && opts.dictionary);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n function Decompress(opts, cb) {\n this.o = StrmOpt.call(this, opts, cb) || {};\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n }\n // init substream\n // overriden by AsyncDecompress\n Decompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (dat, final) {\n _this.ondata(dat, final);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(this.o)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(this.o)\n : new this.Z(this.o);\n this.i();\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n function AsyncDecompress(opts, cb) {\n Decompress.call(this, opts, cb);\n this.queuedSize = 0;\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n }\n AsyncDecompress.prototype.i = function () {\n var _this = this;\n this.s.ondata = function (err, dat, final) {\n _this.ondata(err, dat, final);\n };\n this.s.ondrain = function (size) {\n _this.queuedSize -= size;\n if (_this.ondrain)\n _this.ondrain(size);\n };\n };\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n this.queuedSize += chunk.length;\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param opts The decompression options\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, opts) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, opts)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, opts)\n : unzlibSync(data, opts);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k, op = o;\n if (Array.isArray(val))\n op = mrg(o, val[1]), val = val[0];\n if (val instanceof u8)\n t[n] = [val, op];\n else {\n t[n += '/'] = [new u8(0), op];\n fltn(val, n, t, o);\n }\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return { s: r, r: slc(d, i - 1) };\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n err(8);\n this.t = null;\n }\n return;\n }\n if (!this.p)\n err(4);\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (final) {\n if (r.length)\n err(8);\n this.p = null;\n }\n else\n this.p = r;\n this.ondata(s, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n if (this.d)\n err(4);\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td) {\n return td.decode(dat);\n }\n else {\n var _a = dutf8(dat), s = _a.s, r = _a.r;\n if (r.length)\n err(8);\n return s;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n err(9);\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c < 0 && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n err(10);\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >> 1)), b += 4;\n if (c != -1) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c < 0 ? -c - 2 : c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n err(5);\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this = this;\n if (!this.ondata)\n err(5);\n // finishing or finished\n if (this.d & 2)\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, false);\n else {\n var f = strToU8(file.filename), fl_1 = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl_1 != file.filename.length || (o && (com.length != o.length));\n var hl_1 = fl_1 + exfl(file.extra) + 30;\n if (fl_1 > 65535)\n this.ondata(err(11, 0, 1), null, false);\n var header = new u8(hl_1);\n wzh(header, 0, file, f, u, -1);\n var chks_1 = [header];\n var pAll_1 = function () {\n for (var _i = 0, chks_2 = chks_1; _i < chks_2.length; _i++) {\n var chk = chks_2[_i];\n _this.ondata(null, chk, false);\n }\n chks_1 = [];\n };\n var tr_1 = this.d;\n this.d = 0;\n var ind_1 = this.u.length;\n var uf_1 = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll_1();\n if (tr_1) {\n var nxt = _this.u[ind_1 + 1];\n if (nxt)\n nxt.r();\n else\n _this.d = 1;\n }\n tr_1 = 1;\n }\n });\n var cl_1 = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this.ondata(err, dat, final);\n _this.terminate();\n }\n else {\n cl_1 += dat.length;\n chks_1.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl_1);\n wbytes(dd, 12, file.size);\n chks_1.push(dd);\n uf_1.c = cl_1, uf_1.b = hl_1 + cl_1 + 16, uf_1.crc = file.crc, uf_1.size = file.size;\n if (tr_1)\n uf_1.r();\n tr_1 = 1;\n }\n else if (tr_1)\n pAll_1();\n }\n };\n this.u.push(uf_1);\n }\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this = this;\n if (this.d & 2) {\n this.ondata(err(4 + (this.d & 1) * 8, 0, 1), null, true);\n return;\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this.d & 1))\n return;\n _this.u.splice(-1, 1);\n _this.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, -f.c - 2, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cbd(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cbd(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl(err(11, 0, 1), null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n err(11);\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this = this;\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this = this;\n if (!this.onfile)\n err(5);\n if (!this.p)\n err(4);\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_3 = [];\n this_1.k.unshift(chks_3);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n err(5);\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this.o[cmp_1];\n if (!ctr)\n file_1.ondata(err(14, 'unknown compression type ' + cmp_1, 1), null, false);\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_4 = chks_3; _i < chks_4.length; _i++) {\n var dat = chks_4[_i];\n d_1.push(dat, false);\n }\n if (_this.k[0] == chks_3 && _this.c)\n _this.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n err(13);\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\nvar mt = typeof queueMicrotask == 'function' ? queueMicrotask : typeof setTimeout == 'function' ? setTimeout : function (fn) { fn(); };\nexport function unzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n err(7);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var cbd = function (a, b) {\n mt(function () { cb(a, b); });\n };\n mt(function () { cbd = cb; });\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cbd(err(13, 0, 1), null);\n return tAll;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (lft) {\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = lft = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cbd(e, null);\n }\n else {\n if (d)\n files[fn] = d;\n if (!--lft)\n cbd(null, files);\n }\n };\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_1\n })) {\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n // Synchronously decompress under 512KB, or barely-compressed data\n if (su < 524288 || sc > 0.8 * su) {\n try {\n cbl(null, inflateSync(infl, { out: new u8(su) }));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl(err(14, 'unknown compression type ' + c_1, 1), null);\n }\n else\n cbl(null, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n }\n else\n cbd(null, {});\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @param opts The ZIP extraction options\n * @returns The decompressed files\n */\nexport function unzipSync(data, opts) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n err(13);\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295 || c == 65535;\n if (z) {\n var ze = b4(data, e - 12);\n z = b4(data, ze) == 0x6064B50;\n if (z) {\n c = b4(data, ze + 32);\n o = b4(data, ze + 48);\n }\n }\n var fltr = opts && opts.filter;\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!fltr || fltr({\n name: fn,\n size: sc,\n originalSize: su,\n compression: c_2\n })) {\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), { out: new u8(su) });\n else\n err(14, 'unknown compression type ' + c_2);\n }\n }\n return files;\n}\n","import { validator } from './'\nimport * as semver from 'semver'\nimport { DateTime } from 'luxon'\nimport { isPlainObject, isLuxonDateTime } from './guards'\nimport { zlibSync, unzlibSync, strToU8, strFromU8 } from 'fflate'\nimport type { AnySchema } from './schemas'\n\nconst utoa = (data: string): string => {\n const buffer = strToU8(data)\n const zipped = zlibSync(buffer, { level: 9 })\n const binary = strFromU8(zipped, true)\n return btoa(binary)\n}\n\nconst atou = (base64: string): string => {\n const binary = atob(base64)\n\n // zlib header (x78), level 9 (xDA)\n if (binary.startsWith('\\x78\\xDA')) {\n const buffer = strToU8(binary, true)\n const unzipped = unzlibSync(buffer)\n return strFromU8(unzipped)\n }\n\n // old unicode hacks for backward compatibility\n // https://base64.guru/developers/javascript/examples/unicode-strings\n return decodeURIComponent(escape(binary))\n}\n\n/* v8 ignore start */\nconst backToDateTime = (value: any): DateTime => {\n if (value instanceof DateTime) {\n return value\n }\n return DateTime.fromObject(value.c, { zone: value.zone }).setLocale(value.loc.locale)\n}\n/* v8 ignore stop */\n\n/**\n * Encodes a validation schema into a compressed, base64-encoded string for transport between environments.\n *\n * This function serializes a validation schema description along with version information,\n * compresses it using zlib, and encodes it as a base64 string. This enables efficient\n * transfer of validation schemas between frontend and backend environments while\n * maintaining version compatibility.\n *\n * The encoded string includes:\n * - Current library version for compatibility checking\n * - Complete schema description from `schema.describe()`\n * - Zlib compression for minimal payload size\n * - Base64 encoding for web-safe transport\n *\n * @param schema - The validation schema to encode\n * @returns A compressed, base64-encoded string representing the schema\n *\n * @example Basic Usage\n * ```typescript\n * import Joi from 'joi'\n * import { encode } from './utils'\n *\n * const schema = Joi.object({\n * name: Joi.string().required(),\n * age: Joi.number().min(0)\n * })\n *\n * const encoded = encode(schema)\n * // Returns: \"eJyrVkosLcmIz8nPS1WyUvJIzcnJT...\"\n * ```\n *\n * @example Cross-Environment Transfer\n * ```typescript\n * // Backend\n * const validationSchema = Joi.object({\n * email: Joi.string().email().required()\n * })\n * const encodedSchema = encode(validationSchema)\n *\n * // Send to frontend via API\n * response.json({ schema: encodedSchema })\n *\n * // Frontend can then decode and use the same validation\n * ```\n *\n * @see {@link decode} For decoding schemas from encoded strings\n */\nexport const encode = (schema: AnySchema): string => {\n const description = schema.describe()\n for (const key in description.keys) {\n if (\n 'undefined' === typeof description.keys[key] ||\n 'undefined' === typeof description.keys[key].rules\n )\n continue\n description.keys[key].rules = description.keys[key].rules.map((rule: any) => {\n for (const argKey in rule.args) {\n const value = rule.args[argKey]\n if (isLuxonDateTime(value)) {\n rule.args[argKey] = backToDateTime(value).toJSDate()\n }\n }\n return rule\n })\n }\n const json = JSON.stringify({ version: __VERSION__, schema: description })\n return utoa(json)\n}\n\n/**\n * Decodes a base64-encoded schema string back into a usable validation schema.\n *\n * This function reverses the encoding process, decompressing and parsing the\n * encoded schema while performing version compatibility checks. It ensures\n * that schemas encoded with newer versions of the library are rejected to\n * prevent runtime errors from incompatible schema formats.\n *\n * The function handles:\n * - Base64 decoding and zlib decompression\n * - Version compatibility validation using semantic versioning\n * - Backward compatibility with legacy encoding formats\n * - Input validation and error handling\n * - Schema reconstruction using Joi's build method\n *\n * @param base64 - The base64-encoded schema string\n * @returns A reconstructed validation schema ready for validation\n * @throws {TypeError} When the encoded string is not a valid schema\n * @throws {TypeError} When the schema version is invalid or incompatible\n *\n * @example Basic Usage\n * ```typescript\n * import { decode } from './utils'\n *\n * const encodedSchema = \"eJyrVkosLcmIz8nPS1WyUvJIzcnJT...\"\n * const schema = decode(encodedSchema)\n *\n * // Use the decoded schema for validation\n * const result = schema.validate({ name: \"John\", age: 30 })\n * ```\n *\n * @example Error Handling\n * ```typescript\n * try {\n * const schema = decode(untrustedEncodedString)\n * // Use schema safely\n * } catch (error) {\n * if (error instanceof TypeError) {\n * console.error('Invalid or incompatible schema:', error.message)\n * }\n * }\n * ```\n *\n * @example Version Compatibility\n * ```typescript\n * // Schema encoded with v2.1.0, current version is v2.0.0\n * const futureSchema = \"...\" // Contains version 2.1.0\n * decode(futureSchema) // Throws: Schema version 2.1.0 is not compatible\n *\n * // Schema encoded with v1.9.0, current version is v2.0.0\n * const oldSchema = \"...\" // Contains version 1.9.0\n * const schema = decode(oldSchema) // Works - backward compatible\n * ```\n *\n * @see {@link encode} For encoding schemas into transportable strings\n */\nexport const decode = (base64: string): AnySchema => {\n const json = atou(base64)\n const description = JSON.parse(json)\n if (\n !isPlainObject(description) ||\n !('version' in description) ||\n !('schema' in description) ||\n typeof description.version !== 'string' ||\n !isPlainObject(description.schema)\n ) {\n throw new TypeError('Not a valid encoded schema')\n }\n const { version: schemaVersion, schema } = description\n if (semver.valid(__VERSION__)) {\n if (!semver.valid(semver.coerce(schemaVersion))) {\n throw new TypeError(`Invalid schema version: ${schemaVersion}`)\n }\n if (semver.gt(semver.coerce(schemaVersion)!, __VERSION__)) {\n throw new TypeError(\n `Schema version ${schemaVersion} is not compatible with current version ${__VERSION__}`\n )\n }\n }\n return validator.build(schema) as AnySchema\n}\n","import { default as Joi } from 'joi'\nimport { bigint } from './schemas/bigint'\nimport { datetime } from './schemas/datetime'\nimport { default as joiDateExtension } from '@joi/date'\nimport type { Root } from 'joi'\nimport type { BigIntSchema } from './schemas/bigint'\nimport type { DatetimeSchema } from './schemas/datetime'\n\n/**\n * Extended Joi root interface that includes custom schema types for\n * additional validation scenarios.\n *\n * This interface extends the standard Joi Root interface to include\n * additional schema types\n *\n * @example\n * ```typescript\n * import { validator } from '@nhtio/validation'\n *\n * const schema = validator.object({\n * id: validator.bigint().positive().required(),\n * balance: validator.bigint().min(0n).optional()\n * })\n * ```\n *\n * @public\n */\nexport interface ValidationRoot extends Root {\n bigint(): BigIntSchema\n datetime(): DatetimeSchema\n}\n\n/**\n * Extended Joi instance with custom schema types.\n *\n * This instance includes all standard Joi functionality plus additional\n * schema types for additional validation scenarios.\n *\n * @example\n * ```typescript\n * import { validator } from '@nhtio/validation'\n *\n * // Standard Joi usage\n * const userSchema = validator.object({\n * name: validator.string().required(),\n * age: validator.number().min(0),\n * balance: validator.bigint().positive() // Custom BigInt type\n * })\n * ```\n *\n * @public\n */\nexport const validator: ValidationRoot = Joi.extend(joiDateExtension)\n .extend(bigint)\n .extend(datetime) as ValidationRoot\n\nexport type { BigIntSchema }\nexport type { DatetimeSchema }\nexport type * from './schemas'\nexport { encode, decode } from './utils'\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","'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","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = internals.Bench = class {\n\n constructor() {\n\n this.ts = 0;\n this.reset();\n }\n\n reset() {\n\n this.ts = internals.Bench.now();\n }\n\n elapsed() {\n\n return internals.Bench.now() - this.ts;\n }\n\n static now() {\n\n const ts = process.hrtime();\n return (ts[0] * 1e3) + (ts[1] / 1e6);\n }\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function () { };\n","'use strict';\n\nconst Ignore = require('./ignore');\n\n\nconst internals = {};\n\n\nmodule.exports = function () {\n\n return new Promise(Ignore);\n};\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 (string) {\n\n // Escape ^$.*+-?=!:|\\/()[]{},\n\n return string.replace(/[\\^\\$\\.\\*\\+\\-\\?\\=\\!\\:\\|\\\\\\/\\(\\)\\[\\]\\{\\}\\,]/g, '\\\\$&');\n};\n","'use strict';\n\nconst Assert = require('./assert');\nconst DeepEqual = require('./deepEqual');\nconst EscapeRegex = require('./escapeRegex');\nconst Utils = require('./utils');\n\n\nconst internals = {};\n\n\nmodule.exports = function (ref, values, options = {}) { // options: { deep, once, only, part, symbols }\n\n /*\n string -> string(s)\n array -> item(s)\n object -> key(s)\n object -> object (key:value)\n */\n\n if (typeof values !== 'object') {\n values = [values];\n }\n\n Assert(!Array.isArray(values) || values.length, 'Values array cannot be empty');\n\n // String\n\n if (typeof ref === 'string') {\n return internals.string(ref, values, options);\n }\n\n // Array\n\n if (Array.isArray(ref)) {\n return internals.array(ref, values, options);\n }\n\n // Object\n\n Assert(typeof ref === 'object', 'Reference must be string or an object');\n return internals.object(ref, values, options);\n};\n\n\ninternals.array = function (ref, values, options) {\n\n if (!Array.isArray(values)) {\n values = [values];\n }\n\n if (!ref.length) {\n return false;\n }\n\n if (options.only &&\n options.once &&\n ref.length !== values.length) {\n\n return false;\n }\n\n let compare;\n\n // Map values\n\n const map = new Map();\n for (const value of values) {\n if (!options.deep ||\n !value ||\n typeof value !== 'object') {\n\n const existing = map.get(value);\n if (existing) {\n ++existing.allowed;\n }\n else {\n map.set(value, { allowed: 1, hits: 0 });\n }\n }\n else {\n compare = compare ?? internals.compare(options);\n\n let found = false;\n for (const [key, existing] of map.entries()) {\n if (compare(key, value)) {\n ++existing.allowed;\n found = true;\n break;\n }\n }\n\n if (!found) {\n map.set(value, { allowed: 1, hits: 0 });\n }\n }\n }\n\n // Lookup values\n\n let hits = 0;\n for (const item of ref) {\n let match;\n if (!options.deep ||\n !item ||\n typeof item !== 'object') {\n\n match = map.get(item);\n }\n else {\n compare = compare ?? internals.compare(options);\n\n for (const [key, existing] of map.entries()) {\n if (compare(key, item)) {\n match = existing;\n break;\n }\n }\n }\n\n if (match) {\n ++match.hits;\n ++hits;\n\n if (options.once &&\n match.hits > match.allowed) {\n\n return false;\n }\n }\n }\n\n // Validate results\n\n if (options.only &&\n hits !== ref.length) {\n\n return false;\n }\n\n for (const match of map.values()) {\n if (match.hits === match.allowed) {\n continue;\n }\n\n if (match.hits < match.allowed &&\n !options.part) {\n\n return false;\n }\n }\n\n return !!hits;\n};\n\n\ninternals.object = function (ref, values, options) {\n\n Assert(options.once === undefined, 'Cannot use option once with object');\n\n const keys = Utils.keys(ref, options);\n if (!keys.length) {\n return false;\n }\n\n // Keys list\n\n if (Array.isArray(values)) {\n return internals.array(keys, values, options);\n }\n\n // Key value pairs\n\n const symbols = Object.getOwnPropertySymbols(values).filter((sym) => values.propertyIsEnumerable(sym));\n const targets = [...Object.keys(values), ...symbols];\n\n const compare = internals.compare(options);\n const set = new Set(targets);\n\n for (const key of keys) {\n if (!set.has(key)) {\n if (options.only) {\n return false;\n }\n\n continue;\n }\n\n if (!compare(values[key], ref[key])) {\n return false;\n }\n\n set.delete(key);\n }\n\n if (set.size) {\n return options.part ? set.size < targets.length : false;\n }\n\n return true;\n};\n\n\ninternals.string = function (ref, values, options) {\n\n // Empty string\n\n if (ref === '') {\n return values.length === 1 && values[0] === '' || // '' contains ''\n !options.once && !values.some((v) => v !== ''); // '' contains multiple '' if !once\n }\n\n // Map values\n\n const map = new Map();\n const patterns = [];\n\n for (const value of values) {\n Assert(typeof value === 'string', 'Cannot compare string reference to non-string value');\n\n if (value) {\n const existing = map.get(value);\n if (existing) {\n ++existing.allowed;\n }\n else {\n map.set(value, { allowed: 1, hits: 0 });\n patterns.push(EscapeRegex(value));\n }\n }\n else if (options.once ||\n options.only) {\n\n return false;\n }\n }\n\n if (!patterns.length) { // Non-empty string contains unlimited empty string\n return true;\n }\n\n // Match patterns\n\n const regex = new RegExp(`(${patterns.join('|')})`, 'g');\n const leftovers = ref.replace(regex, ($0, $1) => {\n\n ++map.get($1).hits;\n return ''; // Remove from string\n });\n\n // Validate results\n\n if (options.only &&\n leftovers) {\n\n return false;\n }\n\n let any = false;\n for (const match of map.values()) {\n if (match.hits) {\n any = true;\n }\n\n if (match.hits === match.allowed) {\n continue;\n }\n\n if (match.hits < match.allowed &&\n !options.part) {\n\n return false;\n }\n\n // match.hits > match.allowed\n\n if (options.once) {\n return false;\n }\n }\n\n return !!any;\n};\n\n\ninternals.compare = function (options) {\n\n if (!options.deep) {\n return internals.shallow;\n }\n\n const hasOnly = options.only !== undefined;\n const hasPart = options.part !== undefined;\n\n const flags = {\n prototype: hasOnly ? options.only : hasPart ? !options.part : false,\n part: hasOnly ? !options.only : hasPart ? options.part : false\n };\n\n return (a, b) => DeepEqual(a, b, flags);\n};\n\n\ninternals.shallow = function (a, b) {\n\n return a === b;\n};\n","'use strict';\n\nconst Assert = require('./assert');\n\n\nconst internals = {};\n\n\nmodule.exports = function (attribute) {\n\n // Allowed value characters: !#$%&'()*+,-./:;<=>?@[]^_`{|}~ and space, a-z, A-Z, 0-9, \\, \"\n\n Assert(/^[ \\w\\!#\\$%&'\\(\\)\\*\\+,\\-\\.\\/\\:;<\\=>\\?@\\[\\]\\^`\\{\\|\\}~\\\"\\\\]*$/.test(attribute), 'Bad attribute value (' + attribute + ')');\n\n return attribute.replace(/\\\\/g, '\\\\\\\\').replace(/\\\"/g, '\\\\\"'); // Escape quotes and slash\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 (input) {\n\n if (!input) {\n return '';\n }\n\n return input.replace(/[<>&\\u2028\\u2029]/g, internals.escape);\n};\n\n\ninternals.escape = function (char) {\n\n return internals.replacements.get(char);\n};\n\n\ninternals.replacements = new Map([\n ['<', '\\\\u003c'],\n ['>', '\\\\u003e'],\n ['&', '\\\\u0026'],\n ['\\u2028', '\\\\u2028'],\n ['\\u2029', '\\\\u2029']\n]);\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = internals.flatten = function (array, target) {\n\n const result = target || [];\n\n for (const entry of array) {\n if (Array.isArray(entry)) {\n internals.flatten(entry, result);\n }\n else {\n result.push(entry);\n }\n }\n\n return result;\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function (array1, array2, options = {}) {\n\n if (!array1 ||\n !array2) {\n\n return (options.first ? null : []);\n }\n\n const common = [];\n const hash = (Array.isArray(array1) ? new Set(array1) : array1);\n const found = new Set();\n for (const value of array2) {\n if (internals.has(hash, value) &&\n !found.has(value)) {\n\n if (options.first) {\n return value;\n }\n\n common.push(value);\n found.add(value);\n }\n }\n\n return (options.first ? null : common);\n};\n\n\ninternals.has = function (ref, key) {\n\n if (typeof ref.has === 'function') {\n return ref.has(key);\n }\n\n return ref[key] !== undefined;\n};\n","'use strict';\n\nconst internals = {};\n\n\nmodule.exports = function (promise) {\n\n return typeof promise?.then === 'function';\n};\n","'use strict';\n\nconst internals = {\n wrapped: Symbol('wrapped')\n};\n\n\nmodule.exports = function (method) {\n\n if (method[internals.wrapped]) {\n return method;\n }\n\n let once = false;\n const wrappedFn = function (...args) {\n\n if (!once) {\n once = true;\n method(...args);\n }\n };\n\n wrappedFn[internals.wrapped] = true;\n return wrappedFn;\n};\n","'use strict';\n\nconst Reach = require('./reach');\n\n\nconst internals = {};\n\n\nmodule.exports = function (obj, template, options) {\n\n return template.replace(/{([^{}]+)}/g, ($0, chain) => {\n\n const value = Reach(obj, chain, options);\n return value ?? '';\n });\n};\n","'use strict';\n\nconst internals = {\n maxTimer: 2 ** 31 - 1 // ~25 days\n};\n\n\nmodule.exports = function (timeout, returnValue, options) {\n\n if (typeof timeout === 'bigint') {\n timeout = Number(timeout);\n }\n\n if (timeout >= Number.MAX_SAFE_INTEGER) { // Thousands of years\n timeout = Infinity;\n }\n\n if (typeof timeout !== 'number' && timeout !== undefined) {\n throw new TypeError('Timeout must be a number or bigint');\n }\n\n return new Promise((resolve) => {\n\n const _setTimeout = options ? options.setTimeout : setTimeout;\n\n const activate = () => {\n\n const time = Math.min(timeout, internals.maxTimer);\n timeout -= time;\n _setTimeout(() => (timeout > 0 ? activate() : resolve(returnValue)), time);\n };\n\n if (timeout !== Infinity) {\n activate();\n }\n });\n};\n","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","const HEX = {\n '0': 0,\n '1': 1,\n '2': 2,\n '3': 3,\n '4': 4,\n '5': 5,\n '6': 6,\n '7': 7,\n '8': 8,\n '9': 9,\n a: 10,\n A: 10,\n b: 11,\n B: 11,\n c: 12,\n C: 12,\n d: 13,\n D: 13,\n e: 14,\n E: 14,\n f: 15,\n F: 15\n};\nconst UTF8 = {\n accept: 12,\n reject: 0,\n data: [\n // Maps bytes to character to a transition\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 7, 10, 9, 9, 9, 11, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n // Maps a state to a new state when adding a transition\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 12, 0, 0, 0, 0, 24, 36, 48, 60, 72, 84, 96, 0, 12, 12, 12, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 24, 24, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 48, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 48, 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0,\n // Maps the current transition to a mask that needs to apply to the byte\n 0x7f, 0x3f, 0x3f, 0x3f, 0x00, 0x1f, 0x0f, 0x0f, 0x0f, 0x07, 0x07, 0x07\n ]\n};\n/**\n * Faster version of decodeURIComponent() that does not throw.\n *\n * @param string - the URL string to decode.\n *\n * @returns the decoded string or null if invalid.\n */\nexport function uriDecode(string) {\n let percentPos = string.indexOf('%');\n if (percentPos === -1) {\n return string;\n }\n let decoded = '';\n let last = 0;\n let codepoint = 0;\n let startOfOctets = percentPos;\n let state = UTF8.accept;\n while (percentPos > -1 && percentPos < string.length) {\n const high = resolveHex(string[percentPos + 1], 4);\n const low = resolveHex(string[percentPos + 2], 0);\n const byte = high | low;\n const type = UTF8.data[byte];\n state = UTF8.data[256 + state + type];\n codepoint = (codepoint << 6) | (byte & UTF8.data[364 + type]);\n if (state === UTF8.accept) {\n decoded += string.slice(last, startOfOctets);\n decoded +=\n codepoint <= 0xffff\n ? String.fromCharCode(codepoint)\n : String.fromCharCode(0xd7c0 + (codepoint >> 10), 0xdc00 + (codepoint & 0x3ff));\n codepoint = 0;\n last = percentPos + 3;\n percentPos = string.indexOf('%', last);\n startOfOctets = percentPos;\n continue;\n }\n if (state === UTF8.reject) {\n return null;\n }\n percentPos += 3;\n if (percentPos >= string.length || string[percentPos] !== '%') {\n return null;\n }\n }\n return decoded + string.slice(last);\n}\nfunction resolveHex(char, shift) {\n const i = HEX[char];\n return i === undefined ? 255 : i << shift;\n}\n// Adapted from:\n// Copyright (c) 2017-2019 Justin Ridgewell, MIT Licensed, https://github.com/jridgewell/safe-decode-string-component\n// Copyright (c) 2008-2009 Bjoern Hoehrmann <bjoern@hoehrmann.de>, MIT Licensed, http://bjoern.hoehrmann.de/utf-8/decoder/dfa/\n//# sourceMappingURL=decode.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 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 internals = {};\n\n\nexports.location = function (depth = 0) {\n\n const orig = Error.prepareStackTrace;\n Error.prepareStackTrace = (ignore, stack) => stack;\n\n const capture = {};\n Error.captureStackTrace(capture, this);\n const line = capture.stack[depth + 1];\n\n Error.prepareStackTrace = orig;\n\n return {\n filename: line.getFileName(),\n line: line.getLineNumber()\n };\n};\n","// https://data.iana.org/TLD/tlds-alpha-by-domain.txt\n// # Version 2025052000, Last Updated Tue May 20 07:07:01 2025 UTC\nexport const TLDS = [\n 'AAA',\n 'AARP',\n 'ABB',\n 'ABBOTT',\n 'ABBVIE',\n 'ABC',\n 'ABLE',\n 'ABOGADO',\n 'ABUDHABI',\n 'AC',\n 'ACADEMY',\n 'ACCENTURE',\n 'ACCOUNTANT',\n 'ACCOUNTANTS',\n 'ACO',\n 'ACTOR',\n 'AD',\n 'ADS',\n 'ADULT',\n 'AE',\n 'AEG',\n 'AERO',\n 'AETNA',\n 'AF',\n 'AFL',\n 'AFRICA',\n 'AG',\n 'AGAKHAN',\n 'AGENCY',\n 'AI',\n 'AIG',\n 'AIRBUS',\n 'AIRFORCE',\n 'AIRTEL',\n 'AKDN',\n 'AL',\n 'ALIBABA',\n 'ALIPAY',\n 'ALLFINANZ',\n 'ALLSTATE',\n 'ALLY',\n 'ALSACE',\n 'ALSTOM',\n 'AM',\n 'AMAZON',\n 'AMERICANEXPRESS',\n 'AMERICANFAMILY',\n 'AMEX',\n 'AMFAM',\n 'AMICA',\n 'AMSTERDAM',\n 'ANALYTICS',\n 'ANDROID',\n 'ANQUAN',\n 'ANZ',\n 'AO',\n 'AOL',\n 'APARTMENTS',\n 'APP',\n 'APPLE',\n 'AQ',\n 'AQUARELLE',\n 'AR',\n 'ARAB',\n 'ARAMCO',\n 'ARCHI',\n 'ARMY',\n 'ARPA',\n 'ART',\n 'ARTE',\n 'AS',\n 'ASDA',\n 'ASIA',\n 'ASSOCIATES',\n 'AT',\n 'ATHLETA',\n 'ATTORNEY',\n 'AU',\n 'AUCTION',\n 'AUDI',\n 'AUDIBLE',\n 'AUDIO',\n 'AUSPOST',\n 'AUTHOR',\n 'AUTO',\n 'AUTOS',\n 'AW',\n 'AWS',\n 'AX',\n 'AXA',\n 'AZ',\n 'AZURE',\n 'BA',\n 'BABY',\n 'BAIDU',\n 'BANAMEX',\n 'BAND',\n 'BANK',\n 'BAR',\n 'BARCELONA',\n 'BARCLAYCARD',\n 'BARCLAYS',\n 'BAREFOOT',\n 'BARGAINS',\n 'BASEBALL',\n 'BASKETBALL',\n 'BAUHAUS',\n 'BAYERN',\n 'BB',\n 'BBC',\n 'BBT',\n 'BBVA',\n 'BCG',\n 'BCN',\n 'BD',\n 'BE',\n 'BEATS',\n 'BEAUTY',\n 'BEER',\n 'BERLIN',\n 'BEST',\n 'BESTBUY',\n 'BET',\n 'BF',\n 'BG',\n 'BH',\n 'BHARTI',\n 'BI',\n 'BIBLE',\n 'BID',\n 'BIKE',\n 'BING',\n 'BINGO',\n 'BIO',\n 'BIZ',\n 'BJ',\n 'BLACK',\n 'BLACKFRIDAY',\n 'BLOCKBUSTER',\n 'BLOG',\n 'BLOOMBERG',\n 'BLUE',\n 'BM',\n 'BMS',\n 'BMW',\n 'BN',\n 'BNPPARIBAS',\n 'BO',\n 'BOATS',\n 'BOEHRINGER',\n 'BOFA',\n 'BOM',\n 'BOND',\n 'BOO',\n 'BOOK',\n 'BOOKING',\n 'BOSCH',\n 'BOSTIK',\n 'BOSTON',\n 'BOT',\n 'BOUTIQUE',\n 'BOX',\n 'BR',\n 'BRADESCO',\n 'BRIDGESTONE',\n 'BROADWAY',\n 'BROKER',\n 'BROTHER',\n 'BRUSSELS',\n 'BS',\n 'BT',\n 'BUILD',\n 'BUILDERS',\n 'BUSINESS',\n 'BUY',\n 'BUZZ',\n 'BV',\n 'BW',\n 'BY',\n 'BZ',\n 'BZH',\n 'CA',\n 'CAB',\n 'CAFE',\n 'CAL',\n 'CALL',\n 'CALVINKLEIN',\n 'CAM',\n 'CAMERA',\n 'CAMP',\n 'CANON',\n 'CAPETOWN',\n 'CAPITAL',\n 'CAPITALONE',\n 'CAR',\n 'CARAVAN',\n 'CARDS',\n 'CARE',\n 'CAREER',\n 'CAREERS',\n 'CARS',\n 'CASA',\n 'CASE',\n 'CASH',\n 'CASINO',\n 'CAT',\n 'CATERING',\n 'CATHOLIC',\n 'CBA',\n 'CBN',\n 'CBRE',\n 'CC',\n 'CD',\n 'CENTER',\n 'CEO',\n 'CERN',\n 'CF',\n 'CFA',\n 'CFD',\n 'CG',\n 'CH',\n 'CHANEL',\n 'CHANNEL',\n 'CHARITY',\n 'CHASE',\n 'CHAT',\n 'CHEAP',\n 'CHINTAI',\n 'CHRISTMAS',\n 'CHROME',\n 'CHURCH',\n 'CI',\n 'CIPRIANI',\n 'CIRCLE',\n 'CISCO',\n 'CITADEL',\n 'CITI',\n 'CITIC',\n 'CITY',\n 'CK',\n 'CL',\n 'CLAIMS',\n 'CLEANING',\n 'CLICK',\n 'CLINIC',\n 'CLINIQUE',\n 'CLOTHING',\n 'CLOUD',\n 'CLUB',\n 'CLUBMED',\n 'CM',\n 'CN',\n 'CO',\n 'COACH',\n 'CODES',\n 'COFFEE',\n 'COLLEGE',\n 'COLOGNE',\n 'COM',\n 'COMMBANK',\n 'COMMUNITY',\n 'COMPANY',\n 'COMPARE',\n 'COMPUTER',\n 'COMSEC',\n 'CONDOS',\n 'CONSTRUCTION',\n 'CONSULTING',\n 'CONTACT',\n 'CONTRACTORS',\n 'COOKING',\n 'COOL',\n 'COOP',\n 'CORSICA',\n 'COUNTRY',\n 'COUPON',\n 'COUPONS',\n 'COURSES',\n 'CPA',\n 'CR',\n 'CREDIT',\n 'CREDITCARD',\n 'CREDITUNION',\n 'CRICKET',\n 'CROWN',\n 'CRS',\n 'CRUISE',\n 'CRUISES',\n 'CU',\n 'CUISINELLA',\n 'CV',\n 'CW',\n 'CX',\n 'CY',\n 'CYMRU',\n 'CYOU',\n 'CZ',\n 'DAD',\n 'DANCE',\n 'DATA',\n 'DATE',\n 'DATING',\n 'DATSUN',\n 'DAY',\n 'DCLK',\n 'DDS',\n 'DE',\n 'DEAL',\n 'DEALER',\n 'DEALS',\n 'DEGREE',\n 'DELIVERY',\n 'DELL',\n 'DELOITTE',\n 'DELTA',\n 'DEMOCRAT',\n 'DENTAL',\n 'DENTIST',\n 'DESI',\n 'DESIGN',\n 'DEV',\n 'DHL',\n 'DIAMONDS',\n 'DIET',\n 'DIGITAL',\n 'DIRECT',\n 'DIRECTORY',\n 'DISCOUNT',\n 'DISCOVER',\n 'DISH',\n 'DIY',\n 'DJ',\n 'DK',\n 'DM',\n 'DNP',\n 'DO',\n 'DOCS',\n 'DOCTOR',\n 'DOG',\n 'DOMAINS',\n 'DOT',\n 'DOWNLOAD',\n 'DRIVE',\n 'DTV',\n 'DUBAI',\n 'DUNLOP',\n 'DUPONT',\n 'DURBAN',\n 'DVAG',\n 'DVR',\n 'DZ',\n 'EARTH',\n 'EAT',\n 'EC',\n 'ECO',\n 'EDEKA',\n 'EDU',\n 'EDUCATION',\n 'EE',\n 'EG',\n 'EMAIL',\n 'EMERCK',\n 'ENERGY',\n 'ENGINEER',\n 'ENGINEERING',\n 'ENTERPRISES',\n 'EPSON',\n 'EQUIPMENT',\n 'ER',\n 'ERICSSON',\n 'ERNI',\n 'ES',\n 'ESQ',\n 'ESTATE',\n 'ET',\n 'EU',\n 'EUROVISION',\n 'EUS',\n 'EVENTS',\n 'EXCHANGE',\n 'EXPERT',\n 'EXPOSED',\n 'EXPRESS',\n 'EXTRASPACE',\n 'FAGE',\n 'FAIL',\n 'FAIRWINDS',\n 'FAITH',\n 'FAMILY',\n 'FAN',\n 'FANS',\n 'FARM',\n 'FARMERS',\n 'FASHION',\n 'FAST',\n 'FEDEX',\n 'FEEDBACK',\n 'FERRARI',\n 'FERRERO',\n 'FI',\n 'FIDELITY',\n 'FIDO',\n 'FILM',\n 'FINAL',\n 'FINANCE',\n 'FINANCIAL',\n 'FIRE',\n 'FIRESTONE',\n 'FIRMDALE',\n 'FISH',\n 'FISHING',\n 'FIT',\n 'FITNESS',\n 'FJ',\n 'FK',\n 'FLICKR',\n 'FLIGHTS',\n 'FLIR',\n 'FLORIST',\n 'FLOWERS',\n 'FLY',\n 'FM',\n 'FO',\n 'FOO',\n 'FOOD',\n 'FOOTBALL',\n 'FORD',\n 'FOREX',\n 'FORSALE',\n 'FORUM',\n 'FOUNDATION',\n 'FOX',\n 'FR',\n 'FREE',\n 'FRESENIUS',\n 'FRL',\n 'FROGANS',\n 'FRONTIER',\n 'FTR',\n 'FUJITSU',\n 'FUN',\n 'FUND',\n 'FURNITURE',\n 'FUTBOL',\n 'FYI',\n 'GA',\n 'GAL',\n 'GALLERY',\n 'GALLO',\n 'GALLUP',\n 'GAME',\n 'GAMES',\n 'GAP',\n 'GARDEN',\n 'GAY',\n 'GB',\n 'GBIZ',\n 'GD',\n 'GDN',\n 'GE',\n 'GEA',\n 'GENT',\n 'GENTING',\n 'GEORGE',\n 'GF',\n 'GG',\n 'GGEE',\n 'GH',\n 'GI',\n 'GIFT',\n 'GIFTS',\n 'GIVES',\n 'GIVING',\n 'GL',\n 'GLASS',\n 'GLE',\n 'GLOBAL',\n 'GLOBO',\n 'GM',\n 'GMAIL',\n 'GMBH',\n 'GMO',\n 'GMX',\n 'GN',\n 'GODADDY',\n 'GOLD',\n 'GOLDPOINT',\n 'GOLF',\n 'GOO',\n 'GOODYEAR',\n 'GOOG',\n 'GOOGLE',\n 'GOP',\n 'GOT',\n 'GOV',\n 'GP',\n 'GQ',\n 'GR',\n 'GRAINGER',\n 'GRAPHICS',\n 'GRATIS',\n 'GREEN',\n 'GRIPE',\n 'GROCERY',\n 'GROUP',\n 'GS',\n 'GT',\n 'GU',\n 'GUCCI',\n 'GUGE',\n 'GUIDE',\n 'GUITARS',\n 'GURU',\n 'GW',\n 'GY',\n 'HAIR',\n 'HAMBURG',\n 'HANGOUT',\n 'HAUS',\n 'HBO',\n 'HDFC',\n 'HDFCBANK',\n 'HEALTH',\n 'HEALTHCARE',\n 'HELP',\n 'HELSINKI',\n 'HERE',\n 'HERMES',\n 'HIPHOP',\n 'HISAMITSU',\n 'HITACHI',\n 'HIV',\n 'HK',\n 'HKT',\n 'HM',\n 'HN',\n 'HOCKEY',\n 'HOLDINGS',\n 'HOLIDAY',\n 'HOMEDEPOT',\n 'HOMEGOODS',\n 'HOMES',\n 'HOMESENSE',\n 'HONDA',\n 'HORSE',\n 'HOSPITAL',\n 'HOST',\n 'HOSTING',\n 'HOT',\n 'HOTELS',\n 'HOTMAIL',\n 'HOUSE',\n 'HOW',\n 'HR',\n 'HSBC',\n 'HT',\n 'HU',\n 'HUGHES',\n 'HYATT',\n 'HYUNDAI',\n 'IBM',\n 'ICBC',\n 'ICE',\n 'ICU',\n 'ID',\n 'IE',\n 'IEEE',\n 'IFM',\n 'IKANO',\n 'IL',\n 'IM',\n 'IMAMAT',\n 'IMDB',\n 'IMMO',\n 'IMMOBILIEN',\n 'IN',\n 'INC',\n 'INDUSTRIES',\n 'INFINITI',\n 'INFO',\n 'ING',\n 'INK',\n 'INSTITUTE',\n 'INSURANCE',\n 'INSURE',\n 'INT',\n 'INTERNATIONAL',\n 'INTUIT',\n 'INVESTMENTS',\n 'IO',\n 'IPIRANGA',\n 'IQ',\n 'IR',\n 'IRISH',\n 'IS',\n 'ISMAILI',\n 'IST',\n 'ISTANBUL',\n 'IT',\n 'ITAU',\n 'ITV',\n 'JAGUAR',\n 'JAVA',\n 'JCB',\n 'JE',\n 'JEEP',\n 'JETZT',\n 'JEWELRY',\n 'JIO',\n 'JLL',\n 'JM',\n 'JMP',\n 'JNJ',\n 'JO',\n 'JOBS',\n 'JOBURG',\n 'JOT',\n 'JOY',\n 'JP',\n 'JPMORGAN',\n 'JPRS',\n 'JUEGOS',\n 'JUNIPER',\n 'KAUFEN',\n 'KDDI',\n 'KE',\n 'KERRYHOTELS',\n 'KERRYPROPERTIES',\n 'KFH',\n 'KG',\n 'KH',\n 'KI',\n 'KIA',\n 'KIDS',\n 'KIM',\n 'KINDLE',\n 'KITCHEN',\n 'KIWI',\n 'KM',\n 'KN',\n 'KOELN',\n 'KOMATSU',\n 'KOSHER',\n 'KP',\n 'KPMG',\n 'KPN',\n 'KR',\n 'KRD',\n 'KRED',\n 'KUOKGROUP',\n 'KW',\n 'KY',\n 'KYOTO',\n 'KZ',\n 'LA',\n 'LACAIXA',\n 'LAMBORGHINI',\n 'LAMER',\n 'LAND',\n 'LANDROVER',\n 'LANXESS',\n 'LASALLE',\n 'LAT',\n 'LATINO',\n 'LATROBE',\n 'LAW',\n 'LAWYER',\n 'LB',\n 'LC',\n 'LDS',\n 'LEASE',\n 'LECLERC',\n 'LEFRAK',\n 'LEGAL',\n 'LEGO',\n 'LEXUS',\n 'LGBT',\n 'LI',\n 'LIDL',\n 'LIFE',\n 'LIFEINSURANCE',\n 'LIFESTYLE',\n 'LIGHTING',\n 'LIKE',\n 'LILLY',\n 'LIMITED',\n 'LIMO',\n 'LINCOLN',\n 'LINK',\n 'LIVE',\n 'LIVING',\n 'LK',\n 'LLC',\n 'LLP',\n 'LOAN',\n 'LOANS',\n 'LOCKER',\n 'LOCUS',\n 'LOL',\n 'LONDON',\n 'LOTTE',\n 'LOTTO',\n 'LOVE',\n 'LPL',\n 'LPLFINANCIAL',\n 'LR',\n 'LS',\n 'LT',\n 'LTD',\n 'LTDA',\n 'LU',\n 'LUNDBECK',\n 'LUXE',\n 'LUXURY',\n 'LV',\n 'LY',\n 'MA',\n 'MADRID',\n 'MAIF',\n 'MAISON',\n 'MAKEUP',\n 'MAN',\n 'MANAGEMENT',\n 'MANGO',\n 'MAP',\n 'MARKET',\n 'MARKETING',\n 'MARKETS',\n 'MARRIOTT',\n 'MARSHALLS',\n 'MATTEL',\n 'MBA',\n 'MC',\n 'MCKINSEY',\n 'MD',\n 'ME',\n 'MED',\n 'MEDIA',\n 'MEET',\n 'MELBOURNE',\n 'MEME',\n 'MEMORIAL',\n 'MEN',\n 'MENU',\n 'MERCKMSD',\n 'MG',\n 'MH',\n 'MIAMI',\n 'MICROSOFT',\n 'MIL',\n 'MINI',\n 'MINT',\n 'MIT',\n 'MITSUBISHI',\n 'MK',\n 'ML',\n 'MLB',\n 'MLS',\n 'MM',\n 'MMA',\n 'MN',\n 'MO',\n 'MOBI',\n 'MOBILE',\n 'MODA',\n 'MOE',\n 'MOI',\n 'MOM',\n 'MONASH',\n 'MONEY',\n 'MONSTER',\n 'MORMON',\n 'MORTGAGE',\n 'MOSCOW',\n 'MOTO',\n 'MOTORCYCLES',\n 'MOV',\n 'MOVIE',\n 'MP',\n 'MQ',\n 'MR',\n 'MS',\n 'MSD',\n 'MT',\n 'MTN',\n 'MTR',\n 'MU',\n 'MUSEUM',\n 'MUSIC',\n 'MV',\n 'MW',\n 'MX',\n 'MY',\n 'MZ',\n 'NA',\n 'NAB',\n 'NAGOYA',\n 'NAME',\n 'NAVY',\n 'NBA',\n 'NC',\n 'NE',\n 'NEC',\n 'NET',\n 'NETBANK',\n 'NETFLIX',\n 'NETWORK',\n 'NEUSTAR',\n 'NEW',\n 'NEWS',\n 'NEXT',\n 'NEXTDIRECT',\n 'NEXUS',\n 'NF',\n 'NFL',\n 'NG',\n 'NGO',\n 'NHK',\n 'NI',\n 'NICO',\n 'NIKE',\n 'NIKON',\n 'NINJA',\n 'NISSAN',\n 'NISSAY',\n 'NL',\n 'NO',\n 'NOKIA',\n 'NORTON',\n 'NOW',\n 'NOWRUZ',\n 'NOWTV',\n 'NP',\n 'NR',\n 'NRA',\n 'NRW',\n 'NTT',\n 'NU',\n 'NYC',\n 'NZ',\n 'OBI',\n 'OBSERVER',\n 'OFFICE',\n 'OKINAWA',\n 'OLAYAN',\n 'OLAYANGROUP',\n 'OLLO',\n 'OM',\n 'OMEGA',\n 'ONE',\n 'ONG',\n 'ONL',\n 'ONLINE',\n 'OOO',\n 'OPEN',\n 'ORACLE',\n 'ORANGE',\n 'ORG',\n 'ORGANIC',\n 'ORIGINS',\n 'OSAKA',\n 'OTSUKA',\n 'OTT',\n 'OVH',\n 'PA',\n 'PAGE',\n 'PANASONIC',\n 'PARIS',\n 'PARS',\n 'PARTNERS',\n 'PARTS',\n 'PARTY',\n 'PAY',\n 'PCCW',\n 'PE',\n 'PET',\n 'PF',\n 'PFIZER',\n 'PG',\n 'PH',\n 'PHARMACY',\n 'PHD',\n 'PHILIPS',\n 'PHONE',\n 'PHOTO',\n 'PHOTOGRAPHY',\n 'PHOTOS',\n 'PHYSIO',\n 'PICS',\n 'PICTET',\n 'PICTURES',\n 'PID',\n 'PIN',\n 'PING',\n 'PINK',\n 'PIONEER',\n 'PIZZA',\n 'PK',\n 'PL',\n 'PLACE',\n 'PLAY',\n 'PLAYSTATION',\n 'PLUMBING',\n 'PLUS',\n 'PM',\n 'PN',\n 'PNC',\n 'POHL',\n 'POKER',\n 'POLITIE',\n 'PORN',\n 'POST',\n 'PR',\n 'PRAXI',\n 'PRESS',\n 'PRIME',\n 'PRO',\n 'PROD',\n 'PRODUCTIONS',\n 'PROF',\n 'PROGRESSIVE',\n 'PROMO',\n 'PROPERTIES',\n 'PROPERTY',\n 'PROTECTION',\n 'PRU',\n 'PRUDENTIAL',\n 'PS',\n 'PT',\n 'PUB',\n 'PW',\n 'PWC',\n 'PY',\n 'QA',\n 'QPON',\n 'QUEBEC',\n 'QUEST',\n 'RACING',\n 'RADIO',\n 'RE',\n 'READ',\n 'REALESTATE',\n 'REALTOR',\n 'REALTY',\n 'RECIPES',\n 'RED',\n 'REDSTONE',\n 'REDUMBRELLA',\n 'REHAB',\n 'REISE',\n 'REISEN',\n 'REIT',\n 'RELIANCE',\n 'REN',\n 'RENT',\n 'RENTALS',\n 'REPAIR',\n 'REPORT',\n 'REPUBLICAN',\n 'REST',\n 'RESTAURANT',\n 'REVIEW',\n 'REVIEWS',\n 'REXROTH',\n 'RICH',\n 'RICHARDLI',\n 'RICOH',\n 'RIL',\n 'RIO',\n 'RIP',\n 'RO',\n 'ROCKS',\n 'RODEO',\n 'ROGERS',\n 'ROOM',\n 'RS',\n 'RSVP',\n 'RU',\n 'RUGBY',\n 'RUHR',\n 'RUN',\n 'RW',\n 'RWE',\n 'RYUKYU',\n 'SA',\n 'SAARLAND',\n 'SAFE',\n 'SAFETY',\n 'SAKURA',\n 'SALE',\n 'SALON',\n 'SAMSCLUB',\n 'SAMSUNG',\n 'SANDVIK',\n 'SANDVIKCOROMANT',\n 'SANOFI',\n 'SAP',\n 'SARL',\n 'SAS',\n 'SAVE',\n 'SAXO',\n 'SB',\n 'SBI',\n 'SBS',\n 'SC',\n 'SCB',\n 'SCHAEFFLER',\n 'SCHMIDT',\n 'SCHOLARSHIPS',\n 'SCHOOL',\n 'SCHULE',\n 'SCHWARZ',\n 'SCIENCE',\n 'SCOT',\n 'SD',\n 'SE',\n 'SEARCH',\n 'SEAT',\n 'SECURE',\n 'SECURITY',\n 'SEEK',\n 'SELECT',\n 'SENER',\n 'SERVICES',\n 'SEVEN',\n 'SEW',\n 'SEX',\n 'SEXY',\n 'SFR',\n 'SG',\n 'SH',\n 'SHANGRILA',\n 'SHARP',\n 'SHELL',\n 'SHIA',\n 'SHIKSHA',\n 'SHOES',\n 'SHOP',\n 'SHOPPING',\n 'SHOUJI',\n 'SHOW',\n 'SI',\n 'SILK',\n 'SINA',\n 'SINGLES',\n 'SITE',\n 'SJ',\n 'SK',\n 'SKI',\n 'SKIN',\n 'SKY',\n 'SKYPE',\n 'SL',\n 'SLING',\n 'SM',\n 'SMART',\n 'SMILE',\n 'SN',\n 'SNCF',\n 'SO',\n 'SOCCER',\n 'SOCIAL',\n 'SOFTBANK',\n 'SOFTWARE',\n 'SOHU',\n 'SOLAR',\n 'SOLUTIONS',\n 'SONG',\n 'SONY',\n 'SOY',\n 'SPA',\n 'SPACE',\n 'SPORT',\n 'SPOT',\n 'SR',\n 'SRL',\n 'SS',\n 'ST',\n 'STADA',\n 'STAPLES',\n 'STAR',\n 'STATEBANK',\n 'STATEFARM',\n 'STC',\n 'STCGROUP',\n 'STOCKHOLM',\n 'STORAGE',\n 'STORE',\n 'STREAM',\n 'STUDIO',\n 'STUDY',\n 'STYLE',\n 'SU',\n 'SUCKS',\n 'SUPPLIES',\n 'SUPPLY',\n 'SUPPORT',\n 'SURF',\n 'SURGERY',\n 'SUZUKI',\n 'SV',\n 'SWATCH',\n 'SWISS',\n 'SX',\n 'SY',\n 'SYDNEY',\n 'SYSTEMS',\n 'SZ',\n 'TAB',\n 'TAIPEI',\n 'TALK',\n 'TAOBAO',\n 'TARGET',\n 'TATAMOTORS',\n 'TATAR',\n 'TATTOO',\n 'TAX',\n 'TAXI',\n 'TC',\n 'TCI',\n 'TD',\n 'TDK',\n 'TEAM',\n 'TECH',\n 'TECHNOLOGY',\n 'TEL',\n 'TEMASEK',\n 'TENNIS',\n 'TEVA',\n 'TF',\n 'TG',\n 'TH',\n 'THD',\n 'THEATER',\n 'THEATRE',\n 'TIAA',\n 'TICKETS',\n 'TIENDA',\n 'TIPS',\n 'TIRES',\n 'TIROL',\n 'TJ',\n 'TJMAXX',\n 'TJX',\n 'TK',\n 'TKMAXX',\n 'TL',\n 'TM',\n 'TMALL',\n 'TN',\n 'TO',\n 'TODAY',\n 'TOKYO',\n 'TOOLS',\n 'TOP',\n 'TORAY',\n 'TOSHIBA',\n 'TOTAL',\n 'TOURS',\n 'TOWN',\n 'TOYOTA',\n 'TOYS',\n 'TR',\n 'TRADE',\n 'TRADING',\n 'TRAINING',\n 'TRAVEL',\n 'TRAVELERS',\n 'TRAVELERSINSURANCE',\n 'TRUST',\n 'TRV',\n 'TT',\n 'TUBE',\n 'TUI',\n 'TUNES',\n 'TUSHU',\n 'TV',\n 'TVS',\n 'TW',\n 'TZ',\n 'UA',\n 'UBANK',\n 'UBS',\n 'UG',\n 'UK',\n 'UNICOM',\n 'UNIVERSITY',\n 'UNO',\n 'UOL',\n 'UPS',\n 'US',\n 'UY',\n 'UZ',\n 'VA',\n 'VACATIONS',\n 'VANA',\n 'VANGUARD',\n 'VC',\n 'VE',\n 'VEGAS',\n 'VENTURES',\n 'VERISIGN',\n 'VERSICHERUNG',\n 'VET',\n 'VG',\n 'VI',\n 'VIAJES',\n 'VIDEO',\n 'VIG',\n 'VIKING',\n 'VILLAS',\n 'VIN',\n 'VIP',\n 'VIRGIN',\n 'VISA',\n 'VISION',\n 'VIVA',\n 'VIVO',\n 'VLAANDEREN',\n 'VN',\n 'VODKA',\n 'VOLVO',\n 'VOTE',\n 'VOTING',\n 'VOTO',\n 'VOYAGE',\n 'VU',\n 'WALES',\n 'WALMART',\n 'WALTER',\n 'WANG',\n 'WANGGOU',\n 'WATCH',\n 'WATCHES',\n 'WEATHER',\n 'WEATHERCHANNEL',\n 'WEBCAM',\n 'WEBER',\n 'WEBSITE',\n 'WED',\n 'WEDDING',\n 'WEIBO',\n 'WEIR',\n 'WF',\n 'WHOSWHO',\n 'WIEN',\n 'WIKI',\n 'WILLIAMHILL',\n 'WIN',\n 'WINDOWS',\n 'WINE',\n 'WINNERS',\n 'WME',\n 'WOLTERSKLUWER',\n 'WOODSIDE',\n 'WORK',\n 'WORKS',\n 'WORLD',\n 'WOW',\n 'WS',\n 'WTC',\n 'WTF',\n 'XBOX',\n 'XEROX',\n 'XIHUAN',\n 'XIN',\n 'XN--11B4C3D',\n 'XN--1CK2E1B',\n 'XN--1QQW23A',\n 'XN--2SCRJ9C',\n 'XN--30RR7Y',\n 'XN--3BST00M',\n 'XN--3DS443G',\n 'XN--3E0B707E',\n 'XN--3HCRJ9C',\n 'XN--3PXU8K',\n 'XN--42C2D9A',\n 'XN--45BR5CYL',\n 'XN--45BRJ9C',\n 'XN--45Q11C',\n 'XN--4DBRK0CE',\n 'XN--4GBRIM',\n 'XN--54B7FTA0CC',\n 'XN--55QW42G',\n 'XN--55QX5D',\n 'XN--5SU34J936BGSG',\n 'XN--5TZM5G',\n 'XN--6FRZ82G',\n 'XN--6QQ986B3XL',\n 'XN--80ADXHKS',\n 'XN--80AO21A',\n 'XN--80AQECDR1A',\n 'XN--80ASEHDB',\n 'XN--80ASWG',\n 'XN--8Y0A063A',\n 'XN--90A3AC',\n 'XN--90AE',\n 'XN--90AIS',\n 'XN--9DBQ2A',\n 'XN--9ET52U',\n 'XN--9KRT00A',\n 'XN--B4W605FERD',\n 'XN--BCK1B9A5DRE4C',\n 'XN--C1AVG',\n 'XN--C2BR7G',\n 'XN--CCK2B3B',\n 'XN--CCKWCXETD',\n 'XN--CG4BKI',\n 'XN--CLCHC0EA0B2G2A9GCD',\n 'XN--CZR694B',\n 'XN--CZRS0T',\n 'XN--CZRU2D',\n 'XN--D1ACJ3B',\n 'XN--D1ALF',\n 'XN--E1A4C',\n 'XN--ECKVDTC9D',\n 'XN--EFVY88H',\n 'XN--FCT429K',\n 'XN--FHBEI',\n 'XN--FIQ228C5HS',\n 'XN--FIQ64B',\n 'XN--FIQS8S',\n 'XN--FIQZ9S',\n 'XN--FJQ720A',\n 'XN--FLW351E',\n 'XN--FPCRJ9C3D',\n 'XN--FZC2C9E2C',\n 'XN--FZYS8D69UVGM',\n 'XN--G2XX48C',\n 'XN--GCKR3F0F',\n 'XN--GECRJ9C',\n 'XN--GK3AT1E',\n 'XN--H2BREG3EVE',\n 'XN--H2BRJ9C',\n 'XN--H2BRJ9C8C',\n 'XN--HXT814E',\n 'XN--I1B6B1A6A2E',\n 'XN--IMR513N',\n 'XN--IO0A7I',\n 'XN--J1AEF',\n 'XN--J1AMH',\n 'XN--J6W193G',\n 'XN--JLQ480N2RG',\n 'XN--JVR189M',\n 'XN--KCRX77D1X4A',\n 'XN--KPRW13D',\n 'XN--KPRY57D',\n 'XN--KPUT3I',\n 'XN--L1ACC',\n 'XN--LGBBAT1AD8J',\n 'XN--MGB9AWBF',\n 'XN--MGBA3A3EJT',\n 'XN--MGBA3A4F16A',\n 'XN--MGBA7C0BBN0A',\n 'XN--MGBAAM7A8H',\n 'XN--MGBAB2BD',\n 'XN--MGBAH1A3HJKRD',\n 'XN--MGBAI9AZGQP6J',\n 'XN--MGBAYH7GPA',\n 'XN--MGBBH1A',\n 'XN--MGBBH1A71E',\n 'XN--MGBC0A9AZCG',\n 'XN--MGBCA7DZDO',\n 'XN--MGBCPQ6GPA1A',\n 'XN--MGBERP4A5D4AR',\n 'XN--MGBGU82A',\n 'XN--MGBI4ECEXP',\n 'XN--MGBPL2FH',\n 'XN--MGBT3DHD',\n 'XN--MGBTX2B',\n 'XN--MGBX4CD0AB',\n 'XN--MIX891F',\n 'XN--MK1BU44C',\n 'XN--MXTQ1M',\n 'XN--NGBC5AZD',\n 'XN--NGBE9E0A',\n 'XN--NGBRX',\n 'XN--NODE',\n 'XN--NQV7F',\n 'XN--NQV7FS00EMA',\n 'XN--NYQY26A',\n 'XN--O3CW4H',\n 'XN--OGBPF8FL',\n 'XN--OTU796D',\n 'XN--P1ACF',\n 'XN--P1AI',\n 'XN--PGBS0DH',\n 'XN--PSSY2U',\n 'XN--Q7CE6A',\n 'XN--Q9JYB4C',\n 'XN--QCKA1PMC',\n 'XN--QXA6A',\n 'XN--QXAM',\n 'XN--RHQV96G',\n 'XN--ROVU88B',\n 'XN--RVC1E0AM3E',\n 'XN--S9BRJ9C',\n 'XN--SES554G',\n 'XN--T60B56A',\n 'XN--TCKWE',\n 'XN--TIQ49XQYJ',\n 'XN--UNUP4Y',\n 'XN--VERMGENSBERATER-CTB',\n 'XN--VERMGENSBERATUNG-PWB',\n 'XN--VHQUV',\n 'XN--VUQ861B',\n 'XN--W4R85EL8FHU5DNRA',\n 'XN--W4RS40L',\n 'XN--WGBH1C',\n 'XN--WGBL6A',\n 'XN--XHQ521B',\n 'XN--XKC2AL3HYE2A',\n 'XN--XKC2DL3A5EE0H',\n 'XN--Y9A3AQ',\n 'XN--YFRO4I67O',\n 'XN--YGBI2AMMX',\n 'XN--ZFR164B',\n 'XXX',\n 'XYZ',\n 'YACHTS',\n 'YAHOO',\n 'YAMAXUN',\n 'YANDEX',\n 'YE',\n 'YODOBASHI',\n 'YOGA',\n 'YOKOHAMA',\n 'YOU',\n 'YOUTUBE',\n 'YT',\n 'YUN',\n 'ZA',\n 'ZAPPOS',\n 'ZARA',\n 'ZERO',\n 'ZIP',\n 'ZM',\n 'ZONE',\n 'ZUERICH',\n 'ZW',\n];\n//# sourceMappingURL=tlds.js.map","import { TLDS } from './tlds.js';\nexport const tlds = new Set(TLDS.map((tld) => tld.toLowerCase()));\n//# sourceMappingURL=index.js.map","/**\n * A powerful schema description language and data validator\n * @module @nhtio/validation\n */\n\n/**\n * The current version of the package.\n *\n * @tip This is a constant that is replaced during the build process with the actual version of the package.\n */\nexport const version = __VERSION__\nexport * from './private'\n\n/**\n * Validate email address and domain.\n * A local version of the `@hapi/address` package used to ensure matching versions.\n */\nexport * as address from '@hapi/address'\n\n/**\n * Math and string formula parser.\n * A local version of the `@hapi/formula` package used to ensure matching versions.\n */\nexport * as formula from '@hapi/formula'\n\n/**\n * Return the filename and line number of the calling function.\n * A local version of the `@hapi/pinpoint` package is used to ensure matching versions.\n */\nexport { location } from '@hapi/pinpoint'\n\n/**\n * TLDS list for domain validation.\n * A local version of the `@hapi/tlds` package is used to ensure matching versions.\n */\nexport { tlds } from '@hapi/tlds'\n\nexport type {\n Types,\n BasicType,\n LanguageMessages,\n PresenceMode,\n ErrorFormattingOptions,\n BaseValidationOptions,\n ValidationOptions,\n AsyncValidationOptions,\n LanguageMessageTemplate,\n ErrorValidationOptions,\n RenameOptions,\n TopLevelDomainOptions,\n HierarchySeparatorOptions,\n DependencyOptions,\n EmailOptions,\n DomainOptions,\n HexOptions,\n IpOptions,\n GuidVersions,\n GuidOptions,\n UriOptions,\n DataUriOptions,\n Base64Options,\n SwitchCases,\n SwitchDefault,\n WhenOptions,\n WhenSchemaOptions,\n Cache,\n CacheProvisionOptions,\n CacheConfiguration,\n CompileOptions,\n IsSchemaOptions,\n ReferenceOptions,\n StringRegexOptions,\n RuleOptions,\n ErrorReport,\n ValidationError,\n ValidationErrorItem,\n ValidationErrorFunction,\n ValidationWarning,\n ValidationResult,\n CreateErrorOptions,\n ModifyOptions,\n MutateRegisterOptions,\n SetFlagOptions,\n CustomHelpers,\n CustomValidator,\n ExternalHelpers,\n ExternalValidationFunction,\n SchemaLikeWithoutArray,\n SchemaLike,\n NullableType,\n IsPrimitiveSubset,\n IsUnion,\n IsNonPrimitiveSubsetUnion,\n ObjectPropertiesSchema,\n PartialSchemaMap,\n StrictSchemaMap,\n SchemaMap,\n Schema,\n SchemaFunction,\n AddRuleOptions,\n GetRuleOptions,\n SchemaInternals,\n Description,\n Context,\n State,\n ArraySortOptions,\n ArrayUniqueOptions,\n ComparatorFunction,\n ObjectPatternOptions,\n Reference,\n ExtensionBoundSchema,\n RuleArgs,\n RuleMethod,\n ExtensionRule,\n CoerceResult,\n CoerceFunction,\n CoerceObject,\n ExtensionFlag,\n ExtensionTermManifest,\n ExtensionTerm,\n Extension,\n ExtensionFactory,\n Err,\n Root,\n} from 'joi'\n"],"x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,44,45,46,47,48,49,50,51,52,53,54,55,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162,163,164,165,166,167,168],"mappings":"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EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAErG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAC9G,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAC5G,EAAG,EAAG,EAAG,EAET,IAAM,GAAM,GAAM,GAA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"}