diff --git a/dist/amd/aurelia-validation.js b/dist/amd/aurelia-validation.js index e4ab9c1f..efa57489 100644 --- a/dist/amd/aurelia-validation.js +++ b/dist/amd/aurelia-validation.js @@ -1,4 +1,24 @@ -define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'aurelia-pal', 'aurelia-dependency-injection', 'aurelia-task-queue'], function (exports, aureliaBinding, aureliaTemplating, LogManager, aureliaPal, aureliaDependencyInjection, aureliaTaskQueue) { 'use strict'; +define('aurelia-validation', ['exports', 'aurelia-templating', 'aurelia-binding', 'aurelia-logging', 'aurelia-pal', 'aurelia-task-queue', 'aurelia-dependency-injection'], (function (exports, aureliaTemplating, aureliaBinding, LogManager, aureliaPal, aureliaTaskQueue, aureliaDependencyInjection) { 'use strict'; + + function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); + } + + var LogManager__namespace = /*#__PURE__*/_interopNamespace(LogManager); /** * Validates objects and properties. @@ -9,30 +29,32 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' return Validator; }()); - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 + /****************************************************************************** + Copyright (c) Microsoft Corporation. - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); @@ -45,12 +67,14 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' return c > 3 && r && Object.defineProperty(target, key, r), r; } - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); } /** @@ -238,9 +262,9 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - LogManager.getLogger('aurelia-validation') + LogManager__namespace.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length - .warn("Did you mean to use \"$" + access.name + "\" instead of \"" + access.name + "\" in this validation message template: \"" + this.originalMessage + "\"?"); + .warn("Did you mean to use \"$".concat(access.name, "\" instead of \"").concat(access.name, "\" in this validation message template: \"").concat(this.originalMessage, "\"?")); } }; return MessageExpressionValidator; @@ -435,6 +459,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' /** * Validation triggers. */ + exports.validateTrigger = void 0; (function (validateTrigger) { /** * Manual validation. Use the controller's `validate()` and `reset()` methods @@ -521,10 +546,10 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' if (element) { return element; } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } function getObject(expression, objectExpression, source) { @@ -533,7 +558,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' return value; } // tslint:disable-next-line:max-line-length - throw new Error("The '" + objectExpression + "' part of '" + expression + "' evaluates to " + value + " instead of an object, null or undefined."); + throw new Error("The '".concat(objectExpression, "' part of '").concat(expression, "' evaluates to ").concat(value, " instead of an object, null or undefined.")); } /** * Retrieves the object and property name for the specified expression. @@ -560,7 +585,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' propertyName = expression.key.evaluate(source); } else { - throw new Error("Expression '" + originalExpression + "' is not compatible with the validate binding-behavior."); + throw new Error("Expression '".concat(originalExpression, "' is not compatible with the validate binding-behavior.")); } if (object === null || object === undefined) { return null; @@ -589,19 +614,19 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' || accessor instanceof aureliaBinding.AccessMember && accessor.object instanceof aureliaBinding.AccessScope) { return accessor.name; } - throw new Error("Invalid property expression: \"" + accessor + "\""); + throw new Error("Invalid property expression: \"".concat(accessor, "\"")); }; PropertyAccessorParser.inject = [aureliaBinding.Parser]; return PropertyAccessorParser; }()); function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ var arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; var match = classic.exec(fn) || arrow.exec(fn); if (match === null) { - throw new Error("Unable to parse accessor function:\n" + fn); + throw new Error("Unable to parse accessor function:\n".concat(fn)); } return match[1]; } @@ -1113,6 +1138,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var propertyName_1 = getPropertyInfo(binding.sourceExpression, binding.source).propertyName; binding.validationSubscription = controller.subscribe(function (event) { if (!binding.validatedOnce && event.type === 'validate') { @@ -1493,7 +1519,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' get: function () { return this.fluentEnsure.rules; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -1524,7 +1550,7 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } - return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args)); + return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArray([name], args, false)); }; /** * Applies the "required" rule to the property. @@ -1664,14 +1690,14 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' // standard rule? rule = this[name]; if (rule instanceof Function) { - return rule.call.apply(rule, __spreadArrays([this], args)); + return rule.call.apply(rule, __spreadArray([this], args, false)); } - throw new Error("Rule with name \"" + name + "\" does not exist."); + throw new Error("Rule with name \"".concat(name, "\" does not exist.")); } var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined; return this.satisfies(function (value, obj) { var _a; - return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args)); + return (_a = rule.condition).call.apply(_a, __spreadArray([_this, value, obj], args, false)); }, config) .withMessageKey(name); }; @@ -1939,37 +1965,38 @@ define('aurelia-validation', ['exports', 'aurelia-binding', 'aurelia-templating' } } - exports.configure = configure; + exports.FluentEnsure = FluentEnsure; + exports.FluentRuleCustomizer = FluentRuleCustomizer; + exports.FluentRules = FluentRules; exports.GlobalValidationConfiguration = GlobalValidationConfiguration; - exports.getTargetDOMElement = getTargetDOMElement; - exports.getPropertyInfo = getPropertyInfo; + exports.MessageExpressionValidator = MessageExpressionValidator; exports.PropertyAccessorParser = PropertyAccessorParser; - exports.getAccessorExpression = getAccessorExpression; + exports.Rules = Rules; + exports.StandardValidator = StandardValidator; exports.ValidateBindingBehavior = ValidateBindingBehavior; + exports.ValidateEvent = ValidateEvent; exports.ValidateManuallyBindingBehavior = ValidateManuallyBindingBehavior; exports.ValidateOnBlurBindingBehavior = ValidateOnBlurBindingBehavior; exports.ValidateOnChangeBindingBehavior = ValidateOnChangeBindingBehavior; exports.ValidateOnChangeOrBlurBindingBehavior = ValidateOnChangeOrBlurBindingBehavior; - exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateOnChangeOrFocusoutBindingBehavior = ValidateOnChangeOrFocusoutBindingBehavior; - exports.ValidateEvent = ValidateEvent; + exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateResult = ValidateResult; exports.ValidationController = ValidationController; exports.ValidationControllerFactory = ValidationControllerFactory; exports.ValidationErrorsCustomAttribute = ValidationErrorsCustomAttribute; + exports.ValidationMessageParser = ValidationMessageParser; + exports.ValidationMessageProvider = ValidationMessageProvider; exports.ValidationRendererCustomAttribute = ValidationRendererCustomAttribute; + exports.ValidationRules = ValidationRules; exports.Validator = Validator; - exports.Rules = Rules; - exports.StandardValidator = StandardValidator; + exports.configure = configure; + exports.getAccessorExpression = getAccessorExpression; + exports.getPropertyInfo = getPropertyInfo; + exports.getTargetDOMElement = getTargetDOMElement; exports.validationMessages = validationMessages; - exports.ValidationMessageProvider = ValidationMessageProvider; - exports.ValidationMessageParser = ValidationMessageParser; - exports.MessageExpressionValidator = MessageExpressionValidator; - exports.FluentRuleCustomizer = FluentRuleCustomizer; - exports.FluentRules = FluentRules; - exports.FluentEnsure = FluentEnsure; - exports.ValidationRules = ValidationRules; Object.defineProperty(exports, '__esModule', { value: true }); -}); +})); +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/amd/aurelia-validation.js.map b/dist/amd/aurelia-validation.js.map new file mode 100644 index 00000000..aa923473 --- /dev/null +++ b/dist/amd/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":["LiteralString","LiteralPrimitive","Binary","Conditional","CallMember","BindingLanguage","LogManager","ViewResources","validateTrigger","DOM","BindingBehavior","ValueConverter","AccessScope","getContextFor","AccessMember","AccessKeyed","Parser","Optional","TaskQueue","bindingBehavior","Lazy","bindable","bindingMode","customAttribute"],"mappings":";;;;;;;;;;;;;;;;;;;;;;EAEA;;EAEG;AACH,MAAA,SAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,SAAA,GAAA;OAwBC;MAAD,OAAC,SAAA,CAAA;EAAD,CAAC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EC7BD;;EAEG;AACH,MAAA,cAAA,kBAAA,YAAA;EAQE;;;;;EAKG;MACH,SACS,cAAA,CAAA,IAAS,EACT,MAAW,EACX,YAAoC,EACpC,KAAc,EACd,OAA6B,EAAA;EAA7B,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAA6B,GAAA,IAAA,CAAA,EAAA;UAJ7B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;UACT,IAAM,CAAA,MAAA,GAAN,MAAM,CAAK;UACX,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAwB;UACpC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAS;UACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAsB;EAEpC,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;OACnC;EAEM,IAAA,cAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;EACE,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;OAC7C,CAAA;MAzBc,cAAM,CAAA,MAAA,GAAG,CAAC,CAAC;MA0B5B,OAAC,cAAA,CAAA;EAAA,CA3BD,EA2BC;;EC5BD;;EAEG;AACH,MAAA,KAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,KAAA,GAAA;OAmCC;EA7BC;;EAEG;EACW,IAAA,KAAA,CAAA,GAAG,GAAjB,UAAkB,MAAW,EAAE,KAAyB,EAAA;UACtD,IAAI,MAAM,YAAY,QAAQ,EAAE;EAC9B,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;EAC3B,SAAA;UACD,MAAM,CAAC,cAAc,CACnB,MAAM,EACN,KAAK,CAAC,GAAG,EACT,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;OAC7E,CAAA;EAED;;EAEG;MACW,KAAK,CAAA,KAAA,GAAnB,UAAoB,MAAW,EAAA;UAC7B,IAAI,MAAM,YAAY,QAAQ,EAAE;EAC9B,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;EAC3B,SAAA;EACD,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;OAC1B,CAAA;EAED;;EAEG;MACW,KAAG,CAAA,GAAA,GAAjB,UAAkB,MAAW,EAAA;UAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;OAClC,CAAA;EAjCD;;EAEG;MACY,KAAG,CAAA,GAAA,GAAG,WAAW,CAAC;MA+BnC,OAAC,KAAA,CAAA;EAAA,CAnCD,EAmCC;;EC1BD;EACA,IAAA,iBAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,iBAAA,GAAA;OAuFC;MAtFQ,iBAAU,CAAA,SAAA,CAAA,UAAA,GAAjB,UAAkB,KAAU,EAAA;EAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;OACnC,CAAA;MAEM,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA3B,UAA4B,QAAyB,EAAA;EACnD,QAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACjC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;OAC/B,CAAA;MAEM,iBAAmB,CAAA,SAAA,CAAA,mBAAA,GAA1B,UAA2B,SAAyB,EAAA;EAClD,QAAA,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAClC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;OAChC,CAAA;MAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAW,EAAA;EAC5B,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAC3B,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAA;MAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,WAAwB,EAAA;EAC9C,QAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACnC,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAC7B,QAAA,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OAC7B,CAAA;MAEM,iBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,MAAW,EAAA;EAChC,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;OACnC,CAAA;MAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;EACzC,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;OAC3B,CAAA;MAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,MAAoB,EAAA;EAC3C,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OAC5B,CAAA;MAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;EACzC,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EAC3B,QAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OACzB,CAAA;MAEM,iBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,IAAS,EAAA;EAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAA;MAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,IAAS,EAAA;EAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAA;MAEM,iBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,IAAgB,EAAA;EACrC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAA;MAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAW,EAAA;EAC5B,QAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OAChC,CAAA;MAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAc,EAAA;EAC/B,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACzB,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;OAC3B,CAAA;MAEM,iBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA5B,UAA6B,OAAyB,EAAA;EACpD,QAAA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;OAC/B,CAAA;MAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,OAAY,EAAA;EACnC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;OAClC,CAAA;MAEM,iBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,OAAY,EAAA;EACpC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;OAChC,CAAA;MAEM,iBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,OAAsB,EAAA;EAC9C,QAAA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;OAC/B,CAAA;MAEO,iBAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,IAAkB,EAAA;EAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;cACpC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;EACtB,SAAA;OACF,CAAA;MACH,OAAC,iBAAA,CAAA;EAAD,CAAC,EAAA,CAAA;;ACzFD,MAAA,uBAAA,kBAAA,YAAA;EAQE,IAAA,SAAA,uBAAA,CAAoB,eAAgC,EAAA;UAAhC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;EAL5C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAIA,4BAAa,CAAC,EAAE,CAAC,CAAC;EAC9C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAIC,+BAAgB,CAAC,IAAI,CAAC,CAAC;EAC5C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAIA,+BAAgB,CAAC,SAAS,CAAC,CAAC;UACtD,IAAK,CAAA,KAAA,GAAsC,EAAE,CAAC;OAEG;MAElD,uBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,OAAe,EAAA;UAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;EACrC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EAC5B,SAAA;EAED,QAAA,IAAM,KAAK,GAAoC,IAAI,CAAC,eAAuB,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;UAC9G,IAAI,KAAK,KAAK,IAAI,EAAE;EAClB,YAAA,OAAO,IAAID,4BAAa,CAAC,OAAO,CAAC,CAAC;EACnC,SAAA;UACD,IAAI,UAAU,GAAe,IAAIA,4BAAa,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;EACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;EACxC,YAAA,UAAU,GAAG,IAAIE,qBAAM,CACrB,GAAG,EACH,UAAU,EACV,IAAIA,qBAAM,CACR,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAe,CAAC,EACrC,IAAIF,4BAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAC1C,CACF,CAAC;EACH,SAAA;EAED,QAAA,0BAA0B,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;EAEzD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;EAEjC,QAAA,OAAO,UAAU,CAAC;OACnB,CAAA;MAEO,uBAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,IAAgB,EAAA;;UAE/B,OAAO,IAAIG,0BAAW,CACpB,IAAID,qBAAM,CACR,IAAI,EACJ,IAAIA,qBAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAC5C,IAAIA,qBAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAClD,EACD,IAAI,CAAC,qBAAqB,EAC1B,IAAIE,yBAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CACrC,CAAC;OACH,CAAA;EAjDa,IAAA,uBAAA,CAAA,MAAM,GAAG,CAACC,iCAAe,CAAC,CAAC;MAkD3C,OAAC,uBAAA,CAAA;EAAA,CAnDD,EAmDC,EAAA;AAED,MAAA,0BAAA,kBAAA,UAAA,MAAA,EAAA;MAAgD,SAAiB,CAAA,0BAAA,EAAA,MAAA,CAAA,CAAA;EAM/D,IAAA,SAAA,0BAAA,CAAoB,eAAuB,EAAA;EAA3C,QAAA,IAAA,KAAA,GACE,iBAAO,IACR,IAAA,CAAA;UAFmB,KAAe,CAAA,eAAA,GAAf,eAAe,CAAQ;;OAE1C;EAPa,IAAA,0BAAA,CAAA,QAAQ,GAAtB,UAAuB,UAAsB,EAAE,eAAuB,EAAA;EACpE,QAAA,IAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,eAAe,CAAC,CAAC;EAChE,QAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;OAC5B,CAAA;MAMM,0BAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;EACzC,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;EACzB,YAAA,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;EAChF,SAAA;UACD,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;EAC9G,YAAAC,qBAAU,CAAC,SAAS,CAAC,oBAAoB,CAAC;;EAEvC,iBAAA,IAAI,CAAC,yBAAA,CAAA,MAAA,CAAyB,MAAM,CAAC,IAAI,EAAiB,kBAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,IAAI,uDAA2C,IAAI,CAAC,eAAe,EAAA,KAAA,CAAI,CAAC,CAAC;EAC9I,SAAA;OACF,CAAA;MACH,OAAC,0BAAA,CAAA;EAAD,CApBA,CAAgD,iBAAiB,CAoBhE;;EC/ED;;EAEG;AACU,MAAA,kBAAkB,GAAuB;EACpD;;EAEG;EACH,IAAA,OAAO,EAAE,6BAA8B;EACvC,IAAA,QAAQ,EAAE,8BAA+B;EACzC,IAAA,OAAO,EAAE,6CAA8C;EACvD,IAAA,KAAK,EAAE,uCAAwC;EAC/C,IAAA,SAAS,EAAE,iGAAoG;EAC/G,IAAA,SAAS,EAAE,sGAAyG;EACpH,IAAA,QAAQ,EAAE,+FAAkG;EAC5G,IAAA,QAAQ,EAAE,kGAAqG;EAC/G,IAAA,GAAG,EAAE,yDAA2D;EAChE,IAAA,GAAG,EAAE,wDAA0D;EAC/D,IAAA,KAAK,EAAE,gFAAmF;EAC1F,IAAA,OAAO,EAAE,qFAAwF;EACjG,IAAA,MAAM,EAAE,mDAAqD;IAC7D;EAEF;;EAEG;AACH,MAAA,yBAAA,kBAAA,YAAA;EAGE,IAAA,SAAA,yBAAA,CAAmB,MAA+B,EAAA;UAA/B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAyB;OAAK;EAEvD;;;EAGG;MACI,yBAAU,CAAA,SAAA,CAAA,UAAA,GAAjB,UAAkB,GAAW,EAAA;EAC3B,QAAA,IAAI,OAAe,CAAC;UACpB,IAAI,GAAG,IAAI,kBAAkB,EAAE;EAC7B,YAAA,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;EACnC,SAAA;EAAM,aAAA;EACL,YAAA,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;EACzC,SAAA;UACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;OACnC,CAAA;EAED;;;;;EAKG;EACI,IAAA,yBAAA,CAAA,SAAA,CAAA,cAAc,GAArB,UAAsB,YAA6B,EAAE,WAA4C,EAAA;EAC/F,QAAA,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE;EACrD,YAAA,OAAO,CAAC,WAAW,YAAY,QAAQ,IAAI,WAAW,EAAE,GAAG,WAAqB,CAAC;EAClF,SAAA;;EAGD,QAAA,IAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;EAEnE,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;OACvD,CAAA;EAjCa,IAAA,yBAAA,CAAA,MAAM,GAAG,CAAC,uBAAuB,CAAC,CAAC;MAkCnD,OAAC,yBAAA,CAAA;EAAA,CAnCD,EAmCC;;EC3DD;;;EAGG;AACH,MAAA,iBAAA,kBAAA,UAAA,MAAA,EAAA;MAAuC,SAAS,CAAA,iBAAA,EAAA,MAAA,CAAA,CAAA;MAO9C,SAAY,iBAAA,CAAA,eAA0C,EAAE,SAAwB,EAAA;EAAhF,QAAA,IAAA,KAAA,GACE,iBAAO,IAIR,IAAA,CAAA;EAHC,QAAA,KAAI,CAAC,eAAe,GAAG,eAAe,CAAC;EACvC,QAAA,KAAI,CAAC,eAAe,GAAI,SAAiB,CAAC,eAAe,CAAC;UAC1D,KAAI,CAAC,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;OAC5E;EAED;;;;;;EAMG;EACI,IAAA,iBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAvB,UAAwB,MAAW,EAAE,YAA6B,EAAE,KAAW,EAAA;EAC7E,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;OAC3D,CAAA;EAED;;;;;EAKG;EACI,IAAA,iBAAA,CAAA,SAAA,CAAA,cAAc,GAArB,UAAsB,MAAW,EAAE,KAAW,EAAA;EAC5C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;OACnD,CAAA;EAED;;;;EAIG;EACI,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,UAAkB,KAAyB,EAAE,IAAoB,EAAA;EAC/D,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;UACrB,OAAO,CAAC,EAAE,EAAE;EACV,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;EACjC,gBAAA,OAAO,IAAI,CAAC;EACb,aAAA;EACF,SAAA;EACD,QAAA,OAAO,KAAK,CAAC;OACd,CAAA;EAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAoB,EAAE,MAAW,EAAE,KAAU,EAAA;EAC9D,QAAA,IAAM,UAAU,GAAe,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;UAE5F,IAAA,EAAA,GAAsC,IAAI,CAAC,QAAQ,EAA3C,YAAY,GAAA,EAAA,CAAA,IAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAkB,CAAC;UACxD,IAAI,YAAY,KAAK,IAAI,EAAE;cACzB,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;EAC9E,SAAA;EACD,QAAA,IAAM,eAAe,GAAQ;EAC3B,YAAA,YAAY,EAAE,WAAW;EACzB,YAAA,aAAa,EAAE,YAAY;EAC3B,YAAA,MAAM,EAAE,KAAK;EACb,YAAA,OAAO,EAAE,MAAM;cACf,OAAO,EAAE,IAAI,CAAC,MAAM;;;cAGpB,eAAe,EAAE,IAAI,CAAC,cAAc;WACrC,CAAC;EACF,QAAA,OAAO,UAAU,CAAC,QAAQ,CACxB,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,iBAAA,EAAE,EAC3C,IAAI,CAAC,eAAe,CAAC,CAAC;OACzB,CAAA;MAEO,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UACE,MAAW,EACX,YAAoC,EACpC,YAAgC,EAChC,QAAgB,EAChB,OAAyB,EAAA;UAL3B,IAmDC,KAAA,GAAA,IAAA,CAAA;;UA3CC,IAAM,qBAAqB,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,CAAC;EAElF,QAAA,IAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;UACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;;UAGpB,IAAM,QAAQ,GAAuB,EAAE,CAAC;kCAC/B,CAAC,EAAA;EACR,YAAA,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;;cAItB,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY,EAAE;;EAEjE,aAAA;;cAGD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;;EAEpC,aAAA;;cAGD,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;cAChF,IAAI,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;EACrD,YAAA,IAAI,EAAE,gBAAgB,YAAY,OAAO,CAAC,EAAE;EAC1C,gBAAA,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;EACtD,aAAA;cACD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAA,KAAK,EAAA;kBACrC,IAAM,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;kBACpE,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;EACnF,gBAAA,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC;EAC7B,gBAAA,OAAO,KAAK,CAAC;eACd,CAAC,CAAC,CAAC;;EAzBR,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAA;sBAA5B,CAAC,CAAA,CAAA;EA0BT,SAAA;EAED,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;EACzB,aAAA,IAAI,CAAC,YAAA;EACN,YAAA,QAAQ,EAAE,CAAC;EACX,YAAA,IAAI,QAAQ,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE;EAC9C,gBAAA,OAAO,KAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;EACzF,aAAA;EACD,YAAA,OAAO,OAAO,CAAC;EACjB,SAAC,CAAC,CAAC;OACJ,CAAA;EAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,QAAQ,GAAhB,UACE,MAAW,EACX,YAAoC,EACpC,KAAgC,EAAA;;UAGhC,IAAI,CAAC,KAAK,EAAE;;EAEV,YAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;EAC3B,SAAA;;UAGD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;EAChC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;EAC5B,SAAA;EAED,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;OACtE,CAAA;EA7Ia,IAAA,iBAAA,CAAA,MAAM,GAAG,CAAC,yBAAyB,EAAEC,+BAAa,CAAC,CAAC;MA8IpE,OAAC,iBAAA,CAAA;GAAA,CA/IsC,SAAS,CA+I/C;;EC3JD;;EAEG;AACSC,mCAkCX;EAlCD,CAAA,UAAY,eAAe,EAAA;EACzB;;;EAGG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;EAEV;;EAEG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;EAER;;EAEG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;EAEV;;;EAGG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;EAEhB;;;EAGG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;EAEZ;;;EAGG;EACH,IAAA,eAAA,CAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAoB,CAAA;EACtB,CAAC,EAlCWA,uBAAe,KAAfA,uBAAe,GAkC1B,EAAA,CAAA,CAAA;;EC9BD;;EAEG;AACH,MAAA,6BAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,6BAAA,GAAA;UAGU,IAAa,CAAA,aAAA,GAAkB,iBAAiB,CAAC;EACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,6BAA6B,CAAC,0BAA0B,CAAC;OA2BtF;EAzBC;;EAEG;MACI,6BAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,IAAmB,EAAA;EACxC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;EAC1B,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;MAEM,6BAAwB,CAAA,SAAA,CAAA,wBAAA,GAA/B,UAAgC,OAAwB,EAAA;EACtD,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;EACjC,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAEM,IAAA,6BAAA,CAAA,SAAA,CAAA,2BAA2B,GAAlC,YAAA;UACE,OAAO,IAAI,CAAC,iBAAiB,CAAC;OAC/B,CAAA;EAED;;EAEG;MACI,6BAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,SAAoB,EAAA;UAC/B,IAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;EACpD,QAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;EACjD,QAAA,SAAS,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;OACjE,CAAA;EA7Ba,IAAA,6BAAA,CAAA,0BAA0B,GAAGA,uBAAe,CAAC,IAAI,CAAC;MA8BlE,OAAC,6BAAA,CAAA;EAAA,CA/BD,EA+BC;;ECvCD;;;;;EAKG;EACa,SAAA,mBAAmB,CAAC,OAAY,EAAE,IAAS,EAAA;EACzD,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;MAE9B,IAAI,MAAM,YAAY,OAAO,EAAE;EAC7B,QAAA,OAAO,MAAM,CAAC;EACf,KAAA;;;EAGD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;UACzD,IAAM,UAAU,GAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;EAC5C,QAAA,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,EAAE;EACnC,YAAA,IAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAACC,cAAG,CAAC,OAAO,CAAC,CAAC;EACtD,YAAA,IAAI,OAAO,EAAE;EACX,gBAAA,OAAO,OAAO,CAAC;EAChB,aAAA;cACD,MAAM,IAAI,KAAK,CAAC,wCAAA,CAAA,MAAA,CAAwC,OAAO,CAAC,gBAAgB,EAAI,KAAA,CAAA,CAAC,CAAC;EACvF,SAAA;EACF,KAAA;MACD,MAAM,IAAI,KAAK,CAAC,wCAAA,CAAA,MAAA,CAAwC,OAAO,CAAC,gBAAgB,EAAI,KAAA,CAAA,CAAC,CAAC;EACxF;;EChBA,SAAS,SAAS,CAAC,UAAsB,EAAE,gBAA4B,EAAE,MAAW,EAAA;MAClF,IAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAW,CAAC,CAAC;MAC7D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,YAAY,MAAM,EAAE;EACpE,QAAA,OAAO,KAAK,CAAC;EACd,KAAA;;MAED,MAAM,IAAI,KAAK,CAAC,OAAQ,CAAA,MAAA,CAAA,gBAAgB,EAAc,aAAA,CAAA,CAAA,MAAA,CAAA,UAAU,EAAkB,iBAAA,CAAA,CAAA,MAAA,CAAA,KAAK,EAA2C,2CAAA,CAAA,CAAC,CAAC;EACtI,CAAC;EAED;;;;EAIG;EACa,SAAA,eAAe,CAC7B,UAAsB,EACtB,MAAa,EAAA;MAEb,IAAM,kBAAkB,GAAG,UAAU,CAAC;EACtC,IAAA,OAAO,UAAU,YAAYC,8BAAe,IAAI,UAAU,YAAYC,6BAAc,EAAE;EACpF,QAAA,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;EACpC,KAAA;EAED,IAAA,IAAI,MAAiC,CAAC;EACtC,IAAA,IAAI,YAAoB,CAAC;MACzB,IAAI,UAAU,YAAYC,0BAAW,EAAE;EACrC,QAAA,MAAM,GAAGC,4BAAa,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;EACrE,QAAA,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,KAAA;WAAM,IAAI,UAAU,YAAYC,2BAAY,EAAE;UAC7C,MAAM,GAAG,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;EAClE,QAAA,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;EAChC,KAAA;WAAM,IAAI,UAAU,YAAYC,0BAAW,EAAE;UAC5C,MAAM,GAAG,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;UAClE,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;EAChD,KAAA;EAAM,SAAA;EACL,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAe,kBAAkB,EAAA,yDAAA,CAAyD,CAAC,CAAC;EAC7G,KAAA;EACD,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;EAC3C,QAAA,OAAO,IAAI,CAAC;EACb,KAAA;EACD,IAAA,OAAO,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC;EAClC;;ECpDM,SAAU,QAAQ,CAAC,KAAU,EAAA;EACjC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;EACrE,CAAC;EAEK,SAAU,QAAQ,CAAC,KAAU,EAAA;EACjC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;EACrE;;ACGA,MAAA,sBAAA,kBAAA,YAAA;EAGE,IAAA,SAAA,sBAAA,CAAoB,MAAc,EAAA;UAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;OAAK;MAEhC,sBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAA8B,QAA6D,EAAA;UACzF,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;EAC5C,YAAA,OAAO,QAA2B,CAAC;EACpC,SAAA;UACD,IAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;UAChE,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;UACjD,IAAI,QAAQ,YAAYH,0BAAW;iBAC9B,QAAQ,YAAYE,2BAAY,IAAI,QAAQ,CAAC,MAAM,YAAYF,0BAAW,EAAE;cAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;EACtB,SAAA;EACD,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAiC,QAAQ,EAAA,IAAA,CAAG,CAAC,CAAC;OAC/D,CAAA;EAfa,IAAA,sBAAA,CAAA,MAAM,GAAG,CAACI,qBAAM,CAAC,CAAC;MAgBlC,OAAC,sBAAA,CAAA;EAAA,CAjBD,EAiBC,EAAA;EAEK,SAAU,qBAAqB,CAAC,EAAU,EAAA;;MAE9C,IAAM,OAAO,GAAG,kIAAkI,CAAC;;MAEnJ,IAAM,KAAK,GAAG,iDAAiD,CAAC;EAChE,IAAA,IAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;MACjD,IAAI,KAAK,KAAK,IAAI,EAAE;EAClB,QAAA,MAAM,IAAI,KAAK,CAAC,8CAAuC,EAAE,CAAE,CAAC,CAAC;EAC9D,KAAA;EACD,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;EAClB;;AClCA,MAAA,aAAA,kBAAA,YAAA;EACE,IAAA,SAAA,aAAA;EACE;;EAEG;MACa,IAA0B;EAE1C;;;EAGG;MACa,MAAwB;EAExC;;;;EAIG;MACa,OAAyB;EAEzC;;;EAGG;MACa,WAAuC;EAEvD;;;;;;EAMG;MACa,wBAAyD,EAAA;UA5BzD,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAsB;UAM1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAkB;UAOxB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;UAMzB,IAAW,CAAA,WAAA,GAAX,WAAW,CAA4B;UASvC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAAiC;OAEtE;MACP,OAAC,aAAA,CAAA;EAAD,CAAC,EAAA;;EC5BD;;;;EAIG;AACH,MAAA,oBAAA,kBAAA,YAAA;EAwCE,IAAA,SAAA,oBAAA,CACU,SAAoB,EACpB,cAAsC,EAC9C,MAAsC,EAAA;UAF9B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;UACpB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAwB;;EAtCxC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;;UAG3C,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAC;EAE7C;;EAEG;UACK,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;EAEvC;;EAEG;UACI,IAAM,CAAA,MAAA,GAAqB,EAAE,CAAC;EAErC;;EAEG;UACI,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;;EAGlB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;;EAGhD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;;EAQ9B,QAAA,IAAA,CAAA,gBAAgB,GAAiB,OAAO,CAAC,OAAO,EAAE,CAAC;UAEnD,IAAc,CAAA,cAAA,GAAuC,EAAE,CAAC;EAO9D,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,YAAY,6BAA6B;EAClE,cAAE,MAAM,CAAC,2BAA2B,EAAE;EACtC,cAAE,6BAA6B,CAAC,0BAA0B,CAAC;OAChE;EAED;;;;EAIG;MACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,QAAwC,EAAA;UAAzD,IAWC,KAAA,GAAA,IAAA,CAAA;EAVC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;UACnC,OAAO;EACL,YAAA,OAAO,EAAE,YAAA;kBACP,IAAM,KAAK,GAAG,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;EACpD,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;sBAChB,OAAO;EACR,iBAAA;kBACD,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;eACtC;WACF,CAAC;OACH,CAAA;EAED;;;;EAIG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,MAAW,EAAE,KAAW,EAAA;UACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;OACjC,CAAA;EAED;;;EAGG;MACI,oBAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,MAAW,EAAA;EAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;UAC5B,IAAI,CAAC,kBAAkB,CACrB,OAAO,EACP,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,MAAM,KAAK,MAAM,CAAxB,EAAwB,CAAC,EACvD,EAAE,CAAC,CAAC;OACP,CAAA;EAED;;EAEG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,UACE,OAAe,EACf,MAAe,EACf,YAAsE,EAAA;EAAtE,QAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAsE,GAAA,IAAA,CAAA,EAAA;EAEtE,QAAA,IAAI,oBAA4C,CAAC;UACjD,IAAI,YAAY,KAAK,IAAI,EAAE;cACzB,oBAAoB,GAAG,YAAmB,CAAC;EAC5C,SAAA;EAAM,aAAA;cACL,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;EAChE,SAAA;EACD,QAAA,IAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;UAC7G,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;EAClD,QAAA,OAAO,MAAM,CAAC;OACf,CAAA;EAED;;EAEG;MACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAsB,EAAA;UACvC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;cACvC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;EAChD,SAAA;OACF,CAAA;EAED;;;EAGG;MACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,QAA4B,EAAA;UAA/C,IAOC,KAAA,GAAA,IAAA,CAAA;EANC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;UAC9B,QAAQ,CAAC,MAAM,CAAC;EACd,YAAA,IAAI,EAAE,UAAU;EAChB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,EAAA,EAAI,QAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAc,EAAE,EAAC,EAAA,CAAC;EAClG,YAAA,QAAQ,EAAE,EAAE;EACb,SAAA,CAAC,CAAC;OACJ,CAAA;EAED;;;EAGG;MACI,oBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,QAA4B,EAAA;UAAlD,IAOC,KAAA,GAAA,IAAA,CAAA;EANC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;UAC3D,QAAQ,CAAC,MAAM,CAAC;EACd,YAAA,IAAI,EAAE,OAAO;EACb,YAAA,MAAM,EAAE,EAAE;EACV,YAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,EAAA,EAAI,QAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAc,EAAE,EAAC,EAAA,CAAC;EACrG,SAAA,CAAC,CAAC;OACJ,CAAA;EAED;;;;;EAKG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,eAAe,GAAtB,UAAuB,OAAgB,EAAE,MAAe,EAAE,KAAW,EAAA;EACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;OACnE,CAAA;EAED;;;EAGG;MACI,oBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,OAAgB,EAAA;EACvC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;EAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;OAC/B,CAAA;EAED;;;EAGG;MACK,oBAAuB,CAAA,SAAA,CAAA,uBAAA,GAA/B,UAAgC,WAAiC,EAAA;UAAjE,IAgBC,KAAA,GAAA,IAAA,CAAA;EAfC,QAAA,IAAI,WAAW,EAAE;EACP,YAAA,IAAA,QAAM,GAA0B,WAAW,CAAA,MAArC,EAAE,cAAY,GAAY,WAAW,CAAA,YAAvB,EAAE,OAAK,GAAK,WAAW,MAAhB,CAAiB;EACpD,YAAA,IAAI,WAA8C,CAAC;cACnD,IAAI,WAAW,CAAC,YAAY,EAAE;EAC5B,gBAAA,WAAS,GAAG,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,QAAM,IAAI,CAAC,CAAC,YAAY,KAAK,cAAY,CAAA,EAAA,CAAC;EACzE,aAAA;EAAM,iBAAA;EACL,gBAAA,WAAS,GAAG,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,KAAK,QAAM,CAAnB,EAAmB,CAAC;EACtC,aAAA;EACD,YAAA,IAAI,OAAK,EAAE;kBACT,OAAO,UAAA,CAAC,EAAI,EAAA,OAAA,WAAS,CAAC,CAAC,CAAC,IAAI,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAxD,EAAwD,CAAC;EACtE,aAAA;EACD,YAAA,OAAO,WAAS,CAAC;EAClB,SAAA;EAAM,aAAA;EACL,YAAA,OAAO,YAAM,EAAA,OAAA,IAAI,CAAA,EAAA,CAAC;EACnB,SAAA;OACF,CAAA;EAED;;;;EAIG;MACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,WAAiC,EAAA;UAAjD,IAgEC,KAAA,GAAA,IAAA,CAAA;;EA9DC,QAAA,IAAI,OAAwC,CAAC;EAC7C,QAAA,IAAI,WAAW,EAAE;;EAET,YAAA,IAAA,QAAM,GAA0B,WAAW,CAAA,MAArC,EAAE,cAAY,GAAY,WAAW,CAAA,YAAvB,EAAE,OAAK,GAAK,WAAW,MAAhB,CAAiB;;cAElD,OAAK,GAAG,OAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAM,CAAC,CAAC;;EAE1C,YAAA,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;;EAE1C,gBAAA,OAAO,GAAG,YAAA,EAAM,OAAA,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAM,EAAE,OAAK,CAAC,CAAA,EAAA,CAAC;EAC9D,aAAA;EAAM,iBAAA;;EAEL,gBAAA,OAAO,GAAG,YAAM,EAAA,OAAA,KAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAM,EAAE,cAAY,EAAE,OAAK,CAAC,CAAA,EAAA,CAAC;EAC9E,aAAA;EACF,SAAA;EAAM,aAAA;;EAEL,YAAA,OAAO,GAAG,YAAA;kBACR,IAAM,QAAQ,GAAgC,EAAE,CAAC;EACjD,gBAAA,KAA8B,IAAwB,EAAA,GAAA,CAAA,EAAxB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,EAAxB,EAAwB,GAAA,EAAA,CAAA,MAAA,EAAxB,IAAwB,EAAE;EAA7C,oBAAA,IAAA,WAAe,EAAd,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;EACvB,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;EAC7D,iBAAA;EACD,gBAAA,KAAmC,IAAyB,EAAA,GAAA,CAAA,EAAzB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,QAAQ,CAAC,EAAzB,EAAyB,GAAA,EAAA,CAAA,MAAA,EAAzB,IAAyB,EAAE;EAAnD,oBAAA,IAAA,WAAoB,EAAnB,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAI,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;EAC1B,oBAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;EAC7F,oBAAA,IAAI,CAAC,YAAY,IAAI,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;0BAC1D,SAAS;EACV,qBAAA;sBACD,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;EACvG,iBAAA;EACD,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAA,UAAU,EAAI,EAAA,OAAA,UAAU,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,EAAK,EAAA,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,EAAE,EAAE,CAAC,CAA5C,EAA4C,CAAC,CAAC;EAChG,aAAC,CAAC;EACH,SAAA;;EAGD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;EACvB,QAAA,IAAM,aAAa,GAAsC,IAAI,CAAC,gBAAgB;eAC3E,IAAI,CAAC,OAAO,CAAC;eACb,IAAI,CAAC,UAAC,UAA4B,EAAA;cACjC,IAAM,SAAS,GAAG,KAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;cAC5D,IAAM,UAAU,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;cAClD,KAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;EAC5D,YAAA,IAAI,aAAa,KAAK,KAAI,CAAC,gBAAgB,EAAE;EAC3C,gBAAA,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACzB,aAAA;EACD,YAAA,IAAM,MAAM,GAA6B;EACvC,gBAAA,WAAW,EAAA,WAAA;EACX,gBAAA,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,CAAC,KAAK,GAAA,CAAC,KAAK,SAAS;EACnD,gBAAA,OAAO,EAAE,UAAU;eACpB,CAAC;EACF,YAAA,KAAI,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;EAC1C,YAAA,OAAO,MAAM,CAAC;EAChB,SAAC,CAAC;eACD,KAAK,CAAC,UAAA,SAAS,EAAA;;EAEd,YAAA,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;EACxB,YAAA,KAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;EAE1C,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;EACnC,SAAC,CAAC,CAAC;EAEL,QAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;EAEtC,QAAA,OAAO,aAAa,CAAC;OACtB,CAAA;EAED;;;;EAIG;MACI,oBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,WAAiC,EAAA;UAC5C,IAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;UAC5D,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;UAClD,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;EACjD,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;OACzC,CAAA;EAED;;EAEG;MACK,oBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UAA8B,EAAwC,EAAA;cAAtC,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;UAClD,IAAM,QAAQ,GAAc,EAAE,CAAC;EAC/B,QAAA,KAAoC,IAAyB,EAAA,GAAA,CAAA,EAAzB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAzB,EAAyB,GAAA,EAAA,CAAA,MAAA,EAAzB,IAAyB,EAAE;EAApD,YAAA,IAAA,WAAqB,EAApB,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAI,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA;EAC3B,YAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;EAC7F,YAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,EAAE;EAChG,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACvB,aAAA;EACF,SAAA;EACD,QAAA,OAAO,QAAQ,CAAC;OACjB,CAAA;EAEO,IAAA,oBAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UACE,IAA0B,EAC1B,UAA4B,EAAE,UAA4B,EAAA;;EAG1D,QAAA,IAAM,WAAW,GAAsB;EACrC,YAAA,IAAI,EAAA,IAAA;EACJ,YAAA,MAAM,EAAE,EAAE;EACV,YAAA,QAAQ,EAAE,EAAE;WACb,CAAC;;EAGF,QAAA,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;kCAGtB,SAAS,EAAA;;cAElB,IAAM,QAAQ,GAAG,MAAK,CAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;;EAG3D,YAAA,MAAA,CAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;;EAGhC,YAAA,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC;;EAG3D,YAAA,IAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CACzC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAvG,EAAuG,CAAC,CAAC;EAChH,YAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;;EAEzB,gBAAA,MAAA,CAAK,OAAO,CAAC,MAAM,CAAC,OAAK,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACxD,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;EACpB,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,OAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACvD,iBAAA;EACF,aAAA;EAAM,iBAAA;;EAEL,gBAAA,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;EAG1D,gBAAA,IAAM,UAAQ,GAAG,MAAA,CAAK,qBAAqB,CAAC,SAAS,CAAC,CAAC;kBACvD,MAAK,CAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,UAAQ,CAAC,CAAC;;EAGvC,gBAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAA,UAAA,EAAE,CAAC,CAAC;;;EAIzD,gBAAA,MAAA,CAAK,OAAO,CAAC,MAAM,CAAC,MAAA,CAAK,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;kBACnE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE;EACvC,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,OAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;EACvD,iBAAA;uBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;EAC/C,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,MAAA,CAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;EAClE,iBAAA;EAAM,qBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;EAC3B,oBAAA,MAAA,CAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;EAC7B,iBAAA;EACF,aAAA;;;;EAxCH,QAAA,KAAwB,UAAU,EAAV,YAAA,GAAA,UAAU,EAAV,EAAA,GAAA,YAAA,CAAA,MAAU,EAAV,EAAU,EAAA,EAAA;EAA7B,YAAA,IAAM,SAAS,GAAA,YAAA,CAAA,EAAA,CAAA,CAAA;sBAAT,SAAS,CAAA,CAAA;EAyCnB,SAAA;;EAGD,QAAA,KAAqB,UAAU,EAAV,YAAA,GAAA,UAAU,EAAV,EAAU,GAAA,YAAA,CAAA,MAAA,EAAV,IAAU,EAAE;EAA5B,YAAA,IAAM,MAAM,GAAA,YAAA,CAAA,EAAA,CAAA,CAAA;cACf,IAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;EACpD,YAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC;cAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;EACpC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;EACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EAC1B,aAAA;EACF,SAAA;;UAGD,KAAuB,IAAA,EAAA,GAAA,CAAc,EAAd,EAAA,GAAA,IAAI,CAAC,SAAS,EAAd,EAAA,GAAA,EAAA,CAAA,MAAc,EAAd,EAAA,EAAc,EAAE;EAAlC,YAAA,IAAM,QAAQ,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;EACjB,YAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;EAC9B,SAAA;OACF,CAAA;EAED;;EAEG;MACI,oBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,OAAgB,EAAA;EACrC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;cACpB,OAAO;EACR,SAAA;EACD,QAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;EAC7F,QAAA,IAAI,KAAK,CAAC;UACV,IAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;EACrD,QAAA,IAAI,iBAAiB,EAAE;EACrB,YAAA,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;EAChC,YAAA,iBAAiB,CAAC,YAAY,GAAG,YAAY,CAAC;EAC/C,SAAA;UACD,IAAI,CAAC,YAAY,EAAE;cACjB,OAAO;EACR,SAAA;UACO,IAAA,MAAM,GAAmB,YAAY,CAAA,MAA/B,EAAE,YAAY,GAAK,YAAY,CAAA,YAAjB,CAAkB;EAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;OAChD,CAAA;EAED;;EAEG;MACI,oBAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,OAAgB,EAAA;UAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;EACrD,QAAA,IAAI,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;EAC3F,QAAA,IAAI,CAAC,YAAY,IAAI,iBAAiB,EAAE;EACtC,YAAA,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;EAC/C,SAAA;EACD,QAAA,IAAI,iBAAiB,EAAE;EACrB,YAAA,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;EACvC,SAAA;UACD,IAAI,CAAC,YAAY,EAAE;cACjB,OAAO;EACR,SAAA;UACO,IAAA,MAAM,GAAmB,YAAY,CAAA,MAA/B,EAAE,YAAY,GAAK,YAAY,CAAA,YAAjB,CAAkB;UAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC;OACtC,CAAA;EAED;;;EAGG;MACI,oBAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,UAA2B,EAAA;EAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;EAClC,QAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;EAClD,QAAA,KAAsB,UAAQ,EAAR,UAAA,GAAA,QAAQ,EAAR,EAAQ,GAAA,UAAA,CAAA,MAAA,EAAR,IAAQ,EAAE;EAA3B,YAAA,IAAM,OAAO,GAAA,UAAA,CAAA,EAAA,CAAA,CAAA;EAChB,YAAA,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;cAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;EACjB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;EACtB,SAAA;OACF,CAAA;EAED;;EAEG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAvB,YAAA;UACE,KAA6C,IAAA,EAAA,GAAA,CAAW,EAAX,EAAA,GAAA,IAAI,CAAC,MAAM,EAAX,EAAA,GAAA,EAAA,CAAA,MAAW,EAAX,EAAA,EAAW,EAAE;cAA/C,IAAA,EAAA,GAAA,EAAA,CAAA,EAAA,CAA8B,EAA5B,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,CAAA;cACrC,IAAI,IAAI,CAAC,iBAAiB,EAAE;kBAC1B,SAAS;EACV,aAAA;EACD,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;EACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;EAChD,SAAA;OACF,CAAA;EAEO,IAAA,oBAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,WAA4C,EAAE,MAAuC,EAAA;EAC3G,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;cACpC,OAAO;EACR,SAAA;EACD,QAAA,IAAM,KAAK,GAAG,IAAI,aAAa,CAC7B,MAAM,GAAG,UAAU,GAAG,OAAO,EAC7B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,WAAW,IAAI,IAAI,EACnB,MAAM,CAAC,CAAC;EACV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;cACnD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;EAC/B,SAAA;OACF,CAAA;MAnba,oBAAM,CAAA,MAAA,GAAG,CAAC,SAAS,EAAE,sBAAsB,EAAE,6BAA6B,CAAC,CAAC;MAob5F,OAAC,oBAAA,CAAA;EAAA,CArbD,EAqbC;;ECtcD;EASA;;EAEG;EACH,IAAA,2BAAA,kBAAA,YAAA;EACE,IAAA,SAAA,2BAAA,CAAoB,SAAoB,EAAA;UAApB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;OAAK;MAItC,2BAAI,CAAA,SAAA,CAAA,IAAA,GAAX,UAAY,OAAY,EAAE,MAAW,EAAE,iBAA8C,EAAE,KAAW,EAAA;UAAlG,IA2EC,KAAA,GAAA,IAAA,CAAA;;UAzEC,IAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;EAGpD,QAAA,IAAI,UAAgC,CAAC;UACrC,IAAI,iBAAiB,YAAY,oBAAoB,EAAE;cACrD,UAAU,GAAG,iBAAiB,CAAC;EAChC,SAAA;EAAM,aAAA;EACL,YAAA,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAACC,mCAAQ,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;cACrE,KAAK,GAAG,iBAAiB,CAAC;EAC3B,SAAA;UACD,IAAI,UAAU,KAAK,IAAI,EAAE;EACvB,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;EACpE,SAAA;UAED,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;EACnD,QAAA,OAAO,CAAC,oBAAoB,GAAG,UAAU,CAAC;UAC1C,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;EACpD,QAAA,IAAM,KAAK,GACT,CAAC,OAAO,GAAGT,uBAAe,CAAC,IAAI,MAAMA,uBAAe,CAAC,IAAI,GAAG,MAAM;EAChE,cAAE,CAAC,OAAO,GAAGA,uBAAe,CAAC,QAAQ,MAAMA,uBAAe,CAAC,QAAQ,GAAG,UAAU;oBAC5E,IAAI,CAAC;EACb,QAAA,IAAM,gBAAgB,GAAG,CAAC,OAAO,GAAGA,uBAAe,CAAC,MAAM,MAAMA,uBAAe,CAAC,MAAM,CAAC;EACvF,QAAA,OAAO,CAAC,OAAO,GAAG,CAAC,gBAAgB,CAAC;;;;;UAKpC,OAAO,CAAC,aAAa,GAAG,gBAAgB,IAAI,KAAK,KAAK,IAAI,CAAC;EAC3D,QAAA,IAAI,gBAAgB,EAAE;EACpB,YAAA,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;;;EAG/C,YAAA,OAAO,CAAC,YAAY,GAAG,UAAU,KAAU,EAAA;EACzC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;EAC5B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;kBACpB,IAAI,IAAI,CAAC,aAAa,EAAE;EACtB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;EACjD,iBAAA;EACH,aAAC,CAAC;EACH,SAAA;UAED,IAAI,KAAK,KAAK,IAAI,EAAE;cAClB,OAAO,CAAC,gBAAgB,GAAG,YAAA;EACzB,gBAAA,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAA;sBAC5B,IAAI,OAAO,CAAC,OAAO,EAAE;EACnB,wBAAA,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;EACpC,wBAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;EAC9B,qBAAA;EACH,iBAAC,CAAC,CAAC;EACL,aAAC,CAAC;EACF,YAAA,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;EACvC,YAAA,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;cAChC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;EACzD,YAAA,IAAI,gBAAgB,EAAE;;EAEZ,gBAAA,IAAA,cAAY,GAAK,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAE,aAA7E,CAA8E;kBAClG,OAAO,CAAC,sBAAsB,GAAG,UAAU,CAAC,SAAS,CAAC,UAAC,KAAK,EAAA;sBAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;0BACvD,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,YAAY,KAAK,cAAY,CAAA,EAAA,CAAC,GAAG,CAAC,CAAC,CAAC;EAC7F,qBAAA;EACH,iBAAC,CAAC,CAAC;EACJ,aAAA;EACF,SAAA;EAED,QAAA,IAAI,OAAO,KAAKA,uBAAe,CAAC,MAAM,EAAE;EACtC,YAAA,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;;;EAGpD,YAAA,OAAO,CAAC,YAAY,GAAG,UAAU,KAAU,EAAA;EACzC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;EACjC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;EAC/C,aAAC,CAAC;EACH,SAAA;OACF,CAAA;MAEM,2BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,OAAY,EAAA;;UAExB,IAAI,OAAO,CAAC,eAAe,EAAE;EAC3B,YAAA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;EAC/C,YAAA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;EAChC,SAAA;UACD,IAAI,OAAO,CAAC,oBAAoB,EAAE;EAChC,YAAA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;EACpD,YAAA,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;EACrC,SAAA;UACD,IAAI,OAAO,CAAC,gBAAgB,EAAE;EAC5B,YAAA,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;EACrG,YAAA,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;EAChC,YAAA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;EAC/B,SAAA;UACD,IAAI,OAAO,CAAC,sBAAsB,EAAE;EAClC,YAAA,OAAO,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;EACzC,YAAA,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;EACvC,SAAA;EACD,QAAA,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;EACxD,QAAA,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;EACpC,QAAA,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;EACvB,QAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;OAC9B,CAAA;MACH,OAAC,2BAAA,CAAA;EAAD,CAAC,EAAA,CAAA;;EChHD;;;;EAIG;AAEH,MAAA,uBAAA,kBAAA,UAAA,MAAA,EAAA;MAA6C,SAA2B,CAAA,uBAAA,EAAA,MAAA,CAAA,CAAA;EAAxE,IAAA,SAAA,uBAAA,GAAA;;OAMC;MAHQ,uBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,UAAgC,EAAA;UACxD,OAAO,UAAU,CAAC,eAAe,CAAC;OACnC,CAAA;EAJa,IAAA,uBAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,uBAAuB,GAAA,UAAA,CAAA;UADnCC,8BAAe,CAAC,UAAU,CAAC;EACf,KAAA,EAAA,uBAAuB,CAMnC,CAAA;MAAD,OAAC,uBAAA,CAAA;GAAA,CAN4C,2BAA2B,CAMvE,EAAA;EAED;;;;EAIG;AAEH,MAAA,+BAAA,kBAAA,UAAA,MAAA,EAAA;MAAqD,SAA2B,CAAA,+BAAA,EAAA,MAAA,CAAA,CAAA;EAAhF,IAAA,SAAA,+BAAA,GAAA;;OAMC;EAHQ,IAAA,+BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,MAAM,CAAC;OAC/B,CAAA;EAJa,IAAA,+BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,+BAA+B,GAAA,UAAA,CAAA;UAD3CC,8BAAe,CAAC,kBAAkB,CAAC;EACvB,KAAA,EAAA,+BAA+B,CAM3C,CAAA;MAAD,OAAC,+BAAA,CAAA;GAAA,CANoD,2BAA2B,CAM/E,EAAA;EAED;;;EAGG;AAEH,MAAA,6BAAA,kBAAA,UAAA,MAAA,EAAA;MAAmD,SAA2B,CAAA,6BAAA,EAAA,MAAA,CAAA,CAAA;EAA9E,IAAA,SAAA,6BAAA,GAAA;;OAMC;EAHQ,IAAA,6BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,IAAI,CAAC;OAC7B,CAAA;EAJa,IAAA,6BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,6BAA6B,GAAA,UAAA,CAAA;UADzCC,8BAAe,CAAC,gBAAgB,CAAC;EACrB,KAAA,EAAA,6BAA6B,CAMzC,CAAA;MAAD,OAAC,6BAAA,CAAA;GAAA,CANkD,2BAA2B,CAM7E,EAAA;EAED;;;;EAIG;AAEH,MAAA,+BAAA,kBAAA,UAAA,MAAA,EAAA;MAAqD,SAA2B,CAAA,+BAAA,EAAA,MAAA,CAAA,CAAA;EAAhF,IAAA,SAAA,+BAAA,GAAA;;OAMC;EAHQ,IAAA,+BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,MAAM,CAAC;OAC/B,CAAA;EAJa,IAAA,+BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,+BAA+B,GAAA,UAAA,CAAA;UAD3CC,8BAAe,CAAC,kBAAkB,CAAC;EACvB,KAAA,EAAA,+BAA+B,CAM3C,CAAA;MAAD,OAAC,+BAAA,CAAA;GAAA,CANoD,2BAA2B,CAM/E,EAAA;EAED;;;;EAIG;AAEH,MAAA,qCAAA,kBAAA,UAAA,MAAA,EAAA;MAA2D,SAA2B,CAAA,qCAAA,EAAA,MAAA,CAAA,CAAA;EAAtF,IAAA,SAAA,qCAAA,GAAA;;OAMC;EAHQ,IAAA,qCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,YAAY,CAAC;OACrC,CAAA;EAJa,IAAA,qCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,qCAAqC,GAAA,UAAA,CAAA;UADjDC,8BAAe,CAAC,wBAAwB,CAAC;EAC7B,KAAA,EAAA,qCAAqC,CAMjD,CAAA;MAAD,OAAC,qCAAA,CAAA;GAAA,CAN0D,2BAA2B,CAMrF,EAAA;AAGD,MAAA,iCAAA,kBAAA,UAAA,MAAA,EAAA;MAAuD,SAA2B,CAAA,iCAAA,EAAA,MAAA,CAAA,CAAA;EAAlF,IAAA,SAAA,iCAAA,GAAA;;OAMC;EAHQ,IAAA,iCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,QAAQ,CAAC;OACjC,CAAA;EAJa,IAAA,iCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,iCAAiC,GAAA,UAAA,CAAA;UAD7CC,8BAAe,CAAC,oBAAoB,CAAC;EACzB,KAAA,EAAA,iCAAiC,CAM7C,CAAA;MAAD,OAAC,iCAAA,CAAA;GAAA,CANsD,2BAA2B,CAMjF,EAAA;AAGD,MAAA,yCAAA,kBAAA,UAAA,MAAA,EAAA;MAA+D,SAA2B,CAAA,yCAAA,EAAA,MAAA,CAAA,CAAA;EAA1F,IAAA,SAAA,yCAAA,GAAA;;OAMC;EAHQ,IAAA,yCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;UACE,OAAOX,uBAAe,CAAC,gBAAgB,CAAC;OACzC,CAAA;EAJa,IAAA,yCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;MADxB,yCAAyC,GAAA,UAAA,CAAA;UADrDC,8BAAe,CAAC,4BAA4B,CAAC;EACjC,KAAA,EAAA,yCAAyC,CAMrD,CAAA;MAAD,OAAC,yCAAA,CAAA;GAAA,CAN8D,2BAA2B,CAMzF;;ECrFD;;EAEG;AACH,MAAA,2BAAA,kBAAA,YAAA;EAKE,IAAA,SAAA,2BAAA,CAAoB,SAAoB,EAAA;UAApB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;OAAK;MAJ/B,2BAAG,CAAA,GAAA,GAAjB,UAAkB,SAAoB,EAAA;EACpC,QAAA,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;OACnD,CAAA;EAID;;EAEG;MACI,2BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,SAAqB,EAAA;UACjC,IAAI,CAAC,SAAS,EAAE;cACd,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;EACxD,SAAA;UACD,IAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAA2B,CAAC;UAC5F,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAkC,CAAC;UAClG,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;OACpE,CAAA;EAED;;;EAGG;MACI,2BAAqB,CAAA,SAAA,CAAA,qBAAA,GAA5B,UAA6B,SAAqB,EAAA;UAChD,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;UAC1C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;EAClE,QAAA,OAAO,UAAU,CAAC;OACnB,CAAA;MACH,OAAC,2BAAA,CAAA;EAAD,CAAC,EAAA,EAAA;EAEA,2BAAmC,CAAC,2BAA2B,CAAC,GAAG,IAAI;;ACzBxE,MAAA,+BAAA,kBAAA,YAAA;MAcE,SAAoB,+BAAA,CAAA,eAAwB,EAAU,kBAA8C,EAAA;UAAhF,IAAe,CAAA,eAAA,GAAf,eAAe,CAAS;UAAU,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAA4B;UAP7F,IAAU,CAAA,UAAA,GAAgC,IAAI,CAAC;UAG/C,IAAM,CAAA,MAAA,GAAoB,EAAE,CAAC;UAE5B,IAAc,CAAA,cAAA,GAAoB,EAAE,CAAC;OAG5C;EAba,IAAA,+BAAA,CAAA,MAAM,GAApB,YAAA;EACE,QAAA,OAAO,CAACV,cAAG,CAAC,OAAO,EAAEW,+BAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;OACrD,CAAA;EAaM,IAAA,+BAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;UACE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA;EAC5B,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;EACjC,gBAAA,OAAO,CAAC,CAAC;EACV,aAAA;;cAED,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;EACzE,SAAC,CAAC,CAAC;OACJ,CAAA;MAEM,+BAAmB,CAAA,SAAA,CAAA,mBAAA,GAA1B,UAA2B,QAAmB,EAAA;UAA9C,IAEC,KAAA,GAAA,IAAA,CAAA;EADC,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAhC,EAAgC,CAAC,CAAC;OAC/D,CAAA;MAEM,+BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,WAA8B,EAAA;kCAC7B,MAAM,EAAA;EACjB,YAAA,IAAM,KAAK,GAAG,MAAA,CAAK,cAAc,CAAC,SAAS,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,KAAK,MAAM,CAAlB,EAAkB,CAAC,CAAC;EACrE,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;kBAChB,MAAK,CAAA,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;EACtC,aAAA;;;UAJH,KAAyB,IAAA,EAAA,GAAA,CAAoB,EAApB,EAAA,GAAA,WAAW,CAAC,QAAQ,EAApB,EAAoB,GAAA,EAAA,CAAA,MAAA,EAApB,EAAoB,EAAA,EAAA;EAAhC,YAAA,IAAA,MAAM,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA;sBAAN,MAAM,CAAA,CAAA;EAKlB,SAAA;UAED,KAAmC,IAAA,EAAA,GAAA,CAAkB,EAAlB,EAAA,GAAA,WAAW,CAAC,MAAM,EAAlB,EAAA,GAAA,EAAA,CAAA,MAAkB,EAAlB,EAAA,EAAkB,EAAE;EAA5C,YAAA,IAAA,WAAoB,EAAlB,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA,CAAA;cAC3B,IAAI,MAAM,CAAC,KAAK,EAAE;kBAChB,SAAS;EACV,aAAA;cACD,IAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;cACnD,IAAI,OAAO,CAAC,MAAM,EAAE;EAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC,CAAC;EACtD,aAAA;EACF,SAAA;UAED,IAAI,CAAC,IAAI,EAAE,CAAC;EACZ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;OACnC,CAAA;EAEM,IAAA,+BAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;EACE,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;EACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;EAC7C,SAAA;;EAED,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;OACnC,CAAA;EAEM,IAAA,+BAAA,CAAA,SAAA,CAAA,MAAM,GAAb,YAAA;UACE,IAAI,IAAI,CAAC,UAAU,EAAE;EACnB,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;EACtC,SAAA;OACF,CAAA;EA1DD,IAAA,UAAA,CAAA;UADCC,0BAAQ,CAAC,EAAE,kBAAkB,EAAEC,0BAAW,CAAC,MAAM,EAAE,CAAC;EACC,KAAA,EAAA,+BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;EAGtD,IAAA,UAAA,CAAA;EADC,QAAAD,0BAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAEC,0BAAW,CAAC,MAAM,EAAE,CAAC;EACxC,KAAA,EAAA,+BAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;MAVzB,+BAA+B,GAAA,UAAA,CAAA;UAD3CC,iCAAe,CAAC,mBAAmB,CAAC;EACxB,KAAA,EAAA,+BAA+B,CAkE3C,CAAA;MAAD,OAAC,+BAAA,CAAA;EAAA,CAlED,EAkEC;;AC3ED,MAAA,iCAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,iCAAA,GAAA;OAsBC;MAfQ,iCAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,IAAS,EAAA;EACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;OACjC,CAAA;EAEM,IAAA,iCAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;UACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;EAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;UAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;OAC5C,CAAA;EAEM,IAAA,iCAAA,CAAA,SAAA,CAAA,MAAM,GAAb,YAAA;UACE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;EAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAW,CAAC;EAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAW,CAAC;OAC7B,CAAA;MArBU,iCAAiC,GAAA,UAAA,CAAA;UAD7CA,iCAAe,CAAC,qBAAqB,CAAC;EAC1B,KAAA,EAAA,iCAAiC,CAsB7C,CAAA;MAAD,OAAC,iCAAA,CAAA;EAAA,CAtBD,EAsBC;;ECpBD;;EAEG;AACH,MAAA,oBAAA,kBAAA,YAAA;MAGE,SACE,oBAAA,CAAA,QAAsB,EACtB,SAA0E,EAC1E,MAAmB,EACX,YAAmC,EACnC,WAAyC,EACzC,OAAgB,EAAA;EAHxB,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAmB,GAAA,EAAA,CAAA,EAAA;UACX,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;UACnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAA8B;UACzC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;UAExB,IAAI,CAAC,IAAI,GAAG;EACV,YAAA,QAAQ,EAAA,QAAA;EACR,YAAA,SAAS,EAAA,SAAA;EACT,YAAA,MAAM,EAAA,MAAA;EACN,YAAA,IAAI,EAAE,IAAI;EACV,YAAA,UAAU,EAAE,SAAS;EACrB,YAAA,OAAO,EAAE,IAAI;cACb,QAAQ,EAAE,WAAW,CAAC,QAAQ;WAC/B,CAAC;UACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OACvC;EAED;;;;EAIG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;EACE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;EAC5B,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;EAEG;MACI,oBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,GAAW,EAAA;EAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;EAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;EACzB,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;EAEG;MACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,OAAe,EAAA;EAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;EAChC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;EACxD,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;;;EAIG;MACI,oBAAI,CAAA,SAAA,CAAA,IAAA,GAAX,UAAY,SAAuC,EAAA;EACjD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;EAC3B,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;;EAGG;MACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,GAAW,EAAA;EACpB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;EACpB,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;;EAID;;;EAGG;MACI,oBAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAuB,OAA+C,EAAA;UACpE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAU,OAAO,CAAC,CAAC;OACnD,CAAA;EAED;;EAEG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,YAAY,GAAnB,YAAA;EACE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;OACzC,CAAA;EAKD,IAAA,MAAA,CAAA,cAAA,CAAW,oBAAK,CAAA,SAAA,EAAA,OAAA,EAAA;EAHhB;;EAEG;EACH,QAAA,GAAA,EAAA,YAAA;EACE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;WAChC;;;EAAA,KAAA,CAAA,CAAA;EAED;;;EAGG;MACI,oBAAE,CAAA,SAAA,CAAA,EAAA,GAAT,UAAU,MAAW,EAAA;UACnB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;OACrC,CAAA;;EAID;;;;;EAKG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,SAAyE,EAAE,MAAe,EAAA;UACzG,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;OACtD,CAAA;EAED;;;;EAIG;MACI,oBAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,IAAY,EAAA;;UAAE,IAAc,IAAA,GAAA,EAAA,CAAA;eAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;cAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;EAC/C,QAAA,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,EAAC,aAAa,CAAC,KAAA,CAAA,EAAA,EAAA,aAAA,CAAA,CAAA,IAAI,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;OACtD,CAAA;EAED;;;EAGG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;EACE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;OACpC,CAAA;EAED;;;;EAIG;MACI,oBAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,KAAa,EAAA;UAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;OACxC,CAAA;EAED;;;EAGG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,YAAA;EACE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;OACjC,CAAA;EAED;;;EAGG;MACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;UAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;OAC3C,CAAA;EAED;;;EAGG;MACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;UAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;OAC3C,CAAA;EAED;;;EAGG;MACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;UAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;OACzC,CAAA;EAED;;;EAGG;MACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;UAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;OACzC,CAAA;EAED;;;;EAIG;MACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,KAAa,EAAA;UACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;OACpC,CAAA;EAED;;;;EAIG;MACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,KAAa,EAAA;UACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;OACpC,CAAA;EAED;;;;EAIG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,UAAa,GAAW,EAAE,GAAW,EAAA;UACnC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;OACzC,CAAA;EAED;;;;EAIG;EACI,IAAA,oBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,UAAe,GAAW,EAAE,GAAW,EAAA;UACrC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;OAC3C,CAAA;EAED;;;EAGG;MACI,oBAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,aAAqB,EAAA;UACjC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;OAC/C,CAAA;MACH,OAAC,oBAAA,CAAA;EAAD,CAAC,EAAA,EAAA;EAED;;EAEG;AACH,MAAA,WAAA,kBAAA,YAAA;EAeE,IAAA,SAAA,WAAA,CACU,YAAmC,EACnC,OAAgB,EAChB,QAAsB,EAAA;UAFtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;UACnC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;UAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;EAVhC;;;;EAIG;UACI,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;OAMf;EAEL;;EAEG;MACI,WAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,IAAmD,EAAA;EACpE,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;EACjC,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;;;;EAKG;EACI,IAAA,WAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,SAA0E,EAAE,MAAe,EAAA;UAC1G,OAAO,IAAI,oBAAoB,CAC7B,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;OAC5E,CAAA;EAED;;;;EAIG;MACI,WAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,IAAY,EAAA;UAAjC,IAaC,KAAA,GAAA,IAAA,CAAA;UAbkC,IAAc,IAAA,GAAA,EAAA,CAAA;eAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;cAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;UAC/C,IAAI,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;UACzC,IAAI,CAAC,IAAI,EAAE;;EAET,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI,CAAC,CAAC;cAC3B,IAAI,IAAI,YAAY,QAAQ,EAAE;kBAC5B,OAAO,IAAI,CAAC,IAAI,CAAA,KAAA,CAAT,IAAI,EAAM,aAAA,CAAA,CAAA,IAAI,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;EACjC,aAAA;EACD,YAAA,MAAM,IAAI,KAAK,CAAC,2BAAmB,IAAI,EAAA,oBAAA,CAAmB,CAAC,CAAC;EAC7D,SAAA;EACD,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA,KAAA,CAAjB,IAAI,EAAiB,IAAI,IAAI,SAAS,CAAC;EAC1E,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAK,EAAE,GAAG,EAAA;;EAAK,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,EAAC,IAAI,CAAA,KAAA,CAAA,EAAA,EAAA,aAAA,CAAA,CAAC,KAAI,EAAE,KAAK,EAAE,GAAG,GAAK,IAAI,EAAA,KAAA,CAAA,CAAA,CAAA;WAAC,EAAE,MAAM,CAAC;eAC1F,cAAc,CAAC,IAAI,CAAC,CAAC;OACzB,CAAA;EAED;;;EAGG;EACI,IAAA,WAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;EACE,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAA;cACH,OAAA,KAAK,KAAK,IAAI;EACX,mBAAA,KAAK,KAAK,SAAS;EACnB,mBAAA,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC,CAAA;EAFjD,SAEiD,CACpD,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;OAC9B,CAAA;EAED;;;;EAIG;MACI,WAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,KAAa,EAAA;EAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAI,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAK,KAAa,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAY,CAAC,CAAA,EAAA,CAAC;eACzG,cAAc,CAAC,SAAS,CAAC,CAAC;OAC9B,CAAA;EAED;;;EAGG;EACI,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,YAAA;;;EAGE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,uIAAuI,CAAC;;eAEzJ,cAAc,CAAC,OAAO,CAAC,CAAC;OAC5B,CAAA;EAED;;;EAGG;MACI,WAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;EAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA,EAAA,EACrG,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;eACV,cAAc,CAAC,WAAW,CAAC,CAAC;OAChC,CAAA;EAED;;;EAGG;MACI,WAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;EAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA,EAAA,EACrG,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;eACV,cAAc,CAAC,WAAW,CAAC,CAAC;OAChC,CAAA;EAED;;;EAGG;MACI,WAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;EAC3B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAK,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAA,EAAA,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;eAC7G,cAAc,CAAC,UAAU,CAAC,CAAC;OAC/B,CAAA;EAED;;;EAGG;MACI,WAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;EAC3B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAK,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAA,EAAA,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;eAC7G,cAAc,CAAC,UAAU,CAAC,CAAC;OAC/B,CAAA;EAED;;;;EAIG;MACI,WAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,UAAkB,EAAA;UAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,UAAU,CAAA,EAAA,EAAE,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;eAChH,cAAc,CAAC,KAAK,CAAC,CAAC;OAC1B,CAAA;EAED;;;;EAIG;MACI,WAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,UAAkB,EAAA;UAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,UAAU,CAAA,EAAA,EAAE,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;eAChH,cAAc,CAAC,KAAK,CAAC,CAAC;OAC1B,CAAA;EAED;;;;EAIG;EACI,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,UAAa,GAAW,EAAE,GAAW,EAAA;EACnC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,CAAvE,EAAuE,EAC3G,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC;eACZ,cAAc,CAAC,OAAO,CAAC,CAAC;OAC5B,CAAA;EAED;;;;EAIG;EACI,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAd,UAAe,GAAW,EAAE,GAAW,EAAA;EACrC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAArE,EAAqE,EACzG,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC;eACZ,cAAc,CAAC,SAAS,CAAC,CAAC;OAC9B,CAAA;EAED;;;EAGG;MACI,WAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,aAAqB,EAAA;EACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAI,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAY,KAAK,EAAE,IAAI,KAAK,KAAK,aAAa,CAAvF,EAAuF,EAChG,EAAE,aAAa,EAAA,aAAA,EAAE,CAAC;eACjB,cAAc,CAAC,QAAQ,CAAC,CAAC;OAC7B,CAAA;MA1La,WAAW,CAAA,WAAA,GAKrB,EAAE,CAAC;MAsLT,OAAC,WAAA,CAAA;EAAA,CA5LD,EA4LC,EAAA;EAED;;EAEG;AACH,MAAA,YAAA,kBAAA,YAAA;EAME,IAAA,SAAA,YAAA,CAAoB,OAAgB,EAAA;UAAhB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;EALpC;;EAEG;UACI,IAAK,CAAA,KAAA,GAA2B,EAAE,CAAC;OAED;EAEzC;;;;EAIG;MACI,YAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAsB,QAA6D,EAAA;UACjF,IAAI,CAAC,iBAAiB,EAAE,CAAC;EACzB,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;UACnD,IAAM,WAAW,GAAG,IAAI,WAAW,CACjC,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,EAAE,IAAI,MAAA,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;UAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;OAC3C,CAAA;EAED;;EAEG;EACI,IAAA,YAAA,CAAA,SAAA,CAAA,YAAY,GAAnB,YAAA;UACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;UACzB,IAAM,WAAW,GAAG,IAAI,WAAW,CACjC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;UACzD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;OAC3C,CAAA;EAED;;;EAGG;MACI,YAAE,CAAA,SAAA,CAAA,EAAA,GAAT,UAAU,MAAW,EAAA;UACnB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;EAC9B,QAAA,OAAO,IAAI,CAAC;OACb,CAAA;EAED;;;EAGG;MACI,YAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,IAAwB,EAAA;UACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;EAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;EACrB,SAAA;EACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;OACtC,CAAA;EAEO,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;UACE,IAAI,IAAI,CAAC,OAAO,EAAE;cAChB,OAAO;EACR,SAAA;EACD,QAAA,MAAM,IAAI,KAAK,CAAC,0EAAwE,CAAC,CAAC;OAC3F,CAAA;EAEO,IAAA,YAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,WAAsC,EAAE,YAAoC,EAAA;;EAE7F,QAAA,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAlD,EAAkD,CAAC,CAAC;EAC/F,QAAA,IAAI,aAAa,EAAE;cACjB,IAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;EACrD,YAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;EACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE;kBACtC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;EAClE,aAAA;EACF,SAAA;EACD,QAAA,OAAO,WAAW,CAAC;OACpB,CAAA;MACH,OAAC,YAAA,CAAA;EAAD,CAAC,EAAA,EAAA;EAED;;EAEG;AACH,MAAA,eAAA,kBAAA,YAAA;EAAA,IAAA,SAAA,eAAA,GAAA;OAmEC;EAhEe,IAAA,eAAA,CAAA,UAAU,GAAxB,UAAyB,aAAsC,EAAE,cAAsC,EAAA;UACrG,IAAI,CAAC,OAAO,GAAG;EACb,YAAA,OAAO,EAAE,aAAa;EACtB,YAAA,QAAQ,EAAE,cAAc;WACzB,CAAC;OACH,CAAA;EAED;;;EAGG;MACW,eAAM,CAAA,MAAA,GAApB,UAAsC,QAA6D,EAAA;EACjG,QAAA,OAAO,IAAI,YAAY,CAAU,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;OAC5E,CAAA;EAED;;EAEG;EACW,IAAA,eAAA,CAAA,YAAY,GAA1B,YAAA;UACE,OAAO,IAAI,YAAY,CAAU,eAAe,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;OAC1E,CAAA;EAED;;;;;;;EAOG;MACW,eAAU,CAAA,UAAA,GAAxB,UACE,IAAY,EACZ,SAAmF,EACnF,OAAe,EACf,YAAsC,EAAA;EAEtC,QAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;EACnC,QAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAA,SAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC;OAC7D,CAAA;EAED;;;;EAIG;EACW,IAAA,eAAA,CAAA,WAAW,GAAzB,UAA0B,KAAyB,EAAE,GAAW,EAAA;UAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,GAAG,KAAK,GAAG,CAAb,EAAa,CAAC,CAAA,EAAA,CAAC,CAAC;OACrD,CAAA;EAED;;;EAGG;MACW,eAAa,CAAA,aAAA,GAA3B,UAA4B,KAAyB,EAAA;UACnD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,GAAG,KAAK,SAAS,CAAnB,EAAmB,CAAC,CAAA,EAAA,CAAC,CAAC;OAC3D,CAAA;EAED;;;EAGG;MACW,eAAG,CAAA,GAAA,GAAjB,UAAkB,MAAW,EAAA;EAC3B,QAAA,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;OACrB,CAAA;MACH,OAAC,eAAA,CAAA;EAAD,CAAC,EAAA;;EC/jBD;EA6CA;;EAEG;WACa,SAAS;EACvB;EACA,eAAyF,EACzF,QAA0D,EAAA;;;MAI1D,IAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;MAC7E,IAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;EAC7E,IAAA,eAAe,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;;EAG1D,IAAA,IAAM,MAAM,GAAG,IAAI,6BAA6B,EAAE,CAAC;MACnD,IAAI,QAAQ,YAAY,QAAQ,EAAE;UAChC,QAAQ,CAAC,MAAM,CAAC,CAAC;EAClB,KAAA;EACD,IAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;;MAGxC,IAAI,eAAe,CAAC,eAAe,EAAE;UACnC,eAAe,CAAC,eAAe,CAC7B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,iCAAiC,EACjC,+BAA+B,EAC/B,qCAAqC,EACrC,yCAAyC,EACzC,+BAA+B,EAC/B,iCAAiC,CAAC,CAAC;EACtC,KAAA;EACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/aurelia-validation.d.ts b/dist/aurelia-validation.d.ts index a8cd039e..40575e5d 100644 --- a/dist/aurelia-validation.d.ts +++ b/dist/aurelia-validation.d.ts @@ -1,3 +1,5 @@ +// Generated by dts-bundle-generator v7.2.0 + import { AccessKeyed, AccessMember, AccessScope, Binary, Binding, BindingBehavior, CallMember, Conditional, Expression, LiteralPrimitive, LiteralString, Parser, Scope, ValueConverter } from 'aurelia-binding'; import { Container, Lazy } from 'aurelia-dependency-injection'; import { DOM } from 'aurelia-pal'; @@ -86,7 +88,7 @@ export declare enum validateTrigger { */ changeOrFocusout = 6 } -export declare type ValidatorCtor = new (...args: any[]) => Validator; +export type ValidatorCtor = new (...args: any[]) => Validator; /** * Aurelia Validation Configuration API */ @@ -155,7 +157,7 @@ export declare function getPropertyInfo(expression: Expression, source: Scope): object: object; propertyName: string; } | null; -export declare type PropertyAccessor = (object: TObject) => TValue; +export type PropertyAccessor = (object: TObject) => TValue; export declare class PropertyAccessorParser { private parser; static inject: (typeof Parser)[]; @@ -183,7 +185,7 @@ export interface RenderInstruction { /** * The "kind" of render instruction. Either 'validate' or 'reset'. */ - kind: 'validate' | 'reset'; + kind: "validate" | "reset"; /** * The results to render. */ @@ -208,7 +210,7 @@ export declare class ValidateEvent { /** * The type of validate event. Either "validate" or "reset". */ - readonly type: 'validate' | 'reset'; + readonly type: "validate" | "reset"; /** * The controller's current array of errors. For an array containing both * failed rules and passed rules, use the "results" property. @@ -237,7 +239,7 @@ export declare class ValidateEvent { /** * The type of validate event. Either "validate" or "reset". */ - type: 'validate' | 'reset', + type: "validate" | "reset", /** * The controller's current array of errors. For an array containing both * failed rules and passed rules, use the "results" property. @@ -385,6 +387,26 @@ export declare class ValidationController { revalidateErrors(): void; private invokeCallbacks; } +/** + * Information related to an "& validate" decorated binding. + */ +export interface BindingInfo { + /** + * The DOM element associated with the binding. + */ + target: Element; + /** + * The rules associated with the binding via the validate binding behavior's rules parameter. + */ + rules?: any; + /** + * The object and property associated with the binding. + */ + propertyInfo: { + object: any; + propertyName: string; + } | null; +} declare abstract class ValidateBindingBehaviorBase { private taskQueue; constructor(taskQueue: TaskQueue); @@ -468,7 +490,10 @@ export interface RenderedError { export declare class ValidationErrorsCustomAttribute implements ValidationRenderer { private boundaryElement; private controllerAccessor; - static inject(): [typeof DOM.Element, Lazy]; + static inject(): [ + typeof DOM.Element, + Lazy + ]; controller: ValidationController | null; errors: RenderedError[]; private errorsInternal; @@ -488,7 +513,7 @@ export declare class ValidationRendererCustomAttribute { bind(): void; unbind(): void; } -export declare type ValidationDisplayNameAccessor = () => string; +export type ValidationDisplayNameAccessor = () => string; /** * Information related to a property that is the subject of validation. */ @@ -949,4 +974,6 @@ export interface Parsers { export declare function configure(frameworkConfig: { container: Container; globalResources?: (...resources: any[]) => any; -}, callback?: (config: GlobalValidationConfiguration) => void): void; \ No newline at end of file +}, callback?: (config: GlobalValidationConfiguration) => void): void; + +export {}; diff --git a/dist/commonjs/aurelia-validation.js b/dist/commonjs/aurelia-validation.js index bc16f02b..40b93a40 100644 --- a/dist/commonjs/aurelia-validation.js +++ b/dist/commonjs/aurelia-validation.js @@ -2,12 +2,32 @@ Object.defineProperty(exports, '__esModule', { value: true }); -var aureliaBinding = require('aurelia-binding'); var aureliaTemplating = require('aurelia-templating'); +var aureliaBinding = require('aurelia-binding'); var LogManager = require('aurelia-logging'); var aureliaPal = require('aurelia-pal'); -var aureliaDependencyInjection = require('aurelia-dependency-injection'); var aureliaTaskQueue = require('aurelia-task-queue'); +var aureliaDependencyInjection = require('aurelia-dependency-injection'); + +function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); +} + +var LogManager__namespace = /*#__PURE__*/_interopNamespace(LogManager); /** * Validates objects and properties. @@ -18,30 +38,32 @@ var Validator = /** @class */ (function () { return Validator; }()); -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 +/****************************************************************************** +Copyright (c) Microsoft Corporation. -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); @@ -54,12 +76,14 @@ function __decorate(decorators, target, key, desc) { return c > 3 && r && Object.defineProperty(target, key, r), r; } -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); } /** @@ -247,9 +271,9 @@ var MessageExpressionValidator = /** @class */ (function (_super) { throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - LogManager.getLogger('aurelia-validation') + LogManager__namespace.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length - .warn("Did you mean to use \"$" + access.name + "\" instead of \"" + access.name + "\" in this validation message template: \"" + this.originalMessage + "\"?"); + .warn("Did you mean to use \"$".concat(access.name, "\" instead of \"").concat(access.name, "\" in this validation message template: \"").concat(this.originalMessage, "\"?")); } }; return MessageExpressionValidator; @@ -444,6 +468,7 @@ var StandardValidator = /** @class */ (function (_super) { /** * Validation triggers. */ +exports.validateTrigger = void 0; (function (validateTrigger) { /** * Manual validation. Use the controller's `validate()` and `reset()` methods @@ -530,10 +555,10 @@ function getTargetDOMElement(binding, view) { if (element) { return element; } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } function getObject(expression, objectExpression, source) { @@ -542,7 +567,7 @@ function getObject(expression, objectExpression, source) { return value; } // tslint:disable-next-line:max-line-length - throw new Error("The '" + objectExpression + "' part of '" + expression + "' evaluates to " + value + " instead of an object, null or undefined."); + throw new Error("The '".concat(objectExpression, "' part of '").concat(expression, "' evaluates to ").concat(value, " instead of an object, null or undefined.")); } /** * Retrieves the object and property name for the specified expression. @@ -569,7 +594,7 @@ function getPropertyInfo(expression, source) { propertyName = expression.key.evaluate(source); } else { - throw new Error("Expression '" + originalExpression + "' is not compatible with the validate binding-behavior."); + throw new Error("Expression '".concat(originalExpression, "' is not compatible with the validate binding-behavior.")); } if (object === null || object === undefined) { return null; @@ -598,19 +623,19 @@ var PropertyAccessorParser = /** @class */ (function () { || accessor instanceof aureliaBinding.AccessMember && accessor.object instanceof aureliaBinding.AccessScope) { return accessor.name; } - throw new Error("Invalid property expression: \"" + accessor + "\""); + throw new Error("Invalid property expression: \"".concat(accessor, "\"")); }; PropertyAccessorParser.inject = [aureliaBinding.Parser]; return PropertyAccessorParser; }()); function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ var arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; var match = classic.exec(fn) || arrow.exec(fn); if (match === null) { - throw new Error("Unable to parse accessor function:\n" + fn); + throw new Error("Unable to parse accessor function:\n".concat(fn)); } return match[1]; } @@ -1122,6 +1147,7 @@ var ValidateBindingBehaviorBase = /** @class */ (function () { binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var propertyName_1 = getPropertyInfo(binding.sourceExpression, binding.source).propertyName; binding.validationSubscription = controller.subscribe(function (event) { if (!binding.validatedOnce && event.type === 'validate') { @@ -1502,7 +1528,7 @@ var FluentRuleCustomizer = /** @class */ (function () { get: function () { return this.fluentEnsure.rules; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -1533,7 +1559,7 @@ var FluentRuleCustomizer = /** @class */ (function () { for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } - return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args)); + return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArray([name], args, false)); }; /** * Applies the "required" rule to the property. @@ -1673,14 +1699,14 @@ var FluentRules = /** @class */ (function () { // standard rule? rule = this[name]; if (rule instanceof Function) { - return rule.call.apply(rule, __spreadArrays([this], args)); + return rule.call.apply(rule, __spreadArray([this], args, false)); } - throw new Error("Rule with name \"" + name + "\" does not exist."); + throw new Error("Rule with name \"".concat(name, "\" does not exist.")); } var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined; return this.satisfies(function (value, obj) { var _a; - return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args)); + return (_a = rule.condition).call.apply(_a, __spreadArray([_this, value, obj], args, false)); }, config) .withMessageKey(name); }; @@ -1948,33 +1974,34 @@ frameworkConfig, callback) { } } -exports.configure = configure; +exports.FluentEnsure = FluentEnsure; +exports.FluentRuleCustomizer = FluentRuleCustomizer; +exports.FluentRules = FluentRules; exports.GlobalValidationConfiguration = GlobalValidationConfiguration; -exports.getTargetDOMElement = getTargetDOMElement; -exports.getPropertyInfo = getPropertyInfo; +exports.MessageExpressionValidator = MessageExpressionValidator; exports.PropertyAccessorParser = PropertyAccessorParser; -exports.getAccessorExpression = getAccessorExpression; +exports.Rules = Rules; +exports.StandardValidator = StandardValidator; exports.ValidateBindingBehavior = ValidateBindingBehavior; +exports.ValidateEvent = ValidateEvent; exports.ValidateManuallyBindingBehavior = ValidateManuallyBindingBehavior; exports.ValidateOnBlurBindingBehavior = ValidateOnBlurBindingBehavior; exports.ValidateOnChangeBindingBehavior = ValidateOnChangeBindingBehavior; exports.ValidateOnChangeOrBlurBindingBehavior = ValidateOnChangeOrBlurBindingBehavior; -exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateOnChangeOrFocusoutBindingBehavior = ValidateOnChangeOrFocusoutBindingBehavior; -exports.ValidateEvent = ValidateEvent; +exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateResult = ValidateResult; exports.ValidationController = ValidationController; exports.ValidationControllerFactory = ValidationControllerFactory; exports.ValidationErrorsCustomAttribute = ValidationErrorsCustomAttribute; +exports.ValidationMessageParser = ValidationMessageParser; +exports.ValidationMessageProvider = ValidationMessageProvider; exports.ValidationRendererCustomAttribute = ValidationRendererCustomAttribute; +exports.ValidationRules = ValidationRules; exports.Validator = Validator; -exports.Rules = Rules; -exports.StandardValidator = StandardValidator; +exports.configure = configure; +exports.getAccessorExpression = getAccessorExpression; +exports.getPropertyInfo = getPropertyInfo; +exports.getTargetDOMElement = getTargetDOMElement; exports.validationMessages = validationMessages; -exports.ValidationMessageProvider = ValidationMessageProvider; -exports.ValidationMessageParser = ValidationMessageParser; -exports.MessageExpressionValidator = MessageExpressionValidator; -exports.FluentRuleCustomizer = FluentRuleCustomizer; -exports.FluentRules = FluentRules; -exports.FluentEnsure = FluentEnsure; -exports.ValidationRules = ValidationRules; +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/commonjs/aurelia-validation.js.map b/dist/commonjs/aurelia-validation.js.map new file mode 100644 index 00000000..ffce3f82 --- /dev/null +++ b/dist/commonjs/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":["LiteralString","LiteralPrimitive","Binary","Conditional","CallMember","BindingLanguage","LogManager","ViewResources","validateTrigger","DOM","BindingBehavior","ValueConverter","AccessScope","getContextFor","AccessMember","AccessKeyed","Parser","Optional","TaskQueue","bindingBehavior","Lazy","bindable","bindingMode","customAttribute"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA;;AAEG;AACH,IAAA,SAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,SAAA,GAAA;KAwBC;IAAD,OAAC,SAAA,CAAA;AAAD,CAAC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC7BD;;AAEG;AACH,IAAA,cAAA,kBAAA,YAAA;AAQE;;;;;AAKG;IACH,SACS,cAAA,CAAA,IAAS,EACT,MAAW,EACX,YAAoC,EACpC,KAAc,EACd,OAA6B,EAAA;AAA7B,QAAA,IAAA,OAAA,KAAA,KAAA,CAAA,EAAA,EAAA,OAA6B,GAAA,IAAA,CAAA,EAAA;QAJ7B,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAK;QACT,IAAM,CAAA,MAAA,GAAN,MAAM,CAAK;QACX,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAwB;QACpC,IAAK,CAAA,KAAA,GAAL,KAAK,CAAS;QACd,IAAO,CAAA,OAAA,GAAP,OAAO,CAAsB;AAEpC,QAAA,IAAI,CAAC,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,CAAC;KACnC;AAEM,IAAA,cAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC;KAC7C,CAAA;IAzBc,cAAM,CAAA,MAAA,GAAG,CAAC,CAAC;IA0B5B,OAAC,cAAA,CAAA;AAAA,CA3BD,EA2BC;;AC5BD;;AAEG;AACH,IAAA,KAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,KAAA,GAAA;KAmCC;AA7BC;;AAEG;AACW,IAAA,KAAA,CAAA,GAAG,GAAjB,UAAkB,MAAW,EAAE,KAAyB,EAAA;QACtD,IAAI,MAAM,YAAY,QAAQ,EAAE;AAC9B,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,SAAA;QACD,MAAM,CAAC,cAAc,CACnB,MAAM,EACN,KAAK,CAAC,GAAG,EACT,EAAE,UAAU,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;KAC7E,CAAA;AAED;;AAEG;IACW,KAAK,CAAA,KAAA,GAAnB,UAAoB,MAAW,EAAA;QAC7B,IAAI,MAAM,YAAY,QAAQ,EAAE;AAC9B,YAAA,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC;AAC3B,SAAA;AACD,QAAA,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;KAC1B,CAAA;AAED;;AAEG;IACW,KAAG,CAAA,GAAA,GAAjB,UAAkB,MAAW,EAAA;QAC3B,OAAO,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;KAClC,CAAA;AAjCD;;AAEG;IACY,KAAG,CAAA,GAAA,GAAG,WAAW,CAAC;IA+BnC,OAAC,KAAA,CAAA;AAAA,CAnCD,EAmCC;;AC1BD;AACA,IAAA,iBAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,iBAAA,GAAA;KAuFC;IAtFQ,iBAAU,CAAA,SAAA,CAAA,UAAA,GAAjB,UAAkB,KAAU,EAAA;AAC1B,QAAA,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;KACnC,CAAA;IAEM,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA3B,UAA4B,QAAyB,EAAA;AACnD,QAAA,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACjC,QAAA,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;KAC/B,CAAA;IAEM,iBAAmB,CAAA,SAAA,CAAA,mBAAA,GAA1B,UAA2B,SAAyB,EAAA;AAClD,QAAA,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAClC,QAAA,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;KAChC,CAAA;IAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAW,EAAA;AAC5B,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAA;IAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,WAAwB,EAAA;AAC9C,QAAA,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACnC,QAAA,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC7B,QAAA,WAAW,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC7B,CAAA;IAEM,iBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,MAAW,EAAA;AAChC,QAAA,MAAM,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;KACnC,CAAA;IAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;AACzC,QAAA,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;KAC3B,CAAA;IAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,MAAoB,EAAA;AAC3C,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC5B,CAAA;IAEM,iBAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;AACzC,QAAA,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC3B,QAAA,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACzB,CAAA;IAEM,iBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,IAAS,EAAA;AAC7B,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAA;IAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,IAAS,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACvB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAA;IAEM,iBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,IAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAA;IAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAW,EAAA;AAC5B,QAAA,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAChC,CAAA;IAEM,iBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAc,EAAA;AAC/B,QAAA,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACzB,QAAA,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KAC3B,CAAA;IAEM,iBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA5B,UAA6B,OAAyB,EAAA;AACpD,QAAA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;KAC/B,CAAA;IAEM,iBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,OAAY,EAAA;AACnC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;KAClC,CAAA;IAEM,iBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,OAAY,EAAA;AACpC,QAAA,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;KAChC,CAAA;IAEM,iBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,OAAsB,EAAA;AAC9C,QAAA,OAAO,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;KAC/B,CAAA;IAEO,iBAAS,CAAA,SAAA,CAAA,SAAA,GAAjB,UAAkB,IAAkB,EAAA;AAClC,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACpC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtB,SAAA;KACF,CAAA;IACH,OAAC,iBAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;ACzFD,IAAA,uBAAA,kBAAA,YAAA;AAQE,IAAA,SAAA,uBAAA,CAAoB,eAAgC,EAAA;QAAhC,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AAL5C,QAAA,IAAA,CAAA,qBAAqB,GAAG,IAAIA,4BAAa,CAAC,EAAE,CAAC,CAAC;AAC9C,QAAA,IAAA,CAAA,cAAc,GAAG,IAAIC,+BAAgB,CAAC,IAAI,CAAC,CAAC;AAC5C,QAAA,IAAA,CAAA,mBAAmB,GAAG,IAAIA,+BAAgB,CAAC,SAAS,CAAC,CAAC;QACtD,IAAK,CAAA,KAAA,GAAsC,EAAE,CAAC;KAEG;IAElD,uBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,OAAe,EAAA;QAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,SAAS,EAAE;AACrC,YAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,IAAM,KAAK,GAAoC,IAAI,CAAC,eAAuB,CAAC,kBAAkB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC9G,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,YAAA,OAAO,IAAID,4BAAa,CAAC,OAAO,CAAC,CAAC;AACnC,SAAA;QACD,IAAI,UAAU,GAAe,IAAIA,4BAAa,CAAC,KAAK,CAAC,CAAC,CAAW,CAAC,CAAC;AACnE,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;AACxC,YAAA,UAAU,GAAG,IAAIE,qBAAM,CACrB,GAAG,EACH,UAAU,EACV,IAAIA,qBAAM,CACR,GAAG,EACH,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAe,CAAC,EACrC,IAAIF,4BAAa,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAW,CAAC,CAC1C,CACF,CAAC;AACH,SAAA;AAED,QAAA,0BAA0B,CAAC,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAEzD,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,UAAU,CAAC;AAEjC,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;IAEO,uBAAQ,CAAA,SAAA,CAAA,QAAA,GAAhB,UAAiB,IAAgB,EAAA;;QAE/B,OAAO,IAAIG,0BAAW,CACpB,IAAID,qBAAM,CACR,IAAI,EACJ,IAAIA,qBAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,cAAc,CAAC,EAC5C,IAAIA,qBAAM,CAAC,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,mBAAmB,CAAC,CAClD,EACD,IAAI,CAAC,qBAAqB,EAC1B,IAAIE,yBAAU,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,CACrC,CAAC;KACH,CAAA;AAjDa,IAAA,uBAAA,CAAA,MAAM,GAAG,CAACC,iCAAe,CAAC,CAAC;IAkD3C,OAAC,uBAAA,CAAA;AAAA,CAnDD,EAmDC,EAAA;AAED,IAAA,0BAAA,kBAAA,UAAA,MAAA,EAAA;IAAgD,SAAiB,CAAA,0BAAA,EAAA,MAAA,CAAA,CAAA;AAM/D,IAAA,SAAA,0BAAA,CAAoB,eAAuB,EAAA;AAA3C,QAAA,IAAA,KAAA,GACE,iBAAO,IACR,IAAA,CAAA;QAFmB,KAAe,CAAA,eAAA,GAAf,eAAe,CAAQ;;KAE1C;AAPa,IAAA,0BAAA,CAAA,QAAQ,GAAtB,UAAuB,UAAsB,EAAE,eAAuB,EAAA;AACpE,QAAA,IAAM,OAAO,GAAG,IAAI,0BAA0B,CAAC,eAAe,CAAC,CAAC;AAChE,QAAA,UAAU,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAA;IAMM,0BAAgB,CAAA,SAAA,CAAA,gBAAA,GAAvB,UAAwB,MAAmB,EAAA;AACzC,QAAA,IAAI,MAAM,CAAC,QAAQ,KAAK,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,6DAA6D,CAAC,CAAC;AAChF,SAAA;QACD,IAAI,CAAC,aAAa,EAAE,cAAc,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,gBAAgB,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AAC9G,YAAAC,qBAAU,CAAC,SAAS,CAAC,oBAAoB,CAAC;;AAEvC,iBAAA,IAAI,CAAC,yBAAA,CAAA,MAAA,CAAyB,MAAM,CAAC,IAAI,EAAiB,kBAAA,CAAA,CAAA,MAAA,CAAA,MAAM,CAAC,IAAI,uDAA2C,IAAI,CAAC,eAAe,EAAA,KAAA,CAAI,CAAC,CAAC;AAC9I,SAAA;KACF,CAAA;IACH,OAAC,0BAAA,CAAA;AAAD,CApBA,CAAgD,iBAAiB,CAoBhE;;AC/ED;;AAEG;AACU,IAAA,kBAAkB,GAAuB;AACpD;;AAEG;AACH,IAAA,OAAO,EAAE,6BAA8B;AACvC,IAAA,QAAQ,EAAE,8BAA+B;AACzC,IAAA,OAAO,EAAE,6CAA8C;AACvD,IAAA,KAAK,EAAE,uCAAwC;AAC/C,IAAA,SAAS,EAAE,iGAAoG;AAC/G,IAAA,SAAS,EAAE,sGAAyG;AACpH,IAAA,QAAQ,EAAE,+FAAkG;AAC5G,IAAA,QAAQ,EAAE,kGAAqG;AAC/G,IAAA,GAAG,EAAE,yDAA2D;AAChE,IAAA,GAAG,EAAE,wDAA0D;AAC/D,IAAA,KAAK,EAAE,gFAAmF;AAC1F,IAAA,OAAO,EAAE,qFAAwF;AACjG,IAAA,MAAM,EAAE,mDAAqD;EAC7D;AAEF;;AAEG;AACH,IAAA,yBAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,yBAAA,CAAmB,MAA+B,EAAA;QAA/B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAyB;KAAK;AAEvD;;;AAGG;IACI,yBAAU,CAAA,SAAA,CAAA,UAAA,GAAjB,UAAkB,GAAW,EAAA;AAC3B,QAAA,IAAI,OAAe,CAAC;QACpB,IAAI,GAAG,IAAI,kBAAkB,EAAE;AAC7B,YAAA,OAAO,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAC;AACnC,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC;AACzC,SAAA;QACD,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KACnC,CAAA;AAED;;;;;AAKG;AACI,IAAA,yBAAA,CAAA,SAAA,CAAA,cAAc,GAArB,UAAsB,YAA6B,EAAE,WAA4C,EAAA;AAC/F,QAAA,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,KAAK,SAAS,EAAE;AACrD,YAAA,OAAO,CAAC,WAAW,YAAY,QAAQ,IAAI,WAAW,EAAE,GAAG,WAAqB,CAAC;AAClF,SAAA;;AAGD,QAAA,IAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;;AAEnE,QAAA,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;KACvD,CAAA;AAjCa,IAAA,yBAAA,CAAA,MAAM,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAkCnD,OAAC,yBAAA,CAAA;AAAA,CAnCD,EAmCC;;AC3DD;;;AAGG;AACH,IAAA,iBAAA,kBAAA,UAAA,MAAA,EAAA;IAAuC,SAAS,CAAA,iBAAA,EAAA,MAAA,CAAA,CAAA;IAO9C,SAAY,iBAAA,CAAA,eAA0C,EAAE,SAAwB,EAAA;AAAhF,QAAA,IAAA,KAAA,GACE,iBAAO,IAIR,IAAA,CAAA;AAHC,QAAA,KAAI,CAAC,eAAe,GAAG,eAAe,CAAC;AACvC,QAAA,KAAI,CAAC,eAAe,GAAI,SAAiB,CAAC,eAAe,CAAC;QAC1D,KAAI,CAAC,cAAc,GAAG,eAAe,CAAC,cAAc,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;;KAC5E;AAED;;;;;;AAMG;AACI,IAAA,iBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAvB,UAAwB,MAAW,EAAE,YAA6B,EAAE,KAAW,EAAA;AAC7E,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;KAC3D,CAAA;AAED;;;;;AAKG;AACI,IAAA,iBAAA,CAAA,SAAA,CAAA,cAAc,GAArB,UAAsB,MAAW,EAAE,KAAW,EAAA;AAC5C,QAAA,OAAO,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAI,EAAE,KAAK,IAAI,IAAI,CAAC,CAAC;KACnD,CAAA;AAED;;;;AAIG;AACI,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAjB,UAAkB,KAAyB,EAAE,IAAoB,EAAA;AAC/D,QAAA,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,EAAE;AACV,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE;AACjC,gBAAA,OAAO,IAAI,CAAC;AACb,aAAA;AACF,SAAA;AACD,QAAA,OAAO,KAAK,CAAC;KACd,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,IAAoB,EAAE,MAAW,EAAE,KAAU,EAAA;AAC9D,QAAA,IAAM,UAAU,GAAe,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;;QAE5F,IAAA,EAAA,GAAsC,IAAI,CAAC,QAAQ,EAA3C,YAAY,GAAA,EAAA,CAAA,IAAA,EAAE,WAAW,GAAA,EAAA,CAAA,WAAkB,CAAC;QACxD,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,cAAc,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;AAC9E,SAAA;AACD,QAAA,IAAM,eAAe,GAAQ;AAC3B,YAAA,YAAY,EAAE,WAAW;AACzB,YAAA,aAAa,EAAE,YAAY;AAC3B,YAAA,MAAM,EAAE,KAAK;AACb,YAAA,OAAO,EAAE,MAAM;YACf,OAAO,EAAE,IAAI,CAAC,MAAM;;;YAGpB,eAAe,EAAE,IAAI,CAAC,cAAc;SACrC,CAAC;AACF,QAAA,OAAO,UAAU,CAAC,QAAQ,CACxB,EAAE,cAAc,EAAE,MAAM,EAAE,eAAe,iBAAA,EAAE,EAC3C,IAAI,CAAC,eAAe,CAAC,CAAC;KACzB,CAAA;IAEO,iBAAoB,CAAA,SAAA,CAAA,oBAAA,GAA5B,UACE,MAAW,EACX,YAAoC,EACpC,YAAgC,EAChC,QAAgB,EAChB,OAAyB,EAAA;QAL3B,IAmDC,KAAA,GAAA,IAAA,CAAA;;QA3CC,IAAM,qBAAqB,GAAG,YAAY,KAAK,IAAI,IAAI,YAAY,KAAK,SAAS,CAAC;AAElF,QAAA,IAAM,KAAK,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACrC,IAAI,QAAQ,GAAG,IAAI,CAAC;;QAGpB,IAAM,QAAQ,GAAuB,EAAE,CAAC;gCAC/B,CAAC,EAAA;AACR,YAAA,IAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;;;YAItB,IAAI,CAAC,qBAAqB,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY,EAAE;;AAEjE,aAAA;;YAGD,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;;AAEpC,aAAA;;YAGD,IAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YAChF,IAAI,gBAAgB,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACrD,YAAA,IAAI,EAAE,gBAAgB,YAAY,OAAO,CAAC,EAAE;AAC1C,gBAAA,gBAAgB,GAAG,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACtD,aAAA;YACD,QAAQ,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,UAAA,KAAK,EAAA;gBACrC,IAAM,OAAO,GAAG,KAAK,GAAG,IAAI,GAAG,KAAI,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;AACnF,gBAAA,QAAQ,GAAG,QAAQ,IAAI,KAAK,CAAC;AAC7B,gBAAA,OAAO,KAAK,CAAC;aACd,CAAC,CAAC,CAAC;;AAzBR,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAA;oBAA5B,CAAC,CAAA,CAAA;AA0BT,SAAA;AAED,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC;AACzB,aAAA,IAAI,CAAC,YAAA;AACN,YAAA,QAAQ,EAAE,CAAC;AACX,YAAA,IAAI,QAAQ,IAAI,QAAQ,GAAG,YAAY,CAAC,MAAM,EAAE;AAC9C,gBAAA,OAAO,KAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,YAAY,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AACzF,aAAA;AACD,YAAA,OAAO,OAAO,CAAC;AACjB,SAAC,CAAC,CAAC;KACJ,CAAA;AAEO,IAAA,iBAAA,CAAA,SAAA,CAAA,QAAQ,GAAhB,UACE,MAAW,EACX,YAAoC,EACpC,KAAgC,EAAA;;QAGhC,IAAI,CAAC,KAAK,EAAE;;AAEV,YAAA,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,SAAA;;QAGD,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;AAChC,YAAA,OAAO,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC5B,SAAA;AAED,QAAA,OAAO,IAAI,CAAC,oBAAoB,CAAC,MAAM,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;KACtE,CAAA;AA7Ia,IAAA,iBAAA,CAAA,MAAM,GAAG,CAAC,yBAAyB,EAAEC,+BAAa,CAAC,CAAC;IA8IpE,OAAC,iBAAA,CAAA;CAAA,CA/IsC,SAAS,CA+I/C;;AC3JD;;AAEG;AACSC,iCAkCX;AAlCD,CAAA,UAAY,eAAe,EAAA;AACzB;;;AAGG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AAEV;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAQ,CAAA;AAER;;AAEG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAU,CAAA;AAEV;;;AAGG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,cAAA,CAAA,GAAA,CAAA,CAAA,GAAA,cAAgB,CAAA;AAEhB;;;AAGG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,UAAA,CAAA,GAAA,CAAA,CAAA,GAAA,UAAY,CAAA;AAEZ;;;AAGG;AACH,IAAA,eAAA,CAAA,eAAA,CAAA,kBAAA,CAAA,GAAA,CAAA,CAAA,GAAA,kBAAoB,CAAA;AACtB,CAAC,EAlCWA,uBAAe,KAAfA,uBAAe,GAkC1B,EAAA,CAAA,CAAA;;AC9BD;;AAEG;AACH,IAAA,6BAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,6BAAA,GAAA;QAGU,IAAa,CAAA,aAAA,GAAkB,iBAAiB,CAAC;AACjD,QAAA,IAAA,CAAA,iBAAiB,GAAG,6BAA6B,CAAC,0BAA0B,CAAC;KA2BtF;AAzBC;;AAEG;IACI,6BAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,IAAmB,EAAA;AACxC,QAAA,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC;AAC1B,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;IAEM,6BAAwB,CAAA,SAAA,CAAA,wBAAA,GAA/B,UAAgC,OAAwB,EAAA;AACtD,QAAA,IAAI,CAAC,iBAAiB,GAAG,OAAO,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAEM,IAAA,6BAAA,CAAA,SAAA,CAAA,2BAA2B,GAAlC,YAAA;QACE,OAAO,IAAI,CAAC,iBAAiB,CAAC;KAC/B,CAAA;AAED;;AAEG;IACI,6BAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,SAAoB,EAAA;QAC/B,IAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;AACpD,QAAA,SAAS,CAAC,gBAAgB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;AACjD,QAAA,SAAS,CAAC,gBAAgB,CAAC,6BAA6B,EAAE,IAAI,CAAC,CAAC;KACjE,CAAA;AA7Ba,IAAA,6BAAA,CAAA,0BAA0B,GAAGA,uBAAe,CAAC,IAAI,CAAC;IA8BlE,OAAC,6BAAA,CAAA;AAAA,CA/BD,EA+BC;;ACvCD;;;;;AAKG;AACa,SAAA,mBAAmB,CAAC,OAAY,EAAE,IAAS,EAAA;AACzD,IAAA,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;;IAE9B,IAAI,MAAM,YAAY,OAAO,EAAE;AAC7B,QAAA,OAAO,MAAM,CAAC;AACf,KAAA;;;AAGD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,EAAE;QACzD,IAAM,UAAU,GAAQ,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC;AAC5C,QAAA,IAAI,UAAU,CAAC,SAAS,KAAK,MAAM,EAAE;AACnC,YAAA,IAAM,OAAO,GAAG,UAAU,CAAC,SAAS,CAAC,GAAG,CAACC,cAAG,CAAC,OAAO,CAAC,CAAC;AACtD,YAAA,IAAI,OAAO,EAAE;AACX,gBAAA,OAAO,OAAO,CAAC;AAChB,aAAA;YACD,MAAM,IAAI,KAAK,CAAC,wCAAA,CAAA,MAAA,CAAwC,OAAO,CAAC,gBAAgB,EAAI,KAAA,CAAA,CAAC,CAAC;AACvF,SAAA;AACF,KAAA;IACD,MAAM,IAAI,KAAK,CAAC,wCAAA,CAAA,MAAA,CAAwC,OAAO,CAAC,gBAAgB,EAAI,KAAA,CAAA,CAAC,CAAC;AACxF;;AChBA,SAAS,SAAS,CAAC,UAAsB,EAAE,gBAA4B,EAAE,MAAW,EAAA;IAClF,IAAM,KAAK,GAAG,gBAAgB,CAAC,QAAQ,CAAC,MAAM,EAAE,IAAW,CAAC,CAAC;IAC7D,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,YAAY,MAAM,EAAE;AACpE,QAAA,OAAO,KAAK,CAAC;AACd,KAAA;;IAED,MAAM,IAAI,KAAK,CAAC,OAAQ,CAAA,MAAA,CAAA,gBAAgB,EAAc,aAAA,CAAA,CAAA,MAAA,CAAA,UAAU,EAAkB,iBAAA,CAAA,CAAA,MAAA,CAAA,KAAK,EAA2C,2CAAA,CAAA,CAAC,CAAC;AACtI,CAAC;AAED;;;;AAIG;AACa,SAAA,eAAe,CAC7B,UAAsB,EACtB,MAAa,EAAA;IAEb,IAAM,kBAAkB,GAAG,UAAU,CAAC;AACtC,IAAA,OAAO,UAAU,YAAYC,8BAAe,IAAI,UAAU,YAAYC,6BAAc,EAAE;AACpF,QAAA,UAAU,GAAG,UAAU,CAAC,UAAU,CAAC;AACpC,KAAA;AAED,IAAA,IAAI,MAAiC,CAAC;AACtC,IAAA,IAAI,YAAoB,CAAC;IACzB,IAAI,UAAU,YAAYC,0BAAW,EAAE;AACrC,QAAA,MAAM,GAAGC,4BAAa,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC;AACrE,QAAA,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;AAChC,KAAA;SAAM,IAAI,UAAU,YAAYC,2BAAY,EAAE;QAC7C,MAAM,GAAG,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAClE,QAAA,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;AAChC,KAAA;SAAM,IAAI,UAAU,YAAYC,0BAAW,EAAE;QAC5C,MAAM,GAAG,SAAS,CAAC,kBAAkB,EAAE,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAClE,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAChD,KAAA;AAAM,SAAA;AACL,QAAA,MAAM,IAAI,KAAK,CAAC,sBAAe,kBAAkB,EAAA,yDAAA,CAAyD,CAAC,CAAC;AAC7G,KAAA;AACD,IAAA,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE;AAC3C,QAAA,OAAO,IAAI,CAAC;AACb,KAAA;AACD,IAAA,OAAO,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC;AAClC;;ACpDM,SAAU,QAAQ,CAAC,KAAU,EAAA;AACjC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;AACrE,CAAC;AAEK,SAAU,QAAQ,CAAC,KAAU,EAAA;AACjC,IAAA,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,iBAAiB,CAAC;AACrE;;ACGA,IAAA,sBAAA,kBAAA,YAAA;AAGE,IAAA,SAAA,sBAAA,CAAoB,MAAc,EAAA;QAAd,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;KAAK;IAEhC,sBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAA8B,QAA6D,EAAA;QACzF,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,EAAE;AAC5C,YAAA,OAAO,QAA2B,CAAC;AACpC,SAAA;QACD,IAAM,YAAY,GAAG,qBAAqB,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChE,IAAM,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;QACjD,IAAI,QAAQ,YAAYH,0BAAW;eAC9B,QAAQ,YAAYE,2BAAY,IAAI,QAAQ,CAAC,MAAM,YAAYF,0BAAW,EAAE;YAC/E,OAAO,QAAQ,CAAC,IAAI,CAAC;AACtB,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,yCAAiC,QAAQ,EAAA,IAAA,CAAG,CAAC,CAAC;KAC/D,CAAA;AAfa,IAAA,sBAAA,CAAA,MAAM,GAAG,CAACI,qBAAM,CAAC,CAAC;IAgBlC,OAAC,sBAAA,CAAA;AAAA,CAjBD,EAiBC,EAAA;AAEK,SAAU,qBAAqB,CAAC,EAAU,EAAA;;IAE9C,IAAM,OAAO,GAAG,kIAAkI,CAAC;;IAEnJ,IAAM,KAAK,GAAG,iDAAiD,CAAC;AAChE,IAAA,IAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjD,IAAI,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA,MAAM,IAAI,KAAK,CAAC,8CAAuC,EAAE,CAAE,CAAC,CAAC;AAC9D,KAAA;AACD,IAAA,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC;AAClB;;AClCA,IAAA,aAAA,kBAAA,YAAA;AACE,IAAA,SAAA,aAAA;AACE;;AAEG;IACa,IAA0B;AAE1C;;;AAGG;IACa,MAAwB;AAExC;;;;AAIG;IACa,OAAyB;AAEzC;;;AAGG;IACa,WAAuC;AAEvD;;;;;;AAMG;IACa,wBAAyD,EAAA;QA5BzD,IAAI,CAAA,IAAA,GAAJ,IAAI,CAAsB;QAM1B,IAAM,CAAA,MAAA,GAAN,MAAM,CAAkB;QAOxB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAkB;QAMzB,IAAW,CAAA,WAAA,GAAX,WAAW,CAA4B;QASvC,IAAwB,CAAA,wBAAA,GAAxB,wBAAwB,CAAiC;KAEtE;IACP,OAAC,aAAA,CAAA;AAAD,CAAC,EAAA;;AC5BD;;;;AAIG;AACH,IAAA,oBAAA,kBAAA,YAAA;AAwCE,IAAA,SAAA,oBAAA,CACU,SAAoB,EACpB,cAAsC,EAC9C,MAAsC,EAAA;QAF9B,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QACpB,IAAc,CAAA,cAAA,GAAd,cAAc,CAAwB;;AAtCxC,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAC;;QAG3C,IAAS,CAAA,SAAA,GAAyB,EAAE,CAAC;AAE7C;;AAEG;QACK,IAAO,CAAA,OAAA,GAAqB,EAAE,CAAC;AAEvC;;AAEG;QACI,IAAM,CAAA,MAAA,GAAqB,EAAE,CAAC;AAErC;;AAEG;QACI,IAAU,CAAA,UAAA,GAAG,KAAK,CAAC;;AAGlB,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAC;;AAGhD,QAAA,IAAA,CAAA,OAAO,GAAG,IAAI,GAAG,EAAY,CAAC;;AAQ9B,QAAA,IAAA,CAAA,gBAAgB,GAAiB,OAAO,CAAC,OAAO,EAAE,CAAC;QAEnD,IAAc,CAAA,cAAA,GAAuC,EAAE,CAAC;AAO9D,QAAA,IAAI,CAAC,eAAe,GAAG,MAAM,YAAY,6BAA6B;AAClE,cAAE,MAAM,CAAC,2BAA2B,EAAE;AACtC,cAAE,6BAA6B,CAAC,0BAA0B,CAAC;KAChE;AAED;;;;AAIG;IACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,QAAwC,EAAA;QAAzD,IAWC,KAAA,GAAA,IAAA,CAAA;AAVC,QAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACnC,OAAO;AACL,YAAA,OAAO,EAAE,YAAA;gBACP,IAAM,KAAK,GAAG,KAAI,CAAC,cAAc,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;AACpD,gBAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;oBAChB,OAAO;AACR,iBAAA;gBACD,KAAI,CAAC,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;aACtC;SACF,CAAC;KACH,CAAA;AAED;;;;AAIG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,MAAW,EAAE,KAAW,EAAA;QACvC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;KACjC,CAAA;AAED;;;AAGG;IACI,oBAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,MAAW,EAAA;AAC7B,QAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,kBAAkB,CACrB,OAAO,EACP,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,UAAA,MAAM,IAAI,OAAA,MAAM,CAAC,MAAM,KAAK,MAAM,CAAxB,EAAwB,CAAC,EACvD,EAAE,CAAC,CAAC;KACP,CAAA;AAED;;AAEG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,UACE,OAAe,EACf,MAAe,EACf,YAAsE,EAAA;AAAtE,QAAA,IAAA,YAAA,KAAA,KAAA,CAAA,EAAA,EAAA,YAAsE,GAAA,IAAA,CAAA,EAAA;AAEtE,QAAA,IAAI,oBAA4C,CAAC;QACjD,IAAI,YAAY,KAAK,IAAI,EAAE;YACzB,oBAAoB,GAAG,YAAmB,CAAC;AAC5C,SAAA;AAAM,aAAA;YACL,oBAAoB,GAAG,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;AAChE,SAAA;AACD,QAAA,IAAM,MAAM,GAAG,IAAI,cAAc,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,oBAAoB,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;QAC7G,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;AAClD,QAAA,OAAO,MAAM,CAAC;KACf,CAAA;AAED;;AAEG;IACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,MAAsB,EAAA;QACvC,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE;YACvC,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC;AAChD,SAAA;KACF,CAAA;AAED;;;AAGG;IACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,QAA4B,EAAA;QAA/C,IAOC,KAAA,GAAA,IAAA,CAAA;AANC,QAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,QAAQ,CAAC,MAAM,CAAC;AACd,YAAA,IAAI,EAAE,UAAU;AAChB,YAAA,MAAM,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,EAAA,EAAI,QAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAc,EAAE,EAAC,EAAA,CAAC;AAClG,YAAA,QAAQ,EAAE,EAAE;AACb,SAAA,CAAC,CAAC;KACJ,CAAA;AAED;;;AAGG;IACI,oBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,QAA4B,EAAA;QAAlD,IAOC,KAAA,GAAA,IAAA,CAAA;AANC,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC;QAC3D,QAAQ,CAAC,MAAM,CAAC;AACd,YAAA,IAAI,EAAE,OAAO;AACb,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,UAAA,MAAM,EAAA,EAAI,QAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAE,KAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAc,EAAE,EAAC,EAAA,CAAC;AACrG,SAAA,CAAC,CAAC;KACJ,CAAA;AAED;;;;;AAKG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,eAAe,GAAtB,UAAuB,OAAgB,EAAE,MAAe,EAAE,KAAW,EAAA;AACnE,QAAA,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,MAAM,QAAA,EAAE,KAAK,OAAA,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;KACnE,CAAA;AAED;;;AAGG;IACI,oBAAiB,CAAA,SAAA,CAAA,iBAAA,GAAxB,UAAyB,OAAgB,EAAA;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC3B,QAAA,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;KAC/B,CAAA;AAED;;;AAGG;IACK,oBAAuB,CAAA,SAAA,CAAA,uBAAA,GAA/B,UAAgC,WAAiC,EAAA;QAAjE,IAgBC,KAAA,GAAA,IAAA,CAAA;AAfC,QAAA,IAAI,WAAW,EAAE;AACP,YAAA,IAAA,QAAM,GAA0B,WAAW,CAAA,MAArC,EAAE,cAAY,GAAY,WAAW,CAAA,YAAvB,EAAE,OAAK,GAAK,WAAW,MAAhB,CAAiB;AACpD,YAAA,IAAI,WAA8C,CAAC;YACnD,IAAI,WAAW,CAAC,YAAY,EAAE;AAC5B,gBAAA,WAAS,GAAG,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,MAAM,KAAK,QAAM,IAAI,CAAC,CAAC,YAAY,KAAK,cAAY,CAAA,EAAA,CAAC;AACzE,aAAA;AAAM,iBAAA;AACL,gBAAA,WAAS,GAAG,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,KAAK,QAAM,CAAnB,EAAmB,CAAC;AACtC,aAAA;AACD,YAAA,IAAI,OAAK,EAAE;gBACT,OAAO,UAAA,CAAC,EAAI,EAAA,OAAA,WAAS,CAAC,CAAC,CAAC,IAAI,KAAI,CAAC,SAAS,CAAC,UAAU,CAAC,OAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAxD,EAAwD,CAAC;AACtE,aAAA;AACD,YAAA,OAAO,WAAS,CAAC;AAClB,SAAA;AAAM,aAAA;AACL,YAAA,OAAO,YAAM,EAAA,OAAA,IAAI,CAAA,EAAA,CAAC;AACnB,SAAA;KACF,CAAA;AAED;;;;AAIG;IACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,WAAiC,EAAA;QAAjD,IAgEC,KAAA,GAAA,IAAA,CAAA;;AA9DC,QAAA,IAAI,OAAwC,CAAC;AAC7C,QAAA,IAAI,WAAW,EAAE;;AAET,YAAA,IAAA,QAAM,GAA0B,WAAW,CAAA,MAArC,EAAE,cAAY,GAAY,WAAW,CAAA,YAAvB,EAAE,OAAK,GAAK,WAAW,MAAhB,CAAiB;;YAElD,OAAK,GAAG,OAAK,IAAI,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAM,CAAC,CAAC;;AAE1C,YAAA,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE;;AAE1C,gBAAA,OAAO,GAAG,YAAA,EAAM,OAAA,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,QAAM,EAAE,OAAK,CAAC,CAAA,EAAA,CAAC;AAC9D,aAAA;AAAM,iBAAA;;AAEL,gBAAA,OAAO,GAAG,YAAM,EAAA,OAAA,KAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,QAAM,EAAE,cAAY,EAAE,OAAK,CAAC,CAAA,EAAA,CAAC;AAC9E,aAAA;AACF,SAAA;AAAM,aAAA;;AAEL,YAAA,OAAO,GAAG,YAAA;gBACR,IAAM,QAAQ,GAAgC,EAAE,CAAC;AACjD,gBAAA,KAA8B,IAAwB,EAAA,GAAA,CAAA,EAAxB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,OAAO,CAAC,EAAxB,EAAwB,GAAA,EAAA,CAAA,MAAA,EAAxB,IAAwB,EAAE;AAA7C,oBAAA,IAAA,WAAe,EAAd,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,EAAE,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA;AACvB,oBAAA,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAC;AAC7D,iBAAA;AACD,gBAAA,KAAmC,IAAyB,EAAA,GAAA,CAAA,EAAzB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,KAAI,CAAC,QAAQ,CAAC,EAAzB,EAAyB,GAAA,EAAA,CAAA,MAAA,EAAzB,IAAyB,EAAE;AAAnD,oBAAA,IAAA,WAAoB,EAAnB,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAI,KAAK,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,KAAA,CAAA;AAC1B,oBAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7F,oBAAA,IAAI,CAAC,YAAY,IAAI,KAAI,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,MAAM,CAAC,EAAE;wBAC1D,SAAS;AACV,qBAAA;oBACD,QAAQ,CAAC,IAAI,CAAC,KAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC;AACvG,iBAAA;AACD,gBAAA,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,UAAA,UAAU,EAAI,EAAA,OAAA,UAAU,CAAC,MAAM,CAAC,UAAC,CAAC,EAAE,CAAC,EAAK,EAAA,OAAA,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAA,EAAA,EAAE,EAAE,CAAC,CAA5C,EAA4C,CAAC,CAAC;AAChG,aAAC,CAAC;AACH,SAAA;;AAGD,QAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;AACvB,QAAA,IAAM,aAAa,GAAsC,IAAI,CAAC,gBAAgB;aAC3E,IAAI,CAAC,OAAO,CAAC;aACb,IAAI,CAAC,UAAC,UAA4B,EAAA;YACjC,IAAM,SAAS,GAAG,KAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;YAC5D,IAAM,UAAU,GAAG,KAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;YAClD,KAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;AAC5D,YAAA,IAAI,aAAa,KAAK,KAAI,CAAC,gBAAgB,EAAE;AAC3C,gBAAA,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACzB,aAAA;AACD,YAAA,IAAM,MAAM,GAA6B;AACvC,gBAAA,WAAW,EAAA,WAAA;AACX,gBAAA,KAAK,EAAE,UAAU,CAAC,IAAI,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,CAAC,KAAK,GAAA,CAAC,KAAK,SAAS;AACnD,gBAAA,OAAO,EAAE,UAAU;aACpB,CAAC;AACF,YAAA,KAAI,CAAC,eAAe,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAC1C,YAAA,OAAO,MAAM,CAAC;AAChB,SAAC,CAAC;aACD,KAAK,CAAC,UAAA,SAAS,EAAA;;AAEd,YAAA,KAAI,CAAC,UAAU,GAAG,KAAK,CAAC;AACxB,YAAA,KAAI,CAAC,gBAAgB,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;AAE1C,YAAA,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;AAEL,QAAA,IAAI,CAAC,gBAAgB,GAAG,aAAa,CAAC;AAEtC,QAAA,OAAO,aAAa,CAAC;KACtB,CAAA;AAED;;;;AAIG;IACI,oBAAK,CAAA,SAAA,CAAA,KAAA,GAAZ,UAAa,WAAiC,EAAA;QAC5C,IAAM,SAAS,GAAG,IAAI,CAAC,uBAAuB,CAAC,WAAW,CAAC,CAAC;QAC5D,IAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,EAAE,EAAE,CAAC,CAAC;AACjD,QAAA,IAAI,CAAC,eAAe,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KACzC,CAAA;AAED;;AAEG;IACK,oBAAqB,CAAA,SAAA,CAAA,qBAAA,GAA7B,UAA8B,EAAwC,EAAA;YAAtC,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,CAAA;QAClD,IAAM,QAAQ,GAAc,EAAE,CAAC;AAC/B,QAAA,KAAoC,IAAyB,EAAA,GAAA,CAAA,EAAzB,EAAA,GAAA,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAzB,EAAyB,GAAA,EAAA,CAAA,MAAA,EAAzB,IAAyB,EAAE;AAApD,YAAA,IAAA,WAAqB,EAApB,OAAO,GAAA,EAAA,CAAA,CAAA,CAAA,EAAI,MAAM,GAAA,EAAA,CAAA,CAAA,CAAA,CAAA,MAAA,CAAA;AAC3B,YAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7F,YAAA,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,KAAK,MAAM,IAAI,YAAY,CAAC,YAAY,KAAK,YAAY,EAAE;AAChG,gBAAA,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACvB,aAAA;AACF,SAAA;AACD,QAAA,OAAO,QAAQ,CAAC;KACjB,CAAA;AAEO,IAAA,oBAAA,CAAA,SAAA,CAAA,kBAAkB,GAA1B,UACE,IAA0B,EAC1B,UAA4B,EAAE,UAA4B,EAAA;;AAG1D,QAAA,IAAM,WAAW,GAAsB;AACrC,YAAA,IAAI,EAAA,IAAA;AACJ,YAAA,MAAM,EAAE,EAAE;AACV,YAAA,QAAQ,EAAE,EAAE;SACb,CAAC;;AAGF,QAAA,UAAU,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;gCAGtB,SAAS,EAAA;;YAElB,IAAM,QAAQ,GAAG,MAAK,CAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;;AAG3D,YAAA,MAAA,CAAK,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;;AAGhC,YAAA,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC;;AAG3D,YAAA,IAAM,cAAc,GAAG,UAAU,CAAC,SAAS,CACzC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,YAAY,CAAvG,EAAuG,CAAC,CAAC;AAChH,YAAA,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE;;AAEzB,gBAAA,MAAA,CAAK,OAAO,CAAC,MAAM,CAAC,OAAK,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACxD,gBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AACpB,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,OAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,iBAAA;AACF,aAAA;AAAM,iBAAA;;AAEL,gBAAA,IAAM,SAAS,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;;AAG1D,gBAAA,IAAM,UAAQ,GAAG,MAAA,CAAK,qBAAqB,CAAC,SAAS,CAAC,CAAC;gBACvD,MAAK,CAAA,QAAQ,CAAC,GAAG,CAAC,SAAS,EAAE,UAAQ,CAAC,CAAC;;AAGvC,gBAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAA,UAAA,EAAE,CAAC,CAAC;;;AAIzD,gBAAA,MAAA,CAAK,OAAO,CAAC,MAAM,CAAC,MAAA,CAAK,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;gBACnE,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,EAAE;AACvC,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,OAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;AACvD,iBAAA;qBAAM,IAAI,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC/C,oBAAA,MAAA,CAAK,MAAM,CAAC,MAAM,CAAC,MAAA,CAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AAClE,iBAAA;AAAM,qBAAA,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE;AAC3B,oBAAA,MAAA,CAAK,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAC7B,iBAAA;AACF,aAAA;;;;AAxCH,QAAA,KAAwB,UAAU,EAAV,YAAA,GAAA,UAAU,EAAV,EAAA,GAAA,YAAA,CAAA,MAAU,EAAV,EAAU,EAAA,EAAA;AAA7B,YAAA,IAAM,SAAS,GAAA,YAAA,CAAA,EAAA,CAAA,CAAA;oBAAT,SAAS,CAAA,CAAA;AAyCnB,SAAA;;AAGD,QAAA,KAAqB,UAAU,EAAV,YAAA,GAAA,UAAU,EAAV,EAAU,GAAA,YAAA,CAAA,MAAA,EAAV,IAAU,EAAE;AAA5B,YAAA,IAAM,MAAM,GAAA,YAAA,CAAA,EAAA,CAAA,CAAA;YACf,IAAM,QAAQ,GAAG,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC;AACpD,YAAA,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,QAAQ,EAAA,QAAA,EAAE,CAAC,CAAC;YAC9C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;AACpC,YAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,YAAA,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE;AACjB,gBAAA,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC1B,aAAA;AACF,SAAA;;QAGD,KAAuB,IAAA,EAAA,GAAA,CAAc,EAAd,EAAA,GAAA,IAAI,CAAC,SAAS,EAAd,EAAA,GAAA,EAAA,CAAA,MAAc,EAAd,EAAA,EAAc,EAAE;AAAlC,YAAA,IAAM,QAAQ,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA;AACjB,YAAA,QAAQ,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC9B,SAAA;KACF,CAAA;AAED;;AAEG;IACI,oBAAe,CAAA,SAAA,CAAA,eAAA,GAAtB,UAAuB,OAAgB,EAAA;AACrC,QAAA,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE;YACpB,OAAO;AACR,SAAA;AACD,QAAA,IAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC7F,QAAA,IAAI,KAAK,CAAC;QACV,IAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,IAAI,iBAAiB,EAAE;AACrB,YAAA,KAAK,GAAG,iBAAiB,CAAC,KAAK,CAAC;AAChC,YAAA,iBAAiB,CAAC,YAAY,GAAG,YAAY,CAAC;AAC/C,SAAA;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;AACR,SAAA;QACO,IAAA,MAAM,GAAmB,YAAY,CAAA,MAA/B,EAAE,YAAY,GAAK,YAAY,CAAA,YAAjB,CAAkB;AAC9C,QAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;KAChD,CAAA;AAED;;AAEG;IACI,oBAAY,CAAA,SAAA,CAAA,YAAA,GAAnB,UAAoB,OAAgB,EAAA;QAClC,IAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;AACrD,QAAA,IAAI,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAC3F,QAAA,IAAI,CAAC,YAAY,IAAI,iBAAiB,EAAE;AACtC,YAAA,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;AAC/C,SAAA;AACD,QAAA,IAAI,iBAAiB,EAAE;AACrB,YAAA,iBAAiB,CAAC,YAAY,GAAG,IAAI,CAAC;AACvC,SAAA;QACD,IAAI,CAAC,YAAY,EAAE;YACjB,OAAO;AACR,SAAA;QACO,IAAA,MAAM,GAAmB,YAAY,CAAA,MAA/B,EAAE,YAAY,GAAK,YAAY,CAAA,YAAjB,CAAkB;QAC9C,IAAI,CAAC,KAAK,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC,CAAC;KACtC,CAAA;AAED;;;AAGG;IACI,oBAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,UAA2B,EAAA;AAC9C,QAAA,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;AAClC,QAAA,IAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;AAClD,QAAA,KAAsB,UAAQ,EAAR,UAAA,GAAA,QAAQ,EAAR,EAAQ,GAAA,UAAA,CAAA,MAAA,EAAR,IAAQ,EAAE;AAA3B,YAAA,IAAM,OAAO,GAAA,UAAA,CAAA,EAAA,CAAA,CAAA;AAChB,YAAA,IAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;YAC9B,OAAO,CAAC,MAAM,EAAE,CAAC;AACjB,YAAA,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACtB,SAAA;KACF,CAAA;AAED;;AAEG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,gBAAgB,GAAvB,YAAA;QACE,KAA6C,IAAA,EAAA,GAAA,CAAW,EAAX,EAAA,GAAA,IAAI,CAAC,MAAM,EAAX,EAAA,GAAA,EAAA,CAAA,MAAW,EAAX,EAAA,EAAW,EAAE;YAA/C,IAAA,EAAA,GAAA,EAAA,CAAA,EAAA,CAA8B,EAA5B,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,YAAY,GAAA,EAAA,CAAA,YAAA,EAAE,IAAI,GAAA,EAAA,CAAA,IAAA,CAAA;YACrC,IAAI,IAAI,CAAC,iBAAiB,EAAE;gBAC1B,SAAS;AACV,aAAA;AACD,YAAA,IAAM,KAAK,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvB,YAAA,IAAI,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAA,MAAA,EAAE,YAAY,EAAA,YAAA,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC,CAAC;AAChD,SAAA;KACF,CAAA;AAEO,IAAA,oBAAA,CAAA,SAAA,CAAA,eAAe,GAAvB,UAAwB,WAA4C,EAAE,MAAuC,EAAA;AAC3G,QAAA,IAAI,IAAI,CAAC,cAAc,CAAC,MAAM,KAAK,CAAC,EAAE;YACpC,OAAO;AACR,SAAA;AACD,QAAA,IAAM,KAAK,GAAG,IAAI,aAAa,CAC7B,MAAM,GAAG,UAAU,GAAG,OAAO,EAC7B,IAAI,CAAC,MAAM,EACX,IAAI,CAAC,OAAO,EACZ,WAAW,IAAI,IAAI,EACnB,MAAM,CAAC,CAAC;AACV,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACnD,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAA;KACF,CAAA;IAnba,oBAAM,CAAA,MAAA,GAAG,CAAC,SAAS,EAAE,sBAAsB,EAAE,6BAA6B,CAAC,CAAC;IAob5F,OAAC,oBAAA,CAAA;AAAA,CArbD,EAqbC;;ACtcD;AASA;;AAEG;AACH,IAAA,2BAAA,kBAAA,YAAA;AACE,IAAA,SAAA,2BAAA,CAAoB,SAAoB,EAAA;QAApB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;KAAK;IAItC,2BAAI,CAAA,SAAA,CAAA,IAAA,GAAX,UAAY,OAAY,EAAE,MAAW,EAAE,iBAA8C,EAAE,KAAW,EAAA;QAAlG,IA2EC,KAAA,GAAA,IAAA,CAAA;;QAzEC,IAAM,MAAM,GAAG,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;;AAGpD,QAAA,IAAI,UAAgC,CAAC;QACrC,IAAI,iBAAiB,YAAY,oBAAoB,EAAE;YACrD,UAAU,GAAG,iBAAiB,CAAC;AAChC,SAAA;AAAM,aAAA;AACL,YAAA,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAACC,mCAAQ,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;YACrE,KAAK,GAAG,iBAAiB,CAAC;AAC3B,SAAA;QACD,IAAI,UAAU,KAAK,IAAI,EAAE;AACvB,YAAA,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;AACpE,SAAA;QAED,UAAU,CAAC,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AACnD,QAAA,OAAO,CAAC,oBAAoB,GAAG,UAAU,CAAC;QAC1C,IAAM,OAAO,GAAG,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;AACpD,QAAA,IAAM,KAAK,GACT,CAAC,OAAO,GAAGT,uBAAe,CAAC,IAAI,MAAMA,uBAAe,CAAC,IAAI,GAAG,MAAM;AAChE,cAAE,CAAC,OAAO,GAAGA,uBAAe,CAAC,QAAQ,MAAMA,uBAAe,CAAC,QAAQ,GAAG,UAAU;kBAC5E,IAAI,CAAC;AACb,QAAA,IAAM,gBAAgB,GAAG,CAAC,OAAO,GAAGA,uBAAe,CAAC,MAAM,MAAMA,uBAAe,CAAC,MAAM,CAAC;AACvF,QAAA,OAAO,CAAC,OAAO,GAAG,CAAC,gBAAgB,CAAC;;;;;QAKpC,OAAO,CAAC,aAAa,GAAG,gBAAgB,IAAI,KAAK,KAAK,IAAI,CAAC;AAC3D,QAAA,IAAI,gBAAgB,EAAE;AACpB,YAAA,OAAO,CAAC,eAAe,GAAG,OAAO,CAAC,YAAY,CAAC;;;AAG/C,YAAA,OAAO,CAAC,YAAY,GAAG,UAAU,KAAU,EAAA;AACzC,gBAAA,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC5B,gBAAA,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;gBACpB,IAAI,IAAI,CAAC,aAAa,EAAE;AACtB,oBAAA,IAAI,CAAC,oBAAoB,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC;AACjD,iBAAA;AACH,aAAC,CAAC;AACH,SAAA;QAED,IAAI,KAAK,KAAK,IAAI,EAAE;YAClB,OAAO,CAAC,gBAAgB,GAAG,YAAA;AACzB,gBAAA,KAAI,CAAC,SAAS,CAAC,cAAc,CAAC,YAAA;oBAC5B,IAAI,OAAO,CAAC,OAAO,EAAE;AACnB,wBAAA,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;AACpC,wBAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AAC9B,qBAAA;AACH,iBAAC,CAAC,CAAC;AACL,aAAC,CAAC;AACF,YAAA,OAAO,CAAC,sBAAsB,GAAG,KAAK,CAAC;AACvC,YAAA,OAAO,CAAC,cAAc,GAAG,MAAM,CAAC;YAChC,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACzD,YAAA,IAAI,gBAAgB,EAAE;;AAEZ,gBAAA,IAAA,cAAY,GAAK,eAAe,CAAC,OAAO,CAAC,gBAA8B,EAAE,OAAO,CAAC,MAAM,CAAE,aAA7E,CAA8E;gBAClG,OAAO,CAAC,sBAAsB,GAAG,UAAU,CAAC,SAAS,CAAC,UAAC,KAAK,EAAA;oBAC1D,IAAI,CAAC,OAAO,CAAC,aAAa,IAAI,KAAK,CAAC,IAAI,KAAK,UAAU,EAAE;wBACvD,OAAO,CAAC,aAAa,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,UAAC,CAAC,EAAA,EAAK,OAAA,CAAC,CAAC,YAAY,KAAK,cAAY,CAAA,EAAA,CAAC,GAAG,CAAC,CAAC,CAAC;AAC7F,qBAAA;AACH,iBAAC,CAAC,CAAC;AACJ,aAAA;AACF,SAAA;AAED,QAAA,IAAI,OAAO,KAAKA,uBAAe,CAAC,MAAM,EAAE;AACtC,YAAA,OAAO,CAAC,oBAAoB,GAAG,OAAO,CAAC,YAAY,CAAC;;;AAGpD,YAAA,OAAO,CAAC,YAAY,GAAG,UAAU,KAAU,EAAA;AACzC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACjC,gBAAA,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAC/C,aAAC,CAAC;AACH,SAAA;KACF,CAAA;IAEM,2BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,OAAY,EAAA;;QAExB,IAAI,OAAO,CAAC,eAAe,EAAE;AAC3B,YAAA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,eAAe,CAAC;AAC/C,YAAA,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC;AAChC,SAAA;QACD,IAAI,OAAO,CAAC,oBAAoB,EAAE;AAChC,YAAA,OAAO,CAAC,YAAY,GAAG,OAAO,CAAC,oBAAoB,CAAC;AACpD,YAAA,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACrC,SAAA;QACD,IAAI,OAAO,CAAC,gBAAgB,EAAE;AAC5B,YAAA,OAAO,CAAC,cAAc,CAAC,mBAAmB,CAAC,OAAO,CAAC,sBAAsB,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;AACrG,YAAA,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC;AAChC,YAAA,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC;AAC/B,SAAA;QACD,IAAI,OAAO,CAAC,sBAAsB,EAAE;AAClC,YAAA,OAAO,CAAC,sBAAsB,CAAC,OAAO,EAAE,CAAC;AACzC,YAAA,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC;AACvC,SAAA;AACD,QAAA,OAAO,CAAC,oBAAoB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;AACxD,QAAA,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC;AACpC,QAAA,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;AACvB,QAAA,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;KAC9B,CAAA;IACH,OAAC,2BAAA,CAAA;AAAD,CAAC,EAAA,CAAA;;AChHD;;;;AAIG;AAEH,IAAA,uBAAA,kBAAA,UAAA,MAAA,EAAA;IAA6C,SAA2B,CAAA,uBAAA,EAAA,MAAA,CAAA,CAAA;AAAxE,IAAA,SAAA,uBAAA,GAAA;;KAMC;IAHQ,uBAAkB,CAAA,SAAA,CAAA,kBAAA,GAAzB,UAA0B,UAAgC,EAAA;QACxD,OAAO,UAAU,CAAC,eAAe,CAAC;KACnC,CAAA;AAJa,IAAA,uBAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,uBAAuB,GAAA,UAAA,CAAA;QADnCC,8BAAe,CAAC,UAAU,CAAC;AACf,KAAA,EAAA,uBAAuB,CAMnC,CAAA;IAAD,OAAC,uBAAA,CAAA;CAAA,CAN4C,2BAA2B,CAMvE,EAAA;AAED;;;;AAIG;AAEH,IAAA,+BAAA,kBAAA,UAAA,MAAA,EAAA;IAAqD,SAA2B,CAAA,+BAAA,EAAA,MAAA,CAAA,CAAA;AAAhF,IAAA,SAAA,+BAAA,GAAA;;KAMC;AAHQ,IAAA,+BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,MAAM,CAAC;KAC/B,CAAA;AAJa,IAAA,+BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,+BAA+B,GAAA,UAAA,CAAA;QAD3CC,8BAAe,CAAC,kBAAkB,CAAC;AACvB,KAAA,EAAA,+BAA+B,CAM3C,CAAA;IAAD,OAAC,+BAAA,CAAA;CAAA,CANoD,2BAA2B,CAM/E,EAAA;AAED;;;AAGG;AAEH,IAAA,6BAAA,kBAAA,UAAA,MAAA,EAAA;IAAmD,SAA2B,CAAA,6BAAA,EAAA,MAAA,CAAA,CAAA;AAA9E,IAAA,SAAA,6BAAA,GAAA;;KAMC;AAHQ,IAAA,6BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,IAAI,CAAC;KAC7B,CAAA;AAJa,IAAA,6BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,6BAA6B,GAAA,UAAA,CAAA;QADzCC,8BAAe,CAAC,gBAAgB,CAAC;AACrB,KAAA,EAAA,6BAA6B,CAMzC,CAAA;IAAD,OAAC,6BAAA,CAAA;CAAA,CANkD,2BAA2B,CAM7E,EAAA;AAED;;;;AAIG;AAEH,IAAA,+BAAA,kBAAA,UAAA,MAAA,EAAA;IAAqD,SAA2B,CAAA,+BAAA,EAAA,MAAA,CAAA,CAAA;AAAhF,IAAA,SAAA,+BAAA,GAAA;;KAMC;AAHQ,IAAA,+BAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,MAAM,CAAC;KAC/B,CAAA;AAJa,IAAA,+BAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,+BAA+B,GAAA,UAAA,CAAA;QAD3CC,8BAAe,CAAC,kBAAkB,CAAC;AACvB,KAAA,EAAA,+BAA+B,CAM3C,CAAA;IAAD,OAAC,+BAAA,CAAA;CAAA,CANoD,2BAA2B,CAM/E,EAAA;AAED;;;;AAIG;AAEH,IAAA,qCAAA,kBAAA,UAAA,MAAA,EAAA;IAA2D,SAA2B,CAAA,qCAAA,EAAA,MAAA,CAAA,CAAA;AAAtF,IAAA,SAAA,qCAAA,GAAA;;KAMC;AAHQ,IAAA,qCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,YAAY,CAAC;KACrC,CAAA;AAJa,IAAA,qCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,qCAAqC,GAAA,UAAA,CAAA;QADjDC,8BAAe,CAAC,wBAAwB,CAAC;AAC7B,KAAA,EAAA,qCAAqC,CAMjD,CAAA;IAAD,OAAC,qCAAA,CAAA;CAAA,CAN0D,2BAA2B,CAMrF,EAAA;AAGD,IAAA,iCAAA,kBAAA,UAAA,MAAA,EAAA;IAAuD,SAA2B,CAAA,iCAAA,EAAA,MAAA,CAAA,CAAA;AAAlF,IAAA,SAAA,iCAAA,GAAA;;KAMC;AAHQ,IAAA,iCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,QAAQ,CAAC;KACjC,CAAA;AAJa,IAAA,iCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,iCAAiC,GAAA,UAAA,CAAA;QAD7CC,8BAAe,CAAC,oBAAoB,CAAC;AACzB,KAAA,EAAA,iCAAiC,CAM7C,CAAA;IAAD,OAAC,iCAAA,CAAA;CAAA,CANsD,2BAA2B,CAMjF,EAAA;AAGD,IAAA,yCAAA,kBAAA,UAAA,MAAA,EAAA;IAA+D,SAA2B,CAAA,yCAAA,EAAA,MAAA,CAAA,CAAA;AAA1F,IAAA,SAAA,yCAAA,GAAA;;KAMC;AAHQ,IAAA,yCAAA,CAAA,SAAA,CAAA,kBAAkB,GAAzB,YAAA;QACE,OAAOX,uBAAe,CAAC,gBAAgB,CAAC;KACzC,CAAA;AAJa,IAAA,yCAAA,CAAA,MAAM,GAAG,CAACU,0BAAS,CAAC,CAAC;IADxB,yCAAyC,GAAA,UAAA,CAAA;QADrDC,8BAAe,CAAC,4BAA4B,CAAC;AACjC,KAAA,EAAA,yCAAyC,CAMrD,CAAA;IAAD,OAAC,yCAAA,CAAA;CAAA,CAN8D,2BAA2B,CAMzF;;ACrFD;;AAEG;AACH,IAAA,2BAAA,kBAAA,YAAA;AAKE,IAAA,SAAA,2BAAA,CAAoB,SAAoB,EAAA;QAApB,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;KAAK;IAJ/B,2BAAG,CAAA,GAAA,GAAjB,UAAkB,SAAoB,EAAA;AACpC,QAAA,OAAO,IAAI,2BAA2B,CAAC,SAAS,CAAC,CAAC;KACnD,CAAA;AAID;;AAEG;IACI,2BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,SAAqB,EAAA;QACjC,IAAI,CAAC,SAAS,EAAE;YACd,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,SAAS,CAAc,CAAC;AACxD,SAAA;QACD,IAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAA2B,CAAC;QAC5F,IAAM,MAAM,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,6BAA6B,CAAkC,CAAC;QAClG,OAAO,IAAI,oBAAoB,CAAC,SAAS,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;KACpE,CAAA;AAED;;;AAGG;IACI,2BAAqB,CAAA,SAAA,CAAA,qBAAA,GAA5B,UAA6B,SAAqB,EAAA;QAChD,IAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,oBAAoB,EAAE,UAAU,CAAC,CAAC;AAClE,QAAA,OAAO,UAAU,CAAC;KACnB,CAAA;IACH,OAAC,2BAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAEA,2BAAmC,CAAC,2BAA2B,CAAC,GAAG,IAAI;;ACzBxE,IAAA,+BAAA,kBAAA,YAAA;IAcE,SAAoB,+BAAA,CAAA,eAAwB,EAAU,kBAA8C,EAAA;QAAhF,IAAe,CAAA,eAAA,GAAf,eAAe,CAAS;QAAU,IAAkB,CAAA,kBAAA,GAAlB,kBAAkB,CAA4B;QAP7F,IAAU,CAAA,UAAA,GAAgC,IAAI,CAAC;QAG/C,IAAM,CAAA,MAAA,GAAoB,EAAE,CAAC;QAE5B,IAAc,CAAA,cAAA,GAAoB,EAAE,CAAC;KAG5C;AAba,IAAA,+BAAA,CAAA,MAAM,GAApB,YAAA;AACE,QAAA,OAAO,CAACV,cAAG,CAAC,OAAO,EAAEW,+BAAI,CAAC,EAAE,CAAC,oBAAoB,CAAC,CAAC,CAAC;KACrD,CAAA;AAaM,IAAA,+BAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;QACE,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,UAAC,CAAC,EAAE,CAAC,EAAA;AAC5B,YAAA,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;AACjC,gBAAA,OAAO,CAAC,CAAC;AACV,aAAA;;YAED,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACzE,SAAC,CAAC,CAAC;KACJ,CAAA;IAEM,+BAAmB,CAAA,SAAA,CAAA,mBAAA,GAA1B,UAA2B,QAAmB,EAAA;QAA9C,IAEC,KAAA,GAAA,IAAA,CAAA;AADC,QAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,UAAA,CAAC,IAAI,OAAA,KAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAhC,EAAgC,CAAC,CAAC;KAC/D,CAAA;IAEM,+BAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,WAA8B,EAAA;gCAC7B,MAAM,EAAA;AACjB,YAAA,IAAM,KAAK,GAAG,MAAA,CAAK,cAAc,CAAC,SAAS,CAAC,UAAA,CAAC,IAAI,OAAA,CAAC,CAAC,KAAK,KAAK,MAAM,CAAlB,EAAkB,CAAC,CAAC;AACrE,YAAA,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;gBAChB,MAAK,CAAA,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;AACtC,aAAA;;;QAJH,KAAyB,IAAA,EAAA,GAAA,CAAoB,EAApB,EAAA,GAAA,WAAW,CAAC,QAAQ,EAApB,EAAoB,GAAA,EAAA,CAAA,MAAA,EAApB,EAAoB,EAAA,EAAA;AAAhC,YAAA,IAAA,MAAM,GAAA,EAAA,CAAA,EAAA,CAAA,CAAA,MAAA,CAAA;oBAAN,MAAM,CAAA,CAAA;AAKlB,SAAA;QAED,KAAmC,IAAA,EAAA,GAAA,CAAkB,EAAlB,EAAA,GAAA,WAAW,CAAC,MAAM,EAAlB,EAAA,GAAA,EAAA,CAAA,MAAkB,EAAlB,EAAA,EAAkB,EAAE;AAA5C,YAAA,IAAA,WAAoB,EAAlB,MAAM,GAAA,EAAA,CAAA,MAAA,EAAE,QAAQ,GAAA,EAAA,CAAA,QAAA,CAAA;YAC3B,IAAI,MAAM,CAAC,KAAK,EAAE;gBAChB,SAAS;AACV,aAAA;YACD,IAAM,OAAO,GAAG,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC;YACnD,IAAI,OAAO,CAAC,MAAM,EAAE;AAClB,gBAAA,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAA,OAAA,EAAE,CAAC,CAAC;AACtD,aAAA;AACF,SAAA;QAED,IAAI,CAAC,IAAI,EAAE,CAAC;AACZ,QAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,cAAc,CAAC;KACnC,CAAA;AAEM,IAAA,+BAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;AACE,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE;AACpB,YAAA,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,kBAAkB,EAAE,CAAC;AAC7C,SAAA;;AAED,QAAA,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;KACnC,CAAA;AAEM,IAAA,+BAAA,CAAA,SAAA,CAAA,MAAM,GAAb,YAAA;QACE,IAAI,IAAI,CAAC,UAAU,EAAE;AACnB,YAAA,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;AACtC,SAAA;KACF,CAAA;AA1DD,IAAA,UAAA,CAAA;QADCC,0BAAQ,CAAC,EAAE,kBAAkB,EAAEC,0BAAW,CAAC,MAAM,EAAE,CAAC;AACC,KAAA,EAAA,+BAAA,CAAA,SAAA,EAAA,YAAA,EAAA,KAAA,CAAA,CAAA,CAAA;AAGtD,IAAA,UAAA,CAAA;AADC,QAAAD,0BAAQ,CAAC,EAAE,eAAe,EAAE,IAAI,EAAE,kBAAkB,EAAEC,0BAAW,CAAC,MAAM,EAAE,CAAC;AACxC,KAAA,EAAA,+BAAA,CAAA,SAAA,EAAA,QAAA,EAAA,KAAA,CAAA,CAAA,CAAA;IAVzB,+BAA+B,GAAA,UAAA,CAAA;QAD3CC,iCAAe,CAAC,mBAAmB,CAAC;AACxB,KAAA,EAAA,+BAA+B,CAkE3C,CAAA;IAAD,OAAC,+BAAA,CAAA;AAAA,CAlED,EAkEC;;AC3ED,IAAA,iCAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,iCAAA,GAAA;KAsBC;IAfQ,iCAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,IAAS,EAAA;AACtB,QAAA,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;KACjC,CAAA;AAEM,IAAA,iCAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;QACE,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,oBAAoB,CAAC,CAAC;AAC3D,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;KAC5C,CAAA;AAEM,IAAA,iCAAA,CAAA,SAAA,CAAA,MAAM,GAAb,YAAA;QACE,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,UAAU,GAAG,IAAW,CAAC;AAC9B,QAAA,IAAI,CAAC,QAAQ,GAAG,IAAW,CAAC;KAC7B,CAAA;IArBU,iCAAiC,GAAA,UAAA,CAAA;QAD7CA,iCAAe,CAAC,qBAAqB,CAAC;AAC1B,KAAA,EAAA,iCAAiC,CAsB7C,CAAA;IAAD,OAAC,iCAAA,CAAA;AAAA,CAtBD,EAsBC;;ACpBD;;AAEG;AACH,IAAA,oBAAA,kBAAA,YAAA;IAGE,SACE,oBAAA,CAAA,QAAsB,EACtB,SAA0E,EAC1E,MAAmB,EACX,YAAmC,EACnC,WAAyC,EACzC,OAAgB,EAAA;AAHxB,QAAA,IAAA,MAAA,KAAA,KAAA,CAAA,EAAA,EAAA,MAAmB,GAAA,EAAA,CAAA,EAAA;QACX,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;QACnC,IAAW,CAAA,WAAA,GAAX,WAAW,CAA8B;QACzC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAExB,IAAI,CAAC,IAAI,GAAG;AACV,YAAA,QAAQ,EAAA,QAAA;AACR,YAAA,SAAS,EAAA,SAAA;AACT,YAAA,MAAM,EAAA,MAAA;AACN,YAAA,IAAI,EAAE,IAAI;AACV,YAAA,UAAU,EAAE,SAAS;AACrB,YAAA,OAAO,EAAE,IAAI;YACb,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B,CAAC;QACF,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACvC;AAED;;;;AAIG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,IAAI,GAAX,YAAA;AACE,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;AAC5B,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;AAEG;IACI,oBAAc,CAAA,SAAA,CAAA,cAAA,GAArB,UAAsB,GAAW,EAAA;AAC/B,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,GAAG,CAAC;AAC3B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;AACzB,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;AAEG;IACI,oBAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,OAAe,EAAA;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,UAAU,GAAG,QAAQ,CAAC;AAChC,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;AACxD,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;;;AAIG;IACI,oBAAI,CAAA,SAAA,CAAA,IAAA,GAAX,UAAY,SAAuC,EAAA;AACjD,QAAA,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,SAAS,CAAC;AAC3B,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;;AAGG;IACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,GAAW,EAAA;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC;AACpB,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;;AAID;;;AAGG;IACI,oBAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAuB,OAA+C,EAAA;QACpE,OAAO,IAAI,CAAC,YAAY,CAAC,MAAM,CAAU,OAAO,CAAC,CAAC;KACnD,CAAA;AAED;;AAEG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,YAAY,GAAnB,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;KACzC,CAAA;AAKD,IAAA,MAAA,CAAA,cAAA,CAAW,oBAAK,CAAA,SAAA,EAAA,OAAA,EAAA;AAHhB;;AAEG;AACH,QAAA,GAAA,EAAA,YAAA;AACE,YAAA,OAAO,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;SAChC;;;AAAA,KAAA,CAAA,CAAA;AAED;;;AAGG;IACI,oBAAE,CAAA,SAAA,CAAA,EAAA,GAAT,UAAU,MAAW,EAAA;QACnB,OAAO,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC;KACrC,CAAA;;AAID;;;;;AAKG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,SAAyE,EAAE,MAAe,EAAA;QACzG,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;KACtD,CAAA;AAED;;;;AAIG;IACI,oBAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,IAAY,EAAA;;QAAE,IAAc,IAAA,GAAA,EAAA,CAAA;aAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;YAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;AAC/C,QAAA,OAAO,CAAA,EAAA,GAAA,IAAI,CAAC,WAAW,EAAC,aAAa,CAAC,KAAA,CAAA,EAAA,EAAA,aAAA,CAAA,CAAA,IAAI,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;KACtD,CAAA;AAED;;;AAGG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;KACpC,CAAA;AAED;;;;AAIG;IACI,oBAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,KAAa,EAAA;QAC1B,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;KACxC,CAAA;AAED;;;AAGG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;KACjC,CAAA;AAED;;;AAGG;IACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC3C,CAAA;AAED;;;AAGG;IACI,oBAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;QAC7B,OAAO,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;KAC3C,CAAA;AAED;;;AAGG;IACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACzC,CAAA;AAED;;;AAGG;IACI,oBAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;QAC3B,OAAO,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACzC,CAAA;AAED;;;;AAIG;IACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,KAAa,EAAA;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpC,CAAA;AAED;;;;AAIG;IACI,oBAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,KAAa,EAAA;QACtB,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpC,CAAA;AAED;;;;AAIG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,UAAa,GAAW,EAAE,GAAW,EAAA;QACnC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KACzC,CAAA;AAED;;;;AAIG;AACI,IAAA,oBAAA,CAAA,SAAA,CAAA,OAAO,GAAd,UAAe,GAAW,EAAE,GAAW,EAAA;QACrC,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;KAC3C,CAAA;AAED;;;AAGG;IACI,oBAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,aAAqB,EAAA;QACjC,OAAO,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;KAC/C,CAAA;IACH,OAAC,oBAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAED;;AAEG;AACH,IAAA,WAAA,kBAAA,YAAA;AAeE,IAAA,SAAA,WAAA,CACU,YAAmC,EACnC,OAAgB,EAChB,QAAsB,EAAA;QAFtB,IAAY,CAAA,YAAA,GAAZ,YAAY,CAAuB;QACnC,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;QAChB,IAAQ,CAAA,QAAA,GAAR,QAAQ,CAAc;AAVhC;;;;AAIG;QACI,IAAQ,CAAA,QAAA,GAAG,CAAC,CAAC;KAMf;AAEL;;AAEG;IACI,WAAW,CAAA,SAAA,CAAA,WAAA,GAAlB,UAAmB,IAAmD,EAAA;AACpE,QAAA,IAAI,CAAC,QAAQ,CAAC,WAAW,GAAG,IAAI,CAAC;AACjC,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;;;;AAKG;AACI,IAAA,WAAA,CAAA,SAAA,CAAA,SAAS,GAAhB,UAAiB,SAA0E,EAAE,MAAe,EAAA;QAC1G,OAAO,IAAI,oBAAoB,CAC7B,IAAI,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;KAC5E,CAAA;AAED;;;;AAIG;IACI,WAAa,CAAA,SAAA,CAAA,aAAA,GAApB,UAAqB,IAAY,EAAA;QAAjC,IAaC,KAAA,GAAA,IAAA,CAAA;QAbkC,IAAc,IAAA,GAAA,EAAA,CAAA;aAAd,IAAc,EAAA,GAAA,CAAA,EAAd,EAAc,GAAA,SAAA,CAAA,MAAA,EAAd,EAAc,EAAA,EAAA;YAAd,IAAc,CAAA,EAAA,GAAA,CAAA,CAAA,GAAA,SAAA,CAAA,EAAA,CAAA,CAAA;;QAC/C,IAAI,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;QACzC,IAAI,CAAC,IAAI,EAAE;;AAET,YAAA,IAAI,GAAI,IAAY,CAAC,IAAI,CAAC,CAAC;YAC3B,IAAI,IAAI,YAAY,QAAQ,EAAE;gBAC5B,OAAO,IAAI,CAAC,IAAI,CAAA,KAAA,CAAT,IAAI,EAAM,aAAA,CAAA,CAAA,IAAI,CAAK,EAAA,IAAI,EAAE,KAAA,CAAA,CAAA,CAAA;AACjC,aAAA;AACD,YAAA,MAAM,IAAI,KAAK,CAAC,2BAAmB,IAAI,EAAA,oBAAA,CAAmB,CAAC,CAAC;AAC7D,SAAA;AACD,QAAA,IAAM,MAAM,GAAG,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,YAAY,CAAA,KAAA,CAAjB,IAAI,EAAiB,IAAI,IAAI,SAAS,CAAC;AAC1E,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAK,EAAE,GAAG,EAAA;;AAAK,YAAA,OAAA,CAAA,EAAA,GAAA,IAAI,CAAC,SAAS,EAAC,IAAI,CAAA,KAAA,CAAA,EAAA,EAAA,aAAA,CAAA,CAAC,KAAI,EAAE,KAAK,EAAE,GAAG,GAAK,IAAI,EAAA,KAAA,CAAA,CAAA,CAAA;SAAC,EAAE,MAAM,CAAC;aAC1F,cAAc,CAAC,IAAI,CAAC,CAAC;KACzB,CAAA;AAED;;;AAGG;AACI,IAAA,WAAA,CAAA,SAAA,CAAA,QAAQ,GAAf,YAAA;AACE,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAA;YACH,OAAA,KAAK,KAAK,IAAI;AACX,mBAAA,KAAK,KAAK,SAAS;AACnB,mBAAA,EAAE,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAY,CAAC,CAAC,CAAA;AAFjD,SAEiD,CACpD,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;KAC9B,CAAA;AAED;;;;AAIG;IACI,WAAO,CAAA,SAAA,CAAA,OAAA,GAAd,UAAe,KAAa,EAAA;AAC1B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAI,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAK,KAAa,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAY,CAAC,CAAA,EAAA,CAAC;aACzG,cAAc,CAAC,SAAS,CAAC,CAAC;KAC9B,CAAA;AAED;;;AAGG;AACI,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,YAAA;;;AAGE,QAAA,OAAO,IAAI,CAAC,OAAO,CAAC,uIAAuI,CAAC;;aAEzJ,cAAc,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAA;AAED;;;AAGG;IACI,WAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA,EAAA,EACrG,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;aACV,cAAc,CAAC,WAAW,CAAC,CAAC;KAChC,CAAA;AAED;;;AAGG;IACI,WAAS,CAAA,SAAA,CAAA,SAAA,GAAhB,UAAiB,MAAc,EAAA;AAC7B,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,IAAI,MAAM,CAAA,EAAA,EACrG,EAAE,MAAM,EAAA,MAAA,EAAE,CAAC;aACV,cAAc,CAAC,WAAW,CAAC,CAAC;KAChC,CAAA;AAED;;;AAGG;IACI,WAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAK,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAA,EAAA,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;aAC7G,cAAc,CAAC,UAAU,CAAC,CAAC;KAC/B,CAAA;AAED;;;AAGG;IACI,WAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,KAAa,EAAA;AAC3B,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAK,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAA,EAAA,EAAE,EAAE,KAAK,EAAA,KAAA,EAAE,CAAC;aAC7G,cAAc,CAAC,UAAU,CAAC,CAAC;KAC/B,CAAA;AAED;;;;AAIG;IACI,WAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,UAAkB,EAAA;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,UAAU,CAAA,EAAA,EAAE,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;aAChH,cAAc,CAAC,KAAK,CAAC,CAAC;KAC1B,CAAA;AAED;;;;AAIG;IACI,WAAG,CAAA,SAAA,CAAA,GAAA,GAAV,UAAW,UAAkB,EAAA;QAC3B,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,IAAI,UAAU,CAAA,EAAA,EAAE,EAAE,UAAU,EAAA,UAAA,EAAE,CAAC;aAChH,cAAc,CAAC,KAAK,CAAC,CAAC;KAC1B,CAAA;AAED;;;;AAIG;AACI,IAAA,WAAA,CAAA,SAAA,CAAA,KAAK,GAAZ,UAAa,GAAW,EAAE,GAAW,EAAA;AACnC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,IAAI,GAAG,IAAI,KAAK,IAAI,GAAG,CAAC,CAAvE,EAAuE,EAC3G,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC;aACZ,cAAc,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAA;AAED;;;;AAIG;AACI,IAAA,WAAA,CAAA,SAAA,CAAA,OAAO,GAAd,UAAe,GAAW,EAAE,GAAW,EAAA;AACrC,QAAA,OAAO,IAAI,CAAC,SAAS,CAAC,UAAC,KAAU,EAAA,EAAK,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,KAAK,KAAK,GAAG,GAAG,IAAI,KAAK,GAAG,GAAG,CAAC,CAArE,EAAqE,EACzG,EAAE,GAAG,EAAA,GAAA,EAAE,GAAG,EAAA,GAAA,EAAE,CAAC;aACZ,cAAc,CAAC,SAAS,CAAC,CAAC;KAC9B,CAAA;AAED;;;AAGG;IACI,WAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAc,aAAqB,EAAA;AACjC,QAAA,OAAO,IAAI,CAAC,SAAS,CACnB,UAAA,KAAK,EAAI,EAAA,OAAA,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,KAAY,KAAK,EAAE,IAAI,KAAK,KAAK,aAAa,CAAvF,EAAuF,EAChG,EAAE,aAAa,EAAA,aAAA,EAAE,CAAC;aACjB,cAAc,CAAC,QAAQ,CAAC,CAAC;KAC7B,CAAA;IA1La,WAAW,CAAA,WAAA,GAKrB,EAAE,CAAC;IAsLT,OAAC,WAAA,CAAA;AAAA,CA5LD,EA4LC,EAAA;AAED;;AAEG;AACH,IAAA,YAAA,kBAAA,YAAA;AAME,IAAA,SAAA,YAAA,CAAoB,OAAgB,EAAA;QAAhB,IAAO,CAAA,OAAA,GAAP,OAAO,CAAS;AALpC;;AAEG;QACI,IAAK,CAAA,KAAA,GAA2B,EAAE,CAAC;KAED;AAEzC;;;;AAIG;IACI,YAAM,CAAA,SAAA,CAAA,MAAA,GAAb,UAAsB,QAA6D,EAAA;QACjF,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;QACnD,IAAM,WAAW,GAAG,IAAI,WAAW,CACjC,IAAI,EACJ,IAAI,CAAC,OAAO,EACZ,EAAE,IAAI,MAAA,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/B,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC3C,CAAA;AAED;;AAEG;AACI,IAAA,YAAA,CAAA,SAAA,CAAA,YAAY,GAAnB,YAAA;QACE,IAAI,CAAC,iBAAiB,EAAE,CAAC;QACzB,IAAM,WAAW,GAAG,IAAI,WAAW,CACjC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;QACzD,OAAO,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;KAC3C,CAAA;AAED;;;AAGG;IACI,YAAE,CAAA,SAAA,CAAA,EAAA,GAAT,UAAU,MAAW,EAAA;QACnB,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,OAAO,IAAI,CAAC;KACb,CAAA;AAED;;;AAGG;IACI,YAAQ,CAAA,SAAA,CAAA,QAAA,GAAf,UAAgB,IAAwB,EAAA;QACtC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE;AAC5C,YAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AACrB,SAAA;AACD,QAAA,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACtC,CAAA;AAEO,IAAA,YAAA,CAAA,SAAA,CAAA,iBAAiB,GAAzB,YAAA;QACE,IAAI,IAAI,CAAC,OAAO,EAAE;YAChB,OAAO;AACR,SAAA;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,0EAAwE,CAAC,CAAC;KAC3F,CAAA;AAEO,IAAA,YAAA,CAAA,SAAA,CAAA,UAAU,GAAlB,UAAmB,WAAsC,EAAE,YAAoC,EAAA;;AAE7F,QAAA,IAAM,aAAa,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAA,CAAC,EAAI,EAAA,OAAA,CAAC,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,IAAI,YAAY,CAAlD,EAAkD,CAAC,CAAC;AAC/F,QAAA,IAAI,aAAa,EAAE;YACjB,IAAM,IAAI,GAAG,aAAa,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACrD,YAAA,WAAW,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;AACrC,YAAA,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,KAAK,IAAI,EAAE;gBACtC,WAAW,GAAG,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;AAClE,aAAA;AACF,SAAA;AACD,QAAA,OAAO,WAAW,CAAC;KACpB,CAAA;IACH,OAAC,YAAA,CAAA;AAAD,CAAC,EAAA,EAAA;AAED;;AAEG;AACH,IAAA,eAAA,kBAAA,YAAA;AAAA,IAAA,SAAA,eAAA,GAAA;KAmEC;AAhEe,IAAA,eAAA,CAAA,UAAU,GAAxB,UAAyB,aAAsC,EAAE,cAAsC,EAAA;QACrG,IAAI,CAAC,OAAO,GAAG;AACb,YAAA,OAAO,EAAE,aAAa;AACtB,YAAA,QAAQ,EAAE,cAAc;SACzB,CAAC;KACH,CAAA;AAED;;;AAGG;IACW,eAAM,CAAA,MAAA,GAApB,UAAsC,QAA6D,EAAA;AACjG,QAAA,OAAO,IAAI,YAAY,CAAU,eAAe,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;KAC5E,CAAA;AAED;;AAEG;AACW,IAAA,eAAA,CAAA,YAAY,GAA1B,YAAA;QACE,OAAO,IAAI,YAAY,CAAU,eAAe,CAAC,OAAO,CAAC,CAAC,YAAY,EAAE,CAAC;KAC1E,CAAA;AAED;;;;;;;AAOG;IACW,eAAU,CAAA,UAAA,GAAxB,UACE,IAAY,EACZ,SAAmF,EACnF,OAAe,EACf,YAAsC,EAAA;AAEtC,QAAA,kBAAkB,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC;AACnC,QAAA,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,GAAG,EAAE,SAAS,EAAA,SAAA,EAAE,YAAY,EAAA,YAAA,EAAE,CAAC;KAC7D,CAAA;AAED;;;;AAIG;AACW,IAAA,eAAA,CAAA,WAAW,GAAzB,UAA0B,KAAyB,EAAE,GAAW,EAAA;QAC9D,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,GAAG,KAAK,GAAG,CAAb,EAAa,CAAC,CAAA,EAAA,CAAC,CAAC;KACrD,CAAA;AAED;;;AAGG;IACW,eAAa,CAAA,aAAA,GAA3B,UAA4B,KAAyB,EAAA;QACnD,OAAO,KAAK,CAAC,GAAG,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,MAAM,CAAC,UAAA,CAAC,EAAA,EAAI,OAAA,CAAC,CAAC,GAAG,KAAK,SAAS,CAAnB,EAAmB,CAAC,CAAA,EAAA,CAAC,CAAC;KAC3D,CAAA;AAED;;;AAGG;IACW,eAAG,CAAA,GAAA,GAAjB,UAAkB,MAAW,EAAA;AAC3B,QAAA,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;KACrB,CAAA;IACH,OAAC,eAAA,CAAA;AAAD,CAAC,EAAA;;AC/jBD;AA6CA;;AAEG;SACa,SAAS;AACvB;AACA,eAAyF,EACzF,QAA0D,EAAA;;;IAI1D,IAAM,aAAa,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;IAC7E,IAAM,cAAc,GAAG,eAAe,CAAC,SAAS,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;AAC7E,IAAA,eAAe,CAAC,UAAU,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;;AAG1D,IAAA,IAAM,MAAM,GAAG,IAAI,6BAA6B,EAAE,CAAC;IACnD,IAAI,QAAQ,YAAY,QAAQ,EAAE;QAChC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClB,KAAA;AACD,IAAA,MAAM,CAAC,KAAK,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;;IAGxC,IAAI,eAAe,CAAC,eAAe,EAAE;QACnC,eAAe,CAAC,eAAe,CAC7B,uBAAuB,EACvB,+BAA+B,EAC/B,6BAA6B,EAC7B,iCAAiC,EACjC,+BAA+B,EAC/B,qCAAqC,EACrC,yCAAyC,EACzC,+BAA+B,EAC/B,iCAAiC,CAAC,CAAC;AACtC,KAAA;AACH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/es2015/aurelia-validation.js b/dist/es2015/aurelia-validation.js index 5cebb8c8..f270c69f 100644 --- a/dist/es2015/aurelia-validation.js +++ b/dist/es2015/aurelia-validation.js @@ -1,9 +1,9 @@ -import { LiteralString, Binary, Conditional, LiteralPrimitive, CallMember, AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; -import { BindingLanguage, ViewResources, customAttribute, bindable } from 'aurelia-templating'; -import { getLogger } from 'aurelia-logging'; +import { BindingLanguage, ViewResources, bindable, customAttribute } from 'aurelia-templating'; +import { LiteralString, LiteralPrimitive, Binary, Conditional, CallMember, BindingBehavior, ValueConverter, AccessScope, getContextFor, AccessMember, AccessKeyed, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; +import * as LogManager from 'aurelia-logging'; import { DOM } from 'aurelia-pal'; -import { Optional, Lazy } from 'aurelia-dependency-injection'; import { TaskQueue } from 'aurelia-task-queue'; +import { Optional, Lazy } from 'aurelia-dependency-injection'; /** * Validates objects and properties. @@ -172,20 +172,20 @@ class ValidationMessageParser { } ValidationMessageParser.inject = [BindingLanguage]; class MessageExpressionValidator extends ExpressionVisitor { - constructor(originalMessage) { - super(); - this.originalMessage = originalMessage; - } static validate(expression, originalMessage) { const visitor = new MessageExpressionValidator(originalMessage); expression.accept(visitor); } + constructor(originalMessage) { + super(); + this.originalMessage = originalMessage; + } visitAccessScope(access) { if (access.ancestor !== 0) { throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - getLogger('aurelia-validation') + LogManager.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length .warn(`Did you mean to use "$${access.name}" instead of "${access.name}" in this validation message template: "${this.originalMessage}"?`); } @@ -533,7 +533,7 @@ class PropertyAccessorParser { PropertyAccessorParser.inject = [Parser]; function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ const arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; const match = classic.exec(fn) || arrow.exec(fn); @@ -543,19 +543,19 @@ function getAccessorExpression(fn) { return match[1]; } -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 +/****************************************************************************** +Copyright (c) Microsoft Corporation. -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ function __decorate(decorators, target, key, desc) { @@ -1050,6 +1050,7 @@ class ValidateBindingBehaviorBase { binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { propertyName } = getPropertyInfo(binding.sourceExpression, binding.source); binding.validationSubscription = controller.subscribe((event) => { if (!binding.validatedOnce && event.type === 'validate') { @@ -1186,12 +1187,12 @@ ValidateOnChangeOrFocusoutBindingBehavior = __decorate([ * Creates ValidationController instances. */ class ValidationControllerFactory { - constructor(container) { - this.container = container; - } static get(container) { return new ValidationControllerFactory(container); } + constructor(container) { + this.container = container; + } /** * Creates a new controller instance. */ @@ -1216,6 +1217,9 @@ class ValidationControllerFactory { ValidationControllerFactory['protocol:aurelia:resolver'] = true; let ValidationErrorsCustomAttribute = class ValidationErrorsCustomAttribute { + static inject() { + return [DOM.Element, Lazy.of(ValidationController)]; + } constructor(boundaryElement, controllerAccessor) { this.boundaryElement = boundaryElement; this.controllerAccessor = controllerAccessor; @@ -1223,9 +1227,6 @@ let ValidationErrorsCustomAttribute = class ValidationErrorsCustomAttribute { this.errors = []; this.errorsInternal = []; } - static inject() { - return [DOM.Element, Lazy.of(ValidationController)]; - } sort() { this.errorsInternal.sort((a, b) => { if (a.targets[0] === b.targets[0]) { @@ -1802,4 +1803,5 @@ frameworkConfig, callback) { } } -export { configure, GlobalValidationConfiguration, getTargetDOMElement, getPropertyInfo, PropertyAccessorParser, getAccessorExpression, ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateEvent, ValidateResult, validateTrigger, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute, Validator, Rules, StandardValidator, validationMessages, ValidationMessageProvider, ValidationMessageParser, MessageExpressionValidator, FluentRuleCustomizer, FluentRules, FluentEnsure, ValidationRules }; +export { FluentEnsure, FluentRuleCustomizer, FluentRules, GlobalValidationConfiguration, MessageExpressionValidator, PropertyAccessorParser, Rules, StandardValidator, ValidateBindingBehavior, ValidateEvent, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateResult, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationMessageParser, ValidationMessageProvider, ValidationRendererCustomAttribute, ValidationRules, Validator, configure, getAccessorExpression, getPropertyInfo, getTargetDOMElement, validateTrigger, validationMessages }; +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/es2015/aurelia-validation.js.map b/dist/es2015/aurelia-validation.js.map new file mode 100644 index 00000000..2631e007 --- /dev/null +++ b/dist/es2015/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/es2017/aurelia-validation.js b/dist/es2017/aurelia-validation.js index 5cebb8c8..f270c69f 100644 --- a/dist/es2017/aurelia-validation.js +++ b/dist/es2017/aurelia-validation.js @@ -1,9 +1,9 @@ -import { LiteralString, Binary, Conditional, LiteralPrimitive, CallMember, AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; -import { BindingLanguage, ViewResources, customAttribute, bindable } from 'aurelia-templating'; -import { getLogger } from 'aurelia-logging'; +import { BindingLanguage, ViewResources, bindable, customAttribute } from 'aurelia-templating'; +import { LiteralString, LiteralPrimitive, Binary, Conditional, CallMember, BindingBehavior, ValueConverter, AccessScope, getContextFor, AccessMember, AccessKeyed, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; +import * as LogManager from 'aurelia-logging'; import { DOM } from 'aurelia-pal'; -import { Optional, Lazy } from 'aurelia-dependency-injection'; import { TaskQueue } from 'aurelia-task-queue'; +import { Optional, Lazy } from 'aurelia-dependency-injection'; /** * Validates objects and properties. @@ -172,20 +172,20 @@ class ValidationMessageParser { } ValidationMessageParser.inject = [BindingLanguage]; class MessageExpressionValidator extends ExpressionVisitor { - constructor(originalMessage) { - super(); - this.originalMessage = originalMessage; - } static validate(expression, originalMessage) { const visitor = new MessageExpressionValidator(originalMessage); expression.accept(visitor); } + constructor(originalMessage) { + super(); + this.originalMessage = originalMessage; + } visitAccessScope(access) { if (access.ancestor !== 0) { throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - getLogger('aurelia-validation') + LogManager.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length .warn(`Did you mean to use "$${access.name}" instead of "${access.name}" in this validation message template: "${this.originalMessage}"?`); } @@ -533,7 +533,7 @@ class PropertyAccessorParser { PropertyAccessorParser.inject = [Parser]; function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ const arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; const match = classic.exec(fn) || arrow.exec(fn); @@ -543,19 +543,19 @@ function getAccessorExpression(fn) { return match[1]; } -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 +/****************************************************************************** +Copyright (c) Microsoft Corporation. -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ function __decorate(decorators, target, key, desc) { @@ -1050,6 +1050,7 @@ class ValidateBindingBehaviorBase { binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { propertyName } = getPropertyInfo(binding.sourceExpression, binding.source); binding.validationSubscription = controller.subscribe((event) => { if (!binding.validatedOnce && event.type === 'validate') { @@ -1186,12 +1187,12 @@ ValidateOnChangeOrFocusoutBindingBehavior = __decorate([ * Creates ValidationController instances. */ class ValidationControllerFactory { - constructor(container) { - this.container = container; - } static get(container) { return new ValidationControllerFactory(container); } + constructor(container) { + this.container = container; + } /** * Creates a new controller instance. */ @@ -1216,6 +1217,9 @@ class ValidationControllerFactory { ValidationControllerFactory['protocol:aurelia:resolver'] = true; let ValidationErrorsCustomAttribute = class ValidationErrorsCustomAttribute { + static inject() { + return [DOM.Element, Lazy.of(ValidationController)]; + } constructor(boundaryElement, controllerAccessor) { this.boundaryElement = boundaryElement; this.controllerAccessor = controllerAccessor; @@ -1223,9 +1227,6 @@ let ValidationErrorsCustomAttribute = class ValidationErrorsCustomAttribute { this.errors = []; this.errorsInternal = []; } - static inject() { - return [DOM.Element, Lazy.of(ValidationController)]; - } sort() { this.errorsInternal.sort((a, b) => { if (a.targets[0] === b.targets[0]) { @@ -1802,4 +1803,5 @@ frameworkConfig, callback) { } } -export { configure, GlobalValidationConfiguration, getTargetDOMElement, getPropertyInfo, PropertyAccessorParser, getAccessorExpression, ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateEvent, ValidateResult, validateTrigger, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute, Validator, Rules, StandardValidator, validationMessages, ValidationMessageProvider, ValidationMessageParser, MessageExpressionValidator, FluentRuleCustomizer, FluentRules, FluentEnsure, ValidationRules }; +export { FluentEnsure, FluentRuleCustomizer, FluentRules, GlobalValidationConfiguration, MessageExpressionValidator, PropertyAccessorParser, Rules, StandardValidator, ValidateBindingBehavior, ValidateEvent, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateResult, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationMessageParser, ValidationMessageProvider, ValidationRendererCustomAttribute, ValidationRules, Validator, configure, getAccessorExpression, getPropertyInfo, getTargetDOMElement, validateTrigger, validationMessages }; +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/es2017/aurelia-validation.js.map b/dist/es2017/aurelia-validation.js.map new file mode 100644 index 00000000..1de9562d --- /dev/null +++ b/dist/es2017/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/native-modules/aurelia-validation.js b/dist/native-modules/aurelia-validation.js index b0edf9c8..d23e1c1e 100644 --- a/dist/native-modules/aurelia-validation.js +++ b/dist/native-modules/aurelia-validation.js @@ -1,9 +1,9 @@ -import { LiteralString, Binary, Conditional, LiteralPrimitive, CallMember, AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; -import { BindingLanguage, ViewResources, customAttribute, bindable } from 'aurelia-templating'; -import { getLogger } from 'aurelia-logging'; +import { BindingLanguage, ViewResources, bindable, customAttribute } from 'aurelia-templating'; +import { LiteralString, Binary, Conditional, CallMember, LiteralPrimitive, BindingBehavior, ValueConverter, AccessScope, getContextFor, AccessMember, AccessKeyed, Parser, bindingBehavior, bindingMode } from 'aurelia-binding'; +import * as LogManager from 'aurelia-logging'; import { DOM } from 'aurelia-pal'; -import { Optional, Lazy } from 'aurelia-dependency-injection'; import { TaskQueue } from 'aurelia-task-queue'; +import { Optional, Lazy } from 'aurelia-dependency-injection'; /** * Validates objects and properties. @@ -14,30 +14,32 @@ var Validator = /** @class */ (function () { return Validator; }()); -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 +/****************************************************************************** +Copyright (c) Microsoft Corporation. -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH +REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY +AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM +LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR +OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR +PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); @@ -50,12 +52,14 @@ function __decorate(decorators, target, key, desc) { return c > 3 && r && Object.defineProperty(target, key, r), r; } -function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; +function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); } /** @@ -243,9 +247,9 @@ var MessageExpressionValidator = /** @class */ (function (_super) { throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - getLogger('aurelia-validation') + LogManager.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length - .warn("Did you mean to use \"$" + access.name + "\" instead of \"" + access.name + "\" in this validation message template: \"" + this.originalMessage + "\"?"); + .warn("Did you mean to use \"$".concat(access.name, "\" instead of \"").concat(access.name, "\" in this validation message template: \"").concat(this.originalMessage, "\"?")); } }; return MessageExpressionValidator; @@ -527,10 +531,10 @@ function getTargetDOMElement(binding, view) { if (element) { return element; } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } function getObject(expression, objectExpression, source) { @@ -539,7 +543,7 @@ function getObject(expression, objectExpression, source) { return value; } // tslint:disable-next-line:max-line-length - throw new Error("The '" + objectExpression + "' part of '" + expression + "' evaluates to " + value + " instead of an object, null or undefined."); + throw new Error("The '".concat(objectExpression, "' part of '").concat(expression, "' evaluates to ").concat(value, " instead of an object, null or undefined.")); } /** * Retrieves the object and property name for the specified expression. @@ -566,7 +570,7 @@ function getPropertyInfo(expression, source) { propertyName = expression.key.evaluate(source); } else { - throw new Error("Expression '" + originalExpression + "' is not compatible with the validate binding-behavior."); + throw new Error("Expression '".concat(originalExpression, "' is not compatible with the validate binding-behavior.")); } if (object === null || object === undefined) { return null; @@ -595,19 +599,19 @@ var PropertyAccessorParser = /** @class */ (function () { || accessor instanceof AccessMember && accessor.object instanceof AccessScope) { return accessor.name; } - throw new Error("Invalid property expression: \"" + accessor + "\""); + throw new Error("Invalid property expression: \"".concat(accessor, "\"")); }; PropertyAccessorParser.inject = [Parser]; return PropertyAccessorParser; }()); function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ var arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; var match = classic.exec(fn) || arrow.exec(fn); if (match === null) { - throw new Error("Unable to parse accessor function:\n" + fn); + throw new Error("Unable to parse accessor function:\n".concat(fn)); } return match[1]; } @@ -1119,6 +1123,7 @@ var ValidateBindingBehaviorBase = /** @class */ (function () { binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var propertyName_1 = getPropertyInfo(binding.sourceExpression, binding.source).propertyName; binding.validationSubscription = controller.subscribe(function (event) { if (!binding.validatedOnce && event.type === 'validate') { @@ -1499,7 +1504,7 @@ var FluentRuleCustomizer = /** @class */ (function () { get: function () { return this.fluentEnsure.rules; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -1530,7 +1535,7 @@ var FluentRuleCustomizer = /** @class */ (function () { for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } - return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args)); + return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArray([name], args, false)); }; /** * Applies the "required" rule to the property. @@ -1670,14 +1675,14 @@ var FluentRules = /** @class */ (function () { // standard rule? rule = this[name]; if (rule instanceof Function) { - return rule.call.apply(rule, __spreadArrays([this], args)); + return rule.call.apply(rule, __spreadArray([this], args, false)); } - throw new Error("Rule with name \"" + name + "\" does not exist."); + throw new Error("Rule with name \"".concat(name, "\" does not exist.")); } var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined; return this.satisfies(function (value, obj) { var _a; - return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args)); + return (_a = rule.condition).call.apply(_a, __spreadArray([_this, value, obj], args, false)); }, config) .withMessageKey(name); }; @@ -1945,4 +1950,5 @@ frameworkConfig, callback) { } } -export { configure, GlobalValidationConfiguration, getTargetDOMElement, getPropertyInfo, PropertyAccessorParser, getAccessorExpression, ValidateBindingBehavior, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateEvent, ValidateResult, validateTrigger, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationRendererCustomAttribute, Validator, Rules, StandardValidator, validationMessages, ValidationMessageProvider, ValidationMessageParser, MessageExpressionValidator, FluentRuleCustomizer, FluentRules, FluentEnsure, ValidationRules }; +export { FluentEnsure, FluentRuleCustomizer, FluentRules, GlobalValidationConfiguration, MessageExpressionValidator, PropertyAccessorParser, Rules, StandardValidator, ValidateBindingBehavior, ValidateEvent, ValidateManuallyBindingBehavior, ValidateOnBlurBindingBehavior, ValidateOnChangeBindingBehavior, ValidateOnChangeOrBlurBindingBehavior, ValidateOnChangeOrFocusoutBindingBehavior, ValidateOnFocusoutBindingBehavior, ValidateResult, ValidationController, ValidationControllerFactory, ValidationErrorsCustomAttribute, ValidationMessageParser, ValidationMessageProvider, ValidationRendererCustomAttribute, ValidationRules, Validator, configure, getAccessorExpression, getPropertyInfo, getTargetDOMElement, validateTrigger, validationMessages }; +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/native-modules/aurelia-validation.js.map b/dist/native-modules/aurelia-validation.js.map new file mode 100644 index 00000000..2980af41 --- /dev/null +++ b/dist/native-modules/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/system/aurelia-validation.js b/dist/system/aurelia-validation.js index f2d968d9..2ee832d9 100644 --- a/dist/system/aurelia-validation.js +++ b/dist/system/aurelia-validation.js @@ -1,45 +1,44 @@ -System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'aurelia-pal', 'aurelia-dependency-injection', 'aurelia-task-queue'], function (exports, module) { +System.register(['aurelia-templating', 'aurelia-binding', 'aurelia-logging', 'aurelia-pal', 'aurelia-task-queue', 'aurelia-dependency-injection'], (function (exports) { 'use strict'; - var LiteralString, Binary, Conditional, LiteralPrimitive, CallMember, AccessMember, AccessScope, AccessKeyed, BindingBehavior, ValueConverter, getContextFor, Parser, bindingBehavior, bindingMode, BindingLanguage, ViewResources, customAttribute, bindable, getLogger, DOM, Optional, Lazy, TaskQueue; + var BindingLanguage, ViewResources, bindable, customAttribute, LiteralString, Binary, Conditional, CallMember, LiteralPrimitive, BindingBehavior, ValueConverter, AccessScope, getContextFor, AccessMember, AccessKeyed, Parser, bindingBehavior, bindingMode, LogManager, DOM, TaskQueue, Optional, Lazy; return { setters: [function (module) { + BindingLanguage = module.BindingLanguage; + ViewResources = module.ViewResources; + bindable = module.bindable; + customAttribute = module.customAttribute; + }, function (module) { LiteralString = module.LiteralString; Binary = module.Binary; Conditional = module.Conditional; - LiteralPrimitive = module.LiteralPrimitive; CallMember = module.CallMember; - AccessMember = module.AccessMember; - AccessScope = module.AccessScope; - AccessKeyed = module.AccessKeyed; + LiteralPrimitive = module.LiteralPrimitive; BindingBehavior = module.BindingBehavior; ValueConverter = module.ValueConverter; + AccessScope = module.AccessScope; getContextFor = module.getContextFor; + AccessMember = module.AccessMember; + AccessKeyed = module.AccessKeyed; Parser = module.Parser; bindingBehavior = module.bindingBehavior; bindingMode = module.bindingMode; }, function (module) { - BindingLanguage = module.BindingLanguage; - ViewResources = module.ViewResources; - customAttribute = module.customAttribute; - bindable = module.bindable; - }, function (module) { - getLogger = module.getLogger; + LogManager = module; }, function (module) { DOM = module.DOM; + }, function (module) { + TaskQueue = module.TaskQueue; }, function (module) { Optional = module.Optional; Lazy = module.Lazy; - }, function (module) { - TaskQueue = module.TaskQueue; }], - execute: function () { + execute: (function () { exports({ configure: configure, - getTargetDOMElement: getTargetDOMElement, - getPropertyInfo: getPropertyInfo, getAccessorExpression: getAccessorExpression, - validateTrigger: void 0 + getPropertyInfo: getPropertyInfo, + getTargetDOMElement: getTargetDOMElement }); /** @@ -51,30 +50,32 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au return Validator; }())); - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 + /****************************************************************************** + Copyright (c) Microsoft Corporation. - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); @@ -87,12 +88,14 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au return c > 3 && r && Object.defineProperty(target, key, r), r; } - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); } /** @@ -280,9 +283,9 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - getLogger('aurelia-validation') + LogManager.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length - .warn("Did you mean to use \"$" + access.name + "\" instead of \"" + access.name + "\" in this validation message template: \"" + this.originalMessage + "\"?"); + .warn("Did you mean to use \"$".concat(access.name, "\" instead of \"").concat(access.name, "\" in this validation message template: \"").concat(this.originalMessage, "\"?")); } }; return MessageExpressionValidator; @@ -477,7 +480,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au /** * Validation triggers. */ - var validateTrigger; + var validateTrigger; exports('validateTrigger', validateTrigger); (function (validateTrigger) { /** * Manual validation. Use the controller's `validate()` and `reset()` methods @@ -507,7 +510,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au * when it updates the model due to a change in the view. */ validateTrigger[validateTrigger["changeOrFocusout"] = 6] = "changeOrFocusout"; - })(validateTrigger || (validateTrigger = exports('validateTrigger', {}))); + })(validateTrigger || (exports('validateTrigger', validateTrigger = {}))); /** * Aurelia Validation Configuration API @@ -564,10 +567,10 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au if (element) { return element; } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } function getObject(expression, objectExpression, source) { @@ -576,7 +579,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au return value; } // tslint:disable-next-line:max-line-length - throw new Error("The '" + objectExpression + "' part of '" + expression + "' evaluates to " + value + " instead of an object, null or undefined."); + throw new Error("The '".concat(objectExpression, "' part of '").concat(expression, "' evaluates to ").concat(value, " instead of an object, null or undefined.")); } /** * Retrieves the object and property name for the specified expression. @@ -603,7 +606,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au propertyName = expression.key.evaluate(source); } else { - throw new Error("Expression '" + originalExpression + "' is not compatible with the validate binding-behavior."); + throw new Error("Expression '".concat(originalExpression, "' is not compatible with the validate binding-behavior.")); } if (object === null || object === undefined) { return null; @@ -632,19 +635,19 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au || accessor instanceof AccessMember && accessor.object instanceof AccessScope) { return accessor.name; } - throw new Error("Invalid property expression: \"" + accessor + "\""); + throw new Error("Invalid property expression: \"".concat(accessor, "\"")); }; PropertyAccessorParser.inject = [Parser]; return PropertyAccessorParser; }())); function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ var arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; var match = classic.exec(fn) || arrow.exec(fn); if (match === null) { - throw new Error("Unable to parse accessor function:\n" + fn); + throw new Error("Unable to parse accessor function:\n".concat(fn)); } return match[1]; } @@ -1156,6 +1159,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var propertyName_1 = getPropertyInfo(binding.sourceExpression, binding.source).propertyName; binding.validationSubscription = controller.subscribe(function (event) { if (!binding.validatedOnce && event.type === 'validate') { @@ -1536,7 +1540,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au get: function () { return this.fluentEnsure.rules; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -1567,7 +1571,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } - return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args)); + return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArray([name], args, false)); }; /** * Applies the "required" rule to the property. @@ -1707,14 +1711,14 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au // standard rule? rule = this[name]; if (rule instanceof Function) { - return rule.call.apply(rule, __spreadArrays([this], args)); + return rule.call.apply(rule, __spreadArray([this], args, false)); } - throw new Error("Rule with name \"" + name + "\" does not exist."); + throw new Error("Rule with name \"".concat(name, "\" does not exist.")); } var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined; return this.satisfies(function (value, obj) { var _a; - return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args)); + return (_a = rule.condition).call.apply(_a, __spreadArray([_this, value, obj], args, false)); }, config) .withMessageKey(name); }; @@ -1982,6 +1986,7 @@ System.register(['aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'au } } - } + }) }; -}); +})); +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/system/aurelia-validation.js.map b/dist/system/aurelia-validation.js.map new file mode 100644 index 00000000..d2421de1 --- /dev/null +++ b/dist/system/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/dist/umd-es2015/aurelia-validation.js b/dist/umd-es2015/aurelia-validation.js index 0686b410..a551a8a6 100644 --- a/dist/umd-es2015/aurelia-validation.js +++ b/dist/umd-es2015/aurelia-validation.js @@ -1,8 +1,28 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('aurelia-binding'), require('aurelia-templating'), require('aurelia-logging'), require('aurelia-pal'), require('aurelia-dependency-injection'), require('aurelia-task-queue')) : - typeof define === 'function' && define.amd ? define(['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'aurelia-pal', 'aurelia-dependency-injection', 'aurelia-task-queue'], factory) : - (factory((global.au = global.au || {}, global.au.validation = {}),global.au,global.au,global.au.LogManager,global.au,global.au,global.au)); -}(this, (function (exports,aureliaBinding,aureliaTemplating,LogManager,aureliaPal,aureliaDependencyInjection,aureliaTaskQueue) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('aurelia-templating'), require('aurelia-binding'), require('aurelia-logging'), require('aurelia-pal'), require('aurelia-task-queue'), require('aurelia-dependency-injection')) : + typeof define === 'function' && define.amd ? define(['exports', 'aurelia-templating', 'aurelia-binding', 'aurelia-logging', 'aurelia-pal', 'aurelia-task-queue', 'aurelia-dependency-injection'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.au = global.au || {}, global.au.validation = {}), global.au, global.au, global.au.LogManager, global.au, global.au, global.au)); +})(this, (function (exports, aureliaTemplating, aureliaBinding, LogManager, aureliaPal, aureliaTaskQueue, aureliaDependencyInjection) { 'use strict'; + + function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); + } + + var LogManager__namespace = /*#__PURE__*/_interopNamespace(LogManager); /** * Validates objects and properties. @@ -171,20 +191,20 @@ } ValidationMessageParser.inject = [aureliaTemplating.BindingLanguage]; class MessageExpressionValidator extends ExpressionVisitor { - constructor(originalMessage) { - super(); - this.originalMessage = originalMessage; - } static validate(expression, originalMessage) { const visitor = new MessageExpressionValidator(originalMessage); expression.accept(visitor); } + constructor(originalMessage) { + super(); + this.originalMessage = originalMessage; + } visitAccessScope(access) { if (access.ancestor !== 0) { throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - LogManager.getLogger('aurelia-validation') + LogManager__namespace.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length .warn(`Did you mean to use "$${access.name}" instead of "${access.name}" in this validation message template: "${this.originalMessage}"?`); } @@ -372,6 +392,7 @@ /** * Validation triggers. */ + exports.validateTrigger = void 0; (function (validateTrigger) { /** * Manual validation. Use the controller's `validate()` and `reset()` methods @@ -531,7 +552,7 @@ PropertyAccessorParser.inject = [aureliaBinding.Parser]; function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + const classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ const arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; const match = classic.exec(fn) || arrow.exec(fn); @@ -541,19 +562,19 @@ return match[1]; } - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 + /****************************************************************************** + Copyright (c) Microsoft Corporation. - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ function __decorate(decorators, target, key, desc) { @@ -1048,6 +1069,7 @@ binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { propertyName } = getPropertyInfo(binding.sourceExpression, binding.source); binding.validationSubscription = controller.subscribe((event) => { if (!binding.validatedOnce && event.type === 'validate') { @@ -1184,12 +1206,12 @@ * Creates ValidationController instances. */ class ValidationControllerFactory { - constructor(container) { - this.container = container; - } static get(container) { return new ValidationControllerFactory(container); } + constructor(container) { + this.container = container; + } /** * Creates a new controller instance. */ @@ -1214,6 +1236,9 @@ ValidationControllerFactory['protocol:aurelia:resolver'] = true; exports.ValidationErrorsCustomAttribute = class ValidationErrorsCustomAttribute { + static inject() { + return [aureliaPal.DOM.Element, aureliaDependencyInjection.Lazy.of(ValidationController)]; + } constructor(boundaryElement, controllerAccessor) { this.boundaryElement = boundaryElement; this.controllerAccessor = controllerAccessor; @@ -1221,9 +1246,6 @@ this.errors = []; this.errorsInternal = []; } - static inject() { - return [aureliaPal.DOM.Element, aureliaDependencyInjection.Lazy.of(ValidationController)]; - } sort() { this.errorsInternal.sort((a, b) => { if (a.targets[0] === b.targets[0]) { @@ -1800,28 +1822,29 @@ } } - exports.configure = configure; + exports.FluentEnsure = FluentEnsure; + exports.FluentRuleCustomizer = FluentRuleCustomizer; + exports.FluentRules = FluentRules; exports.GlobalValidationConfiguration = GlobalValidationConfiguration; - exports.getTargetDOMElement = getTargetDOMElement; - exports.getPropertyInfo = getPropertyInfo; + exports.MessageExpressionValidator = MessageExpressionValidator; exports.PropertyAccessorParser = PropertyAccessorParser; - exports.getAccessorExpression = getAccessorExpression; + exports.Rules = Rules; + exports.StandardValidator = StandardValidator; exports.ValidateEvent = ValidateEvent; exports.ValidateResult = ValidateResult; exports.ValidationController = ValidationController; exports.ValidationControllerFactory = ValidationControllerFactory; - exports.Validator = Validator; - exports.Rules = Rules; - exports.StandardValidator = StandardValidator; - exports.validationMessages = validationMessages; - exports.ValidationMessageProvider = ValidationMessageProvider; exports.ValidationMessageParser = ValidationMessageParser; - exports.MessageExpressionValidator = MessageExpressionValidator; - exports.FluentRuleCustomizer = FluentRuleCustomizer; - exports.FluentRules = FluentRules; - exports.FluentEnsure = FluentEnsure; + exports.ValidationMessageProvider = ValidationMessageProvider; exports.ValidationRules = ValidationRules; + exports.Validator = Validator; + exports.configure = configure; + exports.getAccessorExpression = getAccessorExpression; + exports.getPropertyInfo = getPropertyInfo; + exports.getTargetDOMElement = getTargetDOMElement; + exports.validationMessages = validationMessages; Object.defineProperty(exports, '__esModule', { value: true }); -}))); +})); +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/umd-es2015/aurelia-validation.js.map b/dist/umd-es2015/aurelia-validation.js.map new file mode 100644 index 00000000..0b8f6081 --- /dev/null +++ b/dist/umd-es2015/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"} \ No newline at end of file diff --git a/dist/umd/aurelia-validation.js b/dist/umd/aurelia-validation.js index cb1afa2b..f3840a07 100644 --- a/dist/umd/aurelia-validation.js +++ b/dist/umd/aurelia-validation.js @@ -1,8 +1,28 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('aurelia-binding'), require('aurelia-templating'), require('aurelia-logging'), require('aurelia-pal'), require('aurelia-dependency-injection'), require('aurelia-task-queue')) : - typeof define === 'function' && define.amd ? define(['exports', 'aurelia-binding', 'aurelia-templating', 'aurelia-logging', 'aurelia-pal', 'aurelia-dependency-injection', 'aurelia-task-queue'], factory) : - (factory((global.au = global.au || {}, global.au.validation = {}),global.au,global.au,global.au.LogManager,global.au,global.au,global.au)); -}(this, (function (exports,aureliaBinding,aureliaTemplating,LogManager,aureliaPal,aureliaDependencyInjection,aureliaTaskQueue) { 'use strict'; + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('aurelia-templating'), require('aurelia-binding'), require('aurelia-logging'), require('aurelia-pal'), require('aurelia-task-queue'), require('aurelia-dependency-injection')) : + typeof define === 'function' && define.amd ? define(['exports', 'aurelia-templating', 'aurelia-binding', 'aurelia-logging', 'aurelia-pal', 'aurelia-task-queue', 'aurelia-dependency-injection'], factory) : + (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.au = global.au || {}, global.au.validation = {}), global.au, global.au, global.au.LogManager, global.au, global.au, global.au)); +})(this, (function (exports, aureliaTemplating, aureliaBinding, LogManager, aureliaPal, aureliaTaskQueue, aureliaDependencyInjection) { 'use strict'; + + function _interopNamespace(e) { + if (e && e.__esModule) return e; + var n = Object.create(null); + if (e) { + Object.keys(e).forEach(function (k) { + if (k !== 'default') { + var d = Object.getOwnPropertyDescriptor(e, k); + Object.defineProperty(n, k, d.get ? d : { + enumerable: true, + get: function () { return e[k]; } + }); + } + }); + } + n["default"] = e; + return Object.freeze(n); + } + + var LogManager__namespace = /*#__PURE__*/_interopNamespace(LogManager); /** * Validates objects and properties. @@ -13,30 +33,32 @@ return Validator; }()); - /*! ***************************************************************************** - Copyright (c) Microsoft Corporation. All rights reserved. - Licensed under the Apache License, Version 2.0 (the "License"); you may not use - this file except in compliance with the License. You may obtain a copy of the - License at http://www.apache.org/licenses/LICENSE-2.0 + /****************************************************************************** + Copyright (c) Microsoft Corporation. - THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED - WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, - MERCHANTABLITY OR NON-INFRINGEMENT. + Permission to use, copy, modify, and/or distribute this software for any + purpose with or without fee is hereby granted. - See the Apache Version 2.0 License for specific language governing permissions - and limitations under the License. + THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH + REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY + AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, + INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM + LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR + OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR + PERFORMANCE OF THIS SOFTWARE. ***************************************************************************** */ /* global Reflect, Promise */ var extendStatics = function(d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; + function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; function __extends(d, b) { + if (typeof b !== "function" && b !== null) + throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); @@ -49,12 +71,14 @@ return c > 3 && r && Object.defineProperty(target, key, r), r; } - function __spreadArrays() { - for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length; - for (var r = Array(s), k = 0, i = 0; i < il; i++) - for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++) - r[k] = a[j]; - return r; + function __spreadArray(to, from, pack) { + if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) { + if (ar || !(i in from)) { + if (!ar) ar = Array.prototype.slice.call(from, 0, i); + ar[i] = from[i]; + } + } + return to.concat(ar || Array.prototype.slice.call(from)); } /** @@ -242,9 +266,9 @@ throw new Error('$parent is not permitted in validation message expressions.'); } if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) { - LogManager.getLogger('aurelia-validation') + LogManager__namespace.getLogger('aurelia-validation') // tslint:disable-next-line:max-line-length - .warn("Did you mean to use \"$" + access.name + "\" instead of \"" + access.name + "\" in this validation message template: \"" + this.originalMessage + "\"?"); + .warn("Did you mean to use \"$".concat(access.name, "\" instead of \"").concat(access.name, "\" in this validation message template: \"").concat(this.originalMessage, "\"?")); } }; return MessageExpressionValidator; @@ -439,6 +463,7 @@ /** * Validation triggers. */ + exports.validateTrigger = void 0; (function (validateTrigger) { /** * Manual validation. Use the controller's `validate()` and `reset()` methods @@ -525,10 +550,10 @@ if (element) { return element; } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } } - throw new Error("Unable to locate target element for \"" + binding.sourceExpression + "\"."); + throw new Error("Unable to locate target element for \"".concat(binding.sourceExpression, "\".")); } function getObject(expression, objectExpression, source) { @@ -537,7 +562,7 @@ return value; } // tslint:disable-next-line:max-line-length - throw new Error("The '" + objectExpression + "' part of '" + expression + "' evaluates to " + value + " instead of an object, null or undefined."); + throw new Error("The '".concat(objectExpression, "' part of '").concat(expression, "' evaluates to ").concat(value, " instead of an object, null or undefined.")); } /** * Retrieves the object and property name for the specified expression. @@ -564,7 +589,7 @@ propertyName = expression.key.evaluate(source); } else { - throw new Error("Expression '" + originalExpression + "' is not compatible with the validate binding-behavior."); + throw new Error("Expression '".concat(originalExpression, "' is not compatible with the validate binding-behavior.")); } if (object === null || object === undefined) { return null; @@ -593,19 +618,19 @@ || accessor instanceof aureliaBinding.AccessMember && accessor.object instanceof aureliaBinding.AccessScope) { return accessor.name; } - throw new Error("Invalid property expression: \"" + accessor + "\""); + throw new Error("Invalid property expression: \"".concat(accessor, "\"")); }; PropertyAccessorParser.inject = [aureliaBinding.Parser]; return PropertyAccessorParser; }()); function getAccessorExpression(fn) { /* tslint:disable:max-line-length */ - var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; + var classic = /^function\s*\([$_\w\d]+\)\s*\{(?:\s*"use strict";)?(?:[$_\s\w\d\/\*.['"\]+;\(\)]+)?\s*return\s+[$_\w\d]+\.([$_\w\d]+)\s*;?\s*\}$/; /* tslint:enable:max-line-length */ var arrow = /^\(?[$_\w\d]+\)?\s*=>\s*[$_\w\d]+\.([$_\w\d]+)$/; var match = classic.exec(fn) || arrow.exec(fn); if (match === null) { - throw new Error("Unable to parse accessor function:\n" + fn); + throw new Error("Unable to parse accessor function:\n".concat(fn)); } return match[1]; } @@ -1117,6 +1142,7 @@ binding.validateTarget = target; target.addEventListener(event, binding.focusLossHandler); if (hasChangeTrigger) { + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion var propertyName_1 = getPropertyInfo(binding.sourceExpression, binding.source).propertyName; binding.validationSubscription = controller.subscribe(function (event) { if (!binding.validatedOnce && event.type === 'validate') { @@ -1497,7 +1523,7 @@ get: function () { return this.fluentEnsure.rules; }, - enumerable: true, + enumerable: false, configurable: true }); /** @@ -1528,7 +1554,7 @@ for (var _i = 1; _i < arguments.length; _i++) { args[_i - 1] = arguments[_i]; } - return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArrays([name], args)); + return (_a = this.fluentRules).satisfiesRule.apply(_a, __spreadArray([name], args, false)); }; /** * Applies the "required" rule to the property. @@ -1668,14 +1694,14 @@ // standard rule? rule = this[name]; if (rule instanceof Function) { - return rule.call.apply(rule, __spreadArrays([this], args)); + return rule.call.apply(rule, __spreadArray([this], args, false)); } - throw new Error("Rule with name \"" + name + "\" does not exist."); + throw new Error("Rule with name \"".concat(name, "\" does not exist.")); } var config = rule.argsToConfig ? rule.argsToConfig.apply(rule, args) : undefined; return this.satisfies(function (value, obj) { var _a; - return (_a = rule.condition).call.apply(_a, __spreadArrays([_this, value, obj], args)); + return (_a = rule.condition).call.apply(_a, __spreadArray([_this, value, obj], args, false)); }, config) .withMessageKey(name); }; @@ -1943,37 +1969,38 @@ } } - exports.configure = configure; + exports.FluentEnsure = FluentEnsure; + exports.FluentRuleCustomizer = FluentRuleCustomizer; + exports.FluentRules = FluentRules; exports.GlobalValidationConfiguration = GlobalValidationConfiguration; - exports.getTargetDOMElement = getTargetDOMElement; - exports.getPropertyInfo = getPropertyInfo; + exports.MessageExpressionValidator = MessageExpressionValidator; exports.PropertyAccessorParser = PropertyAccessorParser; - exports.getAccessorExpression = getAccessorExpression; + exports.Rules = Rules; + exports.StandardValidator = StandardValidator; exports.ValidateBindingBehavior = ValidateBindingBehavior; + exports.ValidateEvent = ValidateEvent; exports.ValidateManuallyBindingBehavior = ValidateManuallyBindingBehavior; exports.ValidateOnBlurBindingBehavior = ValidateOnBlurBindingBehavior; exports.ValidateOnChangeBindingBehavior = ValidateOnChangeBindingBehavior; exports.ValidateOnChangeOrBlurBindingBehavior = ValidateOnChangeOrBlurBindingBehavior; - exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateOnChangeOrFocusoutBindingBehavior = ValidateOnChangeOrFocusoutBindingBehavior; - exports.ValidateEvent = ValidateEvent; + exports.ValidateOnFocusoutBindingBehavior = ValidateOnFocusoutBindingBehavior; exports.ValidateResult = ValidateResult; exports.ValidationController = ValidationController; exports.ValidationControllerFactory = ValidationControllerFactory; exports.ValidationErrorsCustomAttribute = ValidationErrorsCustomAttribute; + exports.ValidationMessageParser = ValidationMessageParser; + exports.ValidationMessageProvider = ValidationMessageProvider; exports.ValidationRendererCustomAttribute = ValidationRendererCustomAttribute; + exports.ValidationRules = ValidationRules; exports.Validator = Validator; - exports.Rules = Rules; - exports.StandardValidator = StandardValidator; + exports.configure = configure; + exports.getAccessorExpression = getAccessorExpression; + exports.getPropertyInfo = getPropertyInfo; + exports.getTargetDOMElement = getTargetDOMElement; exports.validationMessages = validationMessages; - exports.ValidationMessageProvider = ValidationMessageProvider; - exports.ValidationMessageParser = ValidationMessageParser; - exports.MessageExpressionValidator = MessageExpressionValidator; - exports.FluentRuleCustomizer = FluentRuleCustomizer; - exports.FluentRules = FluentRules; - exports.FluentEnsure = FluentEnsure; - exports.ValidationRules = ValidationRules; Object.defineProperty(exports, '__esModule', { value: true }); -}))); +})); +//# sourceMappingURL=aurelia-validation.js.map diff --git a/dist/umd/aurelia-validation.js.map b/dist/umd/aurelia-validation.js.map new file mode 100644 index 00000000..4dfe51de --- /dev/null +++ b/dist/umd/aurelia-validation.js.map @@ -0,0 +1 @@ +{"version":3,"file":"aurelia-validation.js","sources":["../../src/validator.ts","../../src/validate-result.ts","../../src/implementation/rules.ts","../../src/implementation/expression-visitor.ts","../../src/implementation/validation-message-parser.ts","../../src/implementation/validation-messages.ts","../../src/implementation/standard-validator.ts","../../src/validate-trigger.ts","../../src/config.ts","../../src/get-target-dom-element.ts","../../src/property-info.ts","../../src/util.ts","../../src/property-accessor-parser.ts","../../src/validate-event.ts","../../src/validation-controller.ts","../../src/validate-binding-behavior-base.ts","../../src/validate-binding-behavior.ts","../../src/validation-controller-factory.ts","../../src/validation-errors-custom-attribute.ts","../../src/validation-renderer-custom-attribute.ts","../../src/implementation/validation-rules.ts","../../src/aurelia-validation.ts"],"sourcesContent":["import { ValidateResult } from './validate-result';\r\n\r\n/**\r\n * Validates objects and properties.\r\n */\r\nexport abstract class Validator {\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateProperty(object: any, propertyName: string, rules?: any): Promise;\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the implementation should lookup the rules for the\r\n * specified object. This may not be possible for all implementations of this interface.\r\n */\r\n public abstract validateObject(object: any, rules?: any): Promise;\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public abstract ruleExists(rules: any, rule: any): boolean;\r\n}\r\n","/**\r\n * The result of validating an individual validation rule.\r\n */\r\nexport class ValidateResult {\r\n private static nextId = 0;\r\n\r\n /**\r\n * A number that uniquely identifies the result instance.\r\n */\r\n public id: number;\r\n\r\n /**\r\n * @param rule The rule associated with the result. Validator implementation specific.\r\n * @param object The object that was validated.\r\n * @param propertyName The name of the property that was validated.\r\n * @param error The error, if the result is a validation error.\r\n */\r\n constructor(\r\n public rule: any,\r\n public object: any,\r\n public propertyName: string | number | null,\r\n public valid: boolean,\r\n public message: string | null = null\r\n ) {\r\n this.id = ValidateResult.nextId++;\r\n }\r\n\r\n public toString() {\r\n return this.valid ? 'Valid.' : this.message;\r\n }\r\n}\r\n","import { Rule } from './rule';\r\n\r\n/**\r\n * Sets, unsets and retrieves rules on an object or constructor function.\r\n */\r\nexport class Rules {\r\n /**\r\n * The name of the property that stores the rules.\r\n */\r\n private static key = '__rules__';\r\n\r\n /**\r\n * Applies the rules to a target.\r\n */\r\n public static set(target: any, rules: Rule[][]): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n Object.defineProperty(\r\n target,\r\n Rules.key,\r\n { enumerable: false, configurable: false, writable: true, value: rules });\r\n }\r\n\r\n /**\r\n * Removes rules from a target.\r\n */\r\n public static unset(target: any): void {\r\n if (target instanceof Function) {\r\n target = target.prototype;\r\n }\r\n target[Rules.key] = null;\r\n }\r\n\r\n /**\r\n * Retrieves the target's rules.\r\n */\r\n public static get(target: any): Rule[][] | null {\r\n return target[Rules.key] || null;\r\n }\r\n}\r\n","import {\r\n Expression,\r\n ValueConverter,\r\n Conditional,\r\n AccessScope,\r\n AccessMember,\r\n AccessKeyed,\r\n CallMember,\r\n BindingBehavior,\r\n Binary,\r\n LiteralPrimitive,\r\n LiteralString\r\n} from 'aurelia-binding';\r\n\r\n// tslint:disable:no-empty\r\nexport class ExpressionVisitor {\r\n public visitChain(chain: any) {\r\n this.visitArgs(chain.expressions);\r\n }\r\n\r\n public visitBindingBehavior(behavior: BindingBehavior) {\r\n behavior.expression.accept(this);\r\n this.visitArgs(behavior.args);\r\n }\r\n\r\n public visitValueConverter(converter: ValueConverter) {\r\n converter.expression.accept(this);\r\n this.visitArgs(converter.args);\r\n }\r\n\r\n public visitAssign(assign: any) {\r\n assign.target.accept(this);\r\n assign.value.accept(this);\r\n }\r\n\r\n public visitConditional(conditional: Conditional) {\r\n conditional.condition.accept(this);\r\n conditional.yes.accept(this);\r\n conditional.no.accept(this);\r\n }\r\n\r\n public visitAccessThis(access: any) {\r\n access.ancestor = access.ancestor;\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n access.name = access.name;\r\n }\r\n\r\n public visitAccessMember(access: AccessMember) {\r\n access.object.accept(this);\r\n }\r\n\r\n public visitAccessKeyed(access: AccessKeyed) {\r\n access.object.accept(this);\r\n access.key.accept(this);\r\n }\r\n\r\n public visitCallScope(call: any) {\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallFunction(call: any) {\r\n call.func.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitCallMember(call: CallMember) {\r\n call.object.accept(this);\r\n this.visitArgs(call.args);\r\n }\r\n\r\n public visitPrefix(prefix: any) {\r\n prefix.expression.accept(this);\r\n }\r\n\r\n public visitBinary(binary: Binary) {\r\n binary.left.accept(this);\r\n binary.right.accept(this);\r\n }\r\n\r\n public visitLiteralPrimitive(literal: LiteralPrimitive) {\r\n literal.value = literal.value;\r\n }\r\n\r\n public visitLiteralArray(literal: any) {\r\n this.visitArgs(literal.elements);\r\n }\r\n\r\n public visitLiteralObject(literal: any) {\r\n this.visitArgs(literal.values);\r\n }\r\n\r\n public visitLiteralString(literal: LiteralString) {\r\n literal.value = literal.value;\r\n }\r\n\r\n private visitArgs(args: Expression[]) {\r\n for (let i = 0; i < args.length; i++) {\r\n args[i].accept(this);\r\n }\r\n }\r\n}\r\n","import {\r\n Expression,\r\n AccessScope,\r\n LiteralString,\r\n Binary,\r\n Conditional,\r\n LiteralPrimitive,\r\n CallMember\r\n} from 'aurelia-binding';\r\nimport { BindingLanguage } from 'aurelia-templating';\r\nimport * as LogManager from 'aurelia-logging';\r\nimport { ExpressionVisitor } from './expression-visitor';\r\n\r\nexport class ValidationMessageParser {\r\n public static inject = [BindingLanguage];\r\n\r\n private emptyStringExpression = new LiteralString('');\r\n private nullExpression = new LiteralPrimitive(null);\r\n private undefinedExpression = new LiteralPrimitive(undefined);\r\n private cache: { [message: string]: Expression } = {};\r\n\r\n constructor(private bindinqLanguage: BindingLanguage) { }\r\n\r\n public parse(message: string): Expression {\r\n if (this.cache[message] !== undefined) {\r\n return this.cache[message];\r\n }\r\n\r\n const parts: (Expression | string)[] | null = (this.bindinqLanguage as any).parseInterpolation(null, message);\r\n if (parts === null) {\r\n return new LiteralString(message);\r\n }\r\n let expression: Expression = new LiteralString(parts[0] as string);\r\n for (let i = 1; i < parts.length; i += 2) {\r\n expression = new Binary(\r\n '+',\r\n expression,\r\n new Binary(\r\n '+',\r\n this.coalesce(parts[i] as Expression),\r\n new LiteralString(parts[i + 1] as string)\r\n )\r\n );\r\n }\r\n\r\n MessageExpressionValidator.validate(expression, message);\r\n\r\n this.cache[message] = expression;\r\n\r\n return expression;\r\n }\r\n\r\n private coalesce(part: Expression): Expression {\r\n // part === null || part === undefined ? '' : part\r\n return new Conditional(\r\n new Binary(\r\n '||',\r\n new Binary('===', part, this.nullExpression),\r\n new Binary('===', part, this.undefinedExpression)\r\n ),\r\n this.emptyStringExpression,\r\n new CallMember(part, 'toString', [])\r\n );\r\n }\r\n}\r\n\r\nexport class MessageExpressionValidator extends ExpressionVisitor {\r\n public static validate(expression: Expression, originalMessage: string) {\r\n const visitor = new MessageExpressionValidator(originalMessage);\r\n expression.accept(visitor);\r\n }\r\n\r\n constructor(private originalMessage: string) {\r\n super();\r\n }\r\n\r\n public visitAccessScope(access: AccessScope) {\r\n if (access.ancestor !== 0) {\r\n throw new Error('$parent is not permitted in validation message expressions.');\r\n }\r\n if (['displayName', 'propertyName', 'value', 'object', 'config', 'getDisplayName'].indexOf(access.name) !== -1) {\r\n LogManager.getLogger('aurelia-validation')\r\n // tslint:disable-next-line:max-line-length\r\n .warn(`Did you mean to use \"$${access.name}\" instead of \"${access.name}\" in this validation message template: \"${this.originalMessage}\"?`);\r\n }\r\n }\r\n}\r\n","import { Expression } from 'aurelia-binding';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\n\r\nexport interface ValidationMessages {\r\n [key: string]: string;\r\n}\r\n\r\n/**\r\n * Dictionary of validation messages. [messageKey]: messageExpression\r\n */\r\nexport const validationMessages: ValidationMessages = {\r\n /**\r\n * The default validation message. Used with rules that have no standard message.\r\n */\r\n default: `\\${$displayName} is invalid.`,\r\n required: `\\${$displayName} is required.`,\r\n matches: `\\${$displayName} is not correctly formatted.`,\r\n email: `\\${$displayName} is not a valid email.`,\r\n minLength: `\\${$displayName} must be at least \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n maxLength: `\\${$displayName} cannot be longer than \\${$config.length} character\\${$config.length === 1 ? '' : 's'}.`,\r\n minItems: `\\${$displayName} must contain at least \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n maxItems: `\\${$displayName} cannot contain more than \\${$config.count} item\\${$config.count === 1 ? '' : 's'}.`,\r\n min: `\\${$displayName} must be at least \\${$config.constraint}.`,\r\n max: `\\${$displayName} must be at most \\${$config.constraint}.`,\r\n range: `\\${$displayName} must be between or equal to \\${$config.min} and \\${$config.max}.`,\r\n between: `\\${$displayName} must be between but not equal to \\${$config.min} and \\${$config.max}.`,\r\n equals: `\\${$displayName} must be \\${$config.expectedValue}.`,\r\n};\r\n\r\n/**\r\n * Retrieves validation messages and property display names.\r\n */\r\nexport class ValidationMessageProvider {\r\n public static inject = [ValidationMessageParser];\r\n\r\n constructor(public parser: ValidationMessageParser) { }\r\n\r\n /**\r\n * Returns a message binding expression that corresponds to the key.\r\n * @param key The message key.\r\n */\r\n public getMessage(key: string): Expression {\r\n let message: string;\r\n if (key in validationMessages) {\r\n message = validationMessages[key];\r\n } else {\r\n message = validationMessages['default'];\r\n }\r\n return this.parser.parse(message);\r\n }\r\n\r\n /**\r\n * Formulates a property display name using the property name and the configured\r\n * displayName (if provided).\r\n * Override this with your own custom logic.\r\n * @param propertyName The property name.\r\n */\r\n public getDisplayName(propertyName: string | number, displayName?: string | null | (() => string)): string {\r\n if (displayName !== null && displayName !== undefined) {\r\n return (displayName instanceof Function) ? displayName() : displayName as string;\r\n }\r\n\r\n // split on upper-case letters.\r\n const words = propertyName.toString().split(/(?=[A-Z])/).join(' ');\r\n // capitalize first letter.\r\n return words.charAt(0).toUpperCase() + words.slice(1);\r\n }\r\n}\r\n","import { Expression, LookupFunctions } from 'aurelia-binding';\r\nimport { ViewResources } from 'aurelia-templating';\r\nimport { Validator } from '../validator';\r\nimport { ValidateResult } from '../validate-result';\r\nimport { Rule } from './rule';\r\nimport { Rules } from './rules';\r\nimport { ValidationMessageProvider } from './validation-messages';\r\n\r\n/**\r\n * Validates.\r\n * Responsible for validating objects and properties.\r\n */\r\nexport class StandardValidator extends Validator {\r\n public static inject = [ValidationMessageProvider, ViewResources];\r\n\r\n private messageProvider: ValidationMessageProvider;\r\n private lookupFunctions: LookupFunctions;\r\n private getDisplayName: (propertyName: string) => string;\r\n\r\n constructor(messageProvider: ValidationMessageProvider, resources: ViewResources) {\r\n super();\r\n this.messageProvider = messageProvider;\r\n this.lookupFunctions = (resources as any).lookupFunctions;\r\n this.getDisplayName = messageProvider.getDisplayName.bind(messageProvider);\r\n }\r\n\r\n /**\r\n * Validates the specified property.\r\n * @param object The object to validate.\r\n * @param propertyName The name of the property to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateProperty(object: any, propertyName: string | number, rules?: any): Promise {\r\n return this.validate(object, propertyName, rules || null);\r\n }\r\n\r\n /**\r\n * Validates all rules for specified object and it's properties.\r\n * @param object The object to validate.\r\n * @param rules Optional. If unspecified, the rules will be looked up using the metadata\r\n * for the object created by ValidationRules....on(class/object)\r\n */\r\n public validateObject(object: any, rules?: any): Promise {\r\n return this.validate(object, null, rules || null);\r\n }\r\n\r\n /**\r\n * Determines whether a rule exists in a set of rules.\r\n * @param rules The rules to search.\r\n * @parem rule The rule to find.\r\n */\r\n public ruleExists(rules: Rule[][], rule: Rule): boolean {\r\n let i = rules.length;\r\n while (i--) {\r\n if (rules[i].indexOf(rule) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n private getMessage(rule: Rule, object: any, value: any): string {\r\n const expression: Expression = rule.message || this.messageProvider.getMessage(rule.messageKey);\r\n // tslint:disable-next-line:prefer-const\r\n let { name: propertyName, displayName } = rule.property;\r\n if (propertyName !== null) {\r\n displayName = this.messageProvider.getDisplayName(propertyName, displayName);\r\n }\r\n const overrideContext: any = {\r\n $displayName: displayName,\r\n $propertyName: propertyName,\r\n $value: value,\r\n $object: object,\r\n $config: rule.config,\r\n // returns the name of a given property, given just the property name (irrespective of the property's displayName)\r\n // split on capital letters, first letter ensured to be capitalized\r\n $getDisplayName: this.getDisplayName\r\n };\r\n return expression.evaluate(\r\n { bindingContext: object, overrideContext },\r\n this.lookupFunctions);\r\n }\r\n\r\n private validateRuleSequence(\r\n object: any,\r\n propertyName: string | number | null,\r\n ruleSequence: Rule[][],\r\n sequence: number,\r\n results: ValidateResult[]\r\n ): Promise {\r\n // are we validating all properties or a single property?\r\n const validateAllProperties = propertyName === null || propertyName === undefined;\r\n\r\n const rules = ruleSequence[sequence];\r\n let allValid = true;\r\n\r\n // validate each rule.\r\n const promises: Promise[] = [];\r\n for (let i = 0; i < rules.length; i++) {\r\n const rule = rules[i];\r\n\r\n // is the rule related to the property we're validating.\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n if (!validateAllProperties && rule.property.name != propertyName) {\r\n continue;\r\n }\r\n\r\n // is this a conditional rule? is the condition met?\r\n if (rule.when && !rule.when(object)) {\r\n continue;\r\n }\r\n\r\n // validate.\r\n const value = rule.property.name === null ? object : object[rule.property.name];\r\n let promiseOrBoolean = rule.condition(value, object);\r\n if (!(promiseOrBoolean instanceof Promise)) {\r\n promiseOrBoolean = Promise.resolve(promiseOrBoolean);\r\n }\r\n promises.push(promiseOrBoolean.then(valid => {\r\n const message = valid ? null : this.getMessage(rule, object, value);\r\n results.push(new ValidateResult(rule, object, rule.property.name, valid, message));\r\n allValid = allValid && valid;\r\n return valid;\r\n }));\r\n }\r\n\r\n return Promise.all(promises)\r\n .then(() => {\r\n sequence++;\r\n if (allValid && sequence < ruleSequence.length) {\r\n return this.validateRuleSequence(object, propertyName, ruleSequence, sequence, results);\r\n }\r\n return results;\r\n });\r\n }\r\n\r\n private validate(\r\n object: any,\r\n propertyName: string | number | null,\r\n rules: Rule[][] | null\r\n ): Promise {\r\n // rules specified?\r\n if (!rules) {\r\n // no. attempt to locate the rules.\r\n rules = Rules.get(object);\r\n }\r\n\r\n // any rules?\r\n if (!rules || rules.length === 0) {\r\n return Promise.resolve([]);\r\n }\r\n\r\n return this.validateRuleSequence(object, propertyName, rules, 0, []);\r\n }\r\n}\r\n","/**\r\n * Validation triggers.\r\n */\r\nexport enum validateTrigger {\r\n /**\r\n * Manual validation. Use the controller's `validate()` and `reset()` methods\r\n * to validate all bindings.\r\n */\r\n manual = 0, // 0x000\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event.\r\n */\r\n blur = 1, // 0x001\r\n\r\n /**\r\n * Validate the binding when it updates the model due to a change in the view.\r\n */\r\n change = 2, // 0x010\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrBlur = 3, // 0x011\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\n * Unlike \"blur\", this event bubbles.\r\n */\r\n focusout = 4, // 0x100\r\n\r\n /**\r\n * Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\n * when it updates the model due to a change in the view.\r\n */\r\n changeOrFocusout = 6, // 0x110\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { Validator } from './validator';\r\nimport { StandardValidator } from './implementation/standard-validator';\r\nimport { validateTrigger } from './validate-trigger';\r\n\r\nexport type ValidatorCtor = new (...args: any[]) => Validator;\r\n\r\n/**\r\n * Aurelia Validation Configuration API\r\n */\r\nexport class GlobalValidationConfiguration {\r\n public static DEFAULT_VALIDATION_TRIGGER = validateTrigger.blur;\r\n\r\n private validatorType: ValidatorCtor = StandardValidator;\r\n private validationTrigger = GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n\r\n /**\r\n * Use a custom Validator implementation.\r\n */\r\n public customValidator(type: ValidatorCtor) {\r\n this.validatorType = type;\r\n return this;\r\n }\r\n\r\n public defaultValidationTrigger(trigger: validateTrigger) {\r\n this.validationTrigger = trigger;\r\n return this;\r\n }\r\n\r\n public getDefaultValidationTrigger() {\r\n return this.validationTrigger;\r\n }\r\n\r\n /**\r\n * Applies the configuration.\r\n */\r\n public apply(container: Container) {\r\n const validator = container.get(this.validatorType);\r\n container.registerInstance(Validator, validator);\r\n container.registerInstance(GlobalValidationConfiguration, this);\r\n }\r\n}\r\n","import { DOM } from 'aurelia-pal';\r\n\r\n/**\r\n * Gets the DOM element associated with the data-binding. Most of the time it's\r\n * the binding.target but sometimes binding.target is an aurelia custom element,\r\n * or custom attribute which is a javascript \"class\" instance, so we need to use\r\n * the controller's container to retrieve the actual DOM element.\r\n */\r\nexport function getTargetDOMElement(binding: any, view: any): Element {\r\n const target = binding.target;\r\n // DOM element\r\n if (target instanceof Element) {\r\n return target;\r\n }\r\n // custom element or custom attribute\r\n // tslint:disable-next-line:prefer-const\r\n for (let i = 0, ii = view.controllers.length; i < ii; i++) {\r\n const controller: any = view.controllers[i];\r\n if (controller.viewModel === target) {\r\n const element = controller.container.get(DOM.Element);\r\n if (element) {\r\n return element;\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n }\r\n }\r\n throw new Error(`Unable to locate target element for \"${binding.sourceExpression}\".`);\r\n}\r\n","import {\r\n AccessMember,\r\n AccessScope,\r\n AccessKeyed,\r\n BindingBehavior,\r\n Expression,\r\n ValueConverter,\r\n Scope,\r\n getContextFor\r\n} from 'aurelia-binding';\r\n\r\nfunction getObject(expression: Expression, objectExpression: Expression, source: any): null | undefined | object {\r\n const value = objectExpression.evaluate(source, null as any);\r\n if (value === null || value === undefined || value instanceof Object) {\r\n return value;\r\n }\r\n // tslint:disable-next-line:max-line-length\r\n throw new Error(`The '${objectExpression}' part of '${expression}' evaluates to ${value} instead of an object, null or undefined.`);\r\n}\r\n\r\n/**\r\n * Retrieves the object and property name for the specified expression.\r\n * @param expression The expression\r\n * @param source The scope\r\n */\r\nexport function getPropertyInfo(\r\n expression: Expression,\r\n source: Scope\r\n): { object: object; propertyName: string; } | null {\r\n const originalExpression = expression;\r\n while (expression instanceof BindingBehavior || expression instanceof ValueConverter) {\r\n expression = expression.expression;\r\n }\r\n\r\n let object: null | undefined | object;\r\n let propertyName: string;\r\n if (expression instanceof AccessScope) {\r\n object = getContextFor(expression.name, source, expression.ancestor);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessMember) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.name;\r\n } else if (expression instanceof AccessKeyed) {\r\n object = getObject(originalExpression, expression.object, source);\r\n propertyName = expression.key.evaluate(source);\r\n } else {\r\n throw new Error(`Expression '${originalExpression}' is not compatible with the validate binding-behavior.`);\r\n }\r\n if (object === null || object === undefined) {\r\n return null;\r\n }\r\n return { object, propertyName };\r\n}\r\n","export function isString(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object String]';\r\n}\r\n\r\nexport function isNumber(value: any): boolean {\r\n return Object.prototype.toString.call(value) === '[object Number]';\r\n}\r\n","import {\r\n Parser,\r\n AccessMember,\r\n AccessScope\r\n} from 'aurelia-binding';\r\nimport { isString, isNumber } from './util';\r\n\r\nexport type PropertyAccessor = (object: TObject) => TValue;\r\n\r\nexport class PropertyAccessorParser {\r\n public static inject = [Parser];\r\n\r\n constructor(private parser: Parser) { }\r\n\r\n public parse(property: string | number | PropertyAccessor): string | number {\r\n if (isString(property) || isNumber(property)) {\r\n return property as string | number;\r\n }\r\n const accessorText = getAccessorExpression(property.toString());\r\n const accessor = this.parser.parse(accessorText);\r\n if (accessor instanceof AccessScope\r\n || accessor instanceof AccessMember && accessor.object instanceof AccessScope) {\r\n return accessor.name;\r\n }\r\n throw new Error(`Invalid property expression: \"${accessor}\"`);\r\n }\r\n}\r\n\r\nexport function getAccessorExpression(fn: string): string {\r\n /* tslint:disable:max-line-length */\r\n const classic = /^function\\s*\\([$_\\w\\d]+\\)\\s*\\{(?:\\s*\"use strict\";)?(?:[$_\\s\\w\\d\\/\\*.['\"\\]+;\\(\\)]+)?\\s*return\\s+[$_\\w\\d]+\\.([$_\\w\\d]+)\\s*;?\\s*\\}$/;\r\n /* tslint:enable:max-line-length */\r\n const arrow = /^\\(?[$_\\w\\d]+\\)?\\s*=>\\s*[$_\\w\\d]+\\.([$_\\w\\d]+)$/;\r\n const match = classic.exec(fn) || arrow.exec(fn);\r\n if (match === null) {\r\n throw new Error(`Unable to parse accessor function:\\n${fn}`);\r\n }\r\n return match[1];\r\n}\r\n","import { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\n\r\nexport class ValidateEvent {\r\n constructor(\r\n /**\r\n * The type of validate event. Either \"validate\" or \"reset\".\r\n */\r\n public readonly type: 'validate' | 'reset',\r\n\r\n /**\r\n * The controller's current array of errors. For an array containing both\r\n * failed rules and passed rules, use the \"results\" property.\r\n */\r\n public readonly errors: ValidateResult[],\r\n\r\n /**\r\n * The controller's current array of validate results. This\r\n * includes both passed rules and failed rules. For an array of only failed rules,\r\n * use the \"errors\" property.\r\n */\r\n public readonly results: ValidateResult[],\r\n\r\n /**\r\n * The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\n * the controller's validate/reset method was called with no instruction argument.\r\n */\r\n public readonly instruction: ValidateInstruction | null,\r\n\r\n /**\r\n * In events with type === \"validate\", this property will contain the result\r\n * of validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\n * to access the validate results specific to the call to \"validate\"\r\n * (as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\n * set of results/errors).\r\n */\r\n public readonly controllerValidateResult: ControllerValidateResult | null\r\n\r\n ) { }\r\n}\r\n","import { Binding, Expression } from 'aurelia-binding';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { Validator } from './validator';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidateInstruction } from './validate-instruction';\r\nimport { ControllerValidateResult } from './controller-validate-result';\r\nimport { PropertyAccessorParser, PropertyAccessor } from './property-accessor-parser';\r\nimport { ValidateEvent } from './validate-event';\r\n\r\n/**\r\n * Orchestrates validation.\r\n * Manages a set of bindings, renderers and objects.\r\n * Exposes the current list of validation results for binding purposes.\r\n */\r\nexport class ValidationController {\r\n public static inject = [Validator, PropertyAccessorParser, GlobalValidationConfiguration];\r\n\r\n // Registered bindings (via the validate binding behavior)\r\n private bindings = new Map();\r\n\r\n // Renderers that have been added to the controller instance.\r\n private renderers: ValidationRenderer[] = [];\r\n\r\n /**\r\n * Validation results that have been rendered by the controller.\r\n */\r\n private results: ValidateResult[] = [];\r\n\r\n /**\r\n * Validation errors that have been rendered by the controller.\r\n */\r\n public errors: ValidateResult[] = [];\r\n\r\n /**\r\n * Whether the controller is currently validating.\r\n */\r\n public validating = false;\r\n\r\n // Elements related to validation results that have been rendered.\r\n private elements = new Map();\r\n\r\n // Objects that have been added to the controller instance (entity-style validation).\r\n private objects = new Map();\r\n\r\n /**\r\n * The trigger that will invoke automatic validation of a property used in a binding.\r\n */\r\n public validateTrigger: validateTrigger;\r\n\r\n // Promise that resolves when validation has completed.\r\n private finishValidating: Promise = Promise.resolve();\r\n\r\n private eventCallbacks: ((event: ValidateEvent) => void)[] = [];\r\n\r\n constructor(\r\n private validator: Validator,\r\n private propertyParser: PropertyAccessorParser,\r\n config?: GlobalValidationConfiguration,\r\n ) {\r\n this.validateTrigger = config instanceof GlobalValidationConfiguration\r\n ? config.getDefaultValidationTrigger()\r\n : GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER;\r\n }\r\n\r\n /**\r\n * Subscribe to controller validate and reset events. These events occur when the\r\n * controller's \"validate\"\" and \"reset\" methods are called.\r\n * @param callback The callback to be invoked when the controller validates or resets.\r\n */\r\n public subscribe(callback: (event: ValidateEvent) => void) {\r\n this.eventCallbacks.push(callback);\r\n return {\r\n dispose: () => {\r\n const index = this.eventCallbacks.indexOf(callback);\r\n if (index === -1) {\r\n return;\r\n }\r\n this.eventCallbacks.splice(index, 1);\r\n }\r\n };\r\n }\r\n\r\n /**\r\n * Adds an object to the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n * @param rules Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\r\n */\r\n public addObject(object: any, rules?: any): void {\r\n this.objects.set(object, rules);\r\n }\r\n\r\n /**\r\n * Removes an object from the set of objects that should be validated when validate is called.\r\n * @param object The object.\r\n */\r\n public removeObject(object: any): void {\r\n this.objects.delete(object);\r\n this.processResultDelta(\r\n 'reset',\r\n this.results.filter(result => result.object === object),\r\n []);\r\n }\r\n\r\n /**\r\n * Adds and renders an error.\r\n */\r\n public addError(\r\n message: string,\r\n object: TObject,\r\n propertyName: string | PropertyAccessor | null = null\r\n ): ValidateResult {\r\n let resolvedPropertyName: string | number | null;\r\n if (propertyName === null) {\r\n resolvedPropertyName = propertyName as any;\r\n } else {\r\n resolvedPropertyName = this.propertyParser.parse(propertyName);\r\n }\r\n const result = new ValidateResult({ __manuallyAdded__: true }, object, resolvedPropertyName, false, message);\r\n this.processResultDelta('validate', [], [result]);\r\n return result;\r\n }\r\n\r\n /**\r\n * Removes and unrenders an error.\r\n */\r\n public removeError(result: ValidateResult) {\r\n if (this.results.indexOf(result) !== -1) {\r\n this.processResultDelta('reset', [result], []);\r\n }\r\n }\r\n\r\n /**\r\n * Adds a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public addRenderer(renderer: ValidationRenderer) {\r\n this.renderers.push(renderer);\r\n renderer.render({\r\n kind: 'validate',\r\n render: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] })),\r\n unrender: []\r\n });\r\n }\r\n\r\n /**\r\n * Removes a renderer.\r\n * @param renderer The renderer.\r\n */\r\n public removeRenderer(renderer: ValidationRenderer) {\r\n this.renderers.splice(this.renderers.indexOf(renderer), 1);\r\n renderer.render({\r\n kind: 'reset',\r\n render: [],\r\n unrender: this.results.map(result => ({ result, elements: this.elements.get(result) as Element[] }))\r\n });\r\n }\r\n\r\n /**\r\n * Registers a binding with the controller.\r\n * @param binding The binding instance.\r\n * @param target The DOM element.\r\n * @param rules (optional) rules associated with the binding. Validator implementation specific.\r\n */\r\n public registerBinding(binding: Binding, target: Element, rules?: any) {\r\n this.bindings.set(binding, { target, rules, propertyInfo: null });\r\n }\r\n\r\n /**\r\n * Unregisters a binding with the controller.\r\n * @param binding The binding instance.\r\n */\r\n public unregisterBinding(binding: Binding) {\r\n this.resetBinding(binding);\r\n this.bindings.delete(binding);\r\n }\r\n\r\n /**\r\n * Interprets the instruction and returns a predicate that will identify\r\n * relevant results in the list of rendered validation results.\r\n */\r\n private getInstructionPredicate(instruction?: ValidateInstruction): (result: ValidateResult) => boolean {\r\n if (instruction) {\r\n const { object, propertyName, rules } = instruction;\r\n let predicate: (result: ValidateResult) => boolean;\r\n if (instruction.propertyName) {\r\n predicate = x => x.object === object && x.propertyName === propertyName;\r\n } else {\r\n predicate = x => x.object === object;\r\n }\r\n if (rules) {\r\n return x => predicate(x) && this.validator.ruleExists(rules, x.rule);\r\n }\r\n return predicate;\r\n } else {\r\n return () => true;\r\n }\r\n }\r\n\r\n /**\r\n * Validates and renders results.\r\n * @param instruction Optional. Instructions on what to validate. If undefined, all\r\n * objects and bindings will be validated.\r\n */\r\n public validate(instruction?: ValidateInstruction): Promise {\r\n // Get a function that will process the validation instruction.\r\n let execute: () => Promise;\r\n if (instruction) {\r\n // tslint:disable-next-line:prefer-const\r\n let { object, propertyName, rules } = instruction;\r\n // if rules were not specified, check the object map.\r\n rules = rules || this.objects.get(object);\r\n // property specified?\r\n if (instruction.propertyName === undefined) {\r\n // validate the specified object.\r\n execute = () => this.validator.validateObject(object, rules);\r\n } else {\r\n // validate the specified property.\r\n execute = () => this.validator.validateProperty(object, propertyName, rules);\r\n }\r\n } else {\r\n // validate all objects and bindings.\r\n execute = () => {\r\n const promises: Promise[] = [];\r\n for (const [object, rules] of Array.from(this.objects)) {\r\n promises.push(this.validator.validateObject(object, rules));\r\n }\r\n for (const [binding, { rules }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo || this.objects.has(propertyInfo.object)) {\r\n continue;\r\n }\r\n promises.push(this.validator.validateProperty(propertyInfo.object, propertyInfo.propertyName, rules));\r\n }\r\n return Promise.all(promises).then(resultSets => resultSets.reduce((a, b) => a.concat(b), []));\r\n };\r\n }\r\n\r\n // Wait for any existing validation to finish, execute the instruction, render the results.\r\n this.validating = true;\r\n const returnPromise: Promise = this.finishValidating\r\n .then(execute)\r\n .then((newResults: ValidateResult[]) => {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('validate', oldResults, newResults);\r\n if (returnPromise === this.finishValidating) {\r\n this.validating = false;\r\n }\r\n const result: ControllerValidateResult = {\r\n instruction,\r\n valid: newResults.find(x => !x.valid) === undefined,\r\n results: newResults\r\n };\r\n this.invokeCallbacks(instruction, result);\r\n return result;\r\n })\r\n .catch(exception => {\r\n // recover, to enable subsequent calls to validate()\r\n this.validating = false;\r\n this.finishValidating = Promise.resolve();\r\n\r\n return Promise.reject(exception);\r\n });\r\n\r\n this.finishValidating = returnPromise;\r\n\r\n return returnPromise;\r\n }\r\n\r\n /**\r\n * Resets any rendered validation results (unrenders).\r\n * @param instruction Optional. Instructions on what to reset. If unspecified all rendered results\r\n * will be unrendered.\r\n */\r\n public reset(instruction?: ValidateInstruction) {\r\n const predicate = this.getInstructionPredicate(instruction);\r\n const oldResults = this.results.filter(predicate);\r\n this.processResultDelta('reset', oldResults, []);\r\n this.invokeCallbacks(instruction, null);\r\n }\r\n\r\n /**\r\n * Gets the elements associated with an object and propertyName (if any).\r\n */\r\n private getAssociatedElements({ object, propertyName }: ValidateResult): Element[] {\r\n const elements: Element[] = [];\r\n for (const [binding, { target }] of Array.from(this.bindings)) {\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (propertyInfo && propertyInfo.object === object && propertyInfo.propertyName === propertyName) {\r\n elements.push(target);\r\n }\r\n }\r\n return elements;\r\n }\r\n\r\n private processResultDelta(\r\n kind: 'validate' | 'reset',\r\n oldResults: ValidateResult[], newResults: ValidateResult[]\r\n ) {\r\n // prepare the instruction.\r\n const instruction: RenderInstruction = {\r\n kind,\r\n render: [],\r\n unrender: []\r\n };\r\n\r\n // create a shallow copy of newResults so we can mutate it without causing side-effects.\r\n newResults = newResults.slice(0);\r\n\r\n // create unrender instructions from the old results.\r\n for (const oldResult of oldResults) {\r\n // get the elements associated with the old result.\r\n const elements = this.elements.get(oldResult) as Element[];\r\n\r\n // remove the old result from the element map.\r\n this.elements.delete(oldResult);\r\n\r\n // create the unrender instruction.\r\n instruction.unrender.push({ result: oldResult, elements });\r\n\r\n // determine if there's a corresponding new result for the old result we are unrendering.\r\n const newResultIndex = newResults.findIndex(\r\n x => x.rule === oldResult.rule && x.object === oldResult.object && x.propertyName === oldResult.propertyName);\r\n if (newResultIndex === -1) {\r\n // no corresponding new result... simple remove.\r\n this.results.splice(this.results.indexOf(oldResult), 1);\r\n if (!oldResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n }\r\n } else {\r\n // there is a corresponding new result...\r\n const newResult = newResults.splice(newResultIndex, 1)[0];\r\n\r\n // get the elements that are associated with the new result.\r\n const elements = this.getAssociatedElements(newResult);\r\n this.elements.set(newResult, elements);\r\n\r\n // create a render instruction for the new result.\r\n instruction.render.push({ result: newResult, elements });\r\n\r\n // do an in-place replacement of the old result with the new result.\r\n // this ensures any repeats bound to this.results will not thrash.\r\n this.results.splice(this.results.indexOf(oldResult), 1, newResult);\r\n if (!oldResult.valid && newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1);\r\n } else if (!oldResult.valid && !newResult.valid) {\r\n this.errors.splice(this.errors.indexOf(oldResult), 1, newResult);\r\n } else if (!newResult.valid) {\r\n this.errors.push(newResult);\r\n }\r\n }\r\n }\r\n\r\n // create render instructions from the remaining new results.\r\n for (const result of newResults) {\r\n const elements = this.getAssociatedElements(result);\r\n instruction.render.push({ result, elements });\r\n this.elements.set(result, elements);\r\n this.results.push(result);\r\n if (!result.valid) {\r\n this.errors.push(result);\r\n }\r\n }\r\n\r\n // render.\r\n for (const renderer of this.renderers) {\r\n renderer.render(instruction);\r\n }\r\n }\r\n\r\n /**\r\n * Validates the property associated with a binding.\r\n */\r\n public validateBinding(binding: Binding) {\r\n if (!binding.isBound) {\r\n return;\r\n }\r\n const propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n let rules;\r\n const registeredBinding = this.bindings.get(binding);\r\n if (registeredBinding) {\r\n rules = registeredBinding.rules;\r\n registeredBinding.propertyInfo = propertyInfo;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.validate({ object, propertyName, rules });\r\n }\r\n\r\n /**\r\n * Resets the results for a property associated with a binding.\r\n */\r\n public resetBinding(binding: Binding) {\r\n const registeredBinding = this.bindings.get(binding);\r\n let propertyInfo = getPropertyInfo(binding.sourceExpression as Expression, binding.source);\r\n if (!propertyInfo && registeredBinding) {\r\n propertyInfo = registeredBinding.propertyInfo;\r\n }\r\n if (registeredBinding) {\r\n registeredBinding.propertyInfo = null;\r\n }\r\n if (!propertyInfo) {\r\n return;\r\n }\r\n const { object, propertyName } = propertyInfo;\r\n this.reset({ object, propertyName });\r\n }\r\n\r\n /**\r\n * Changes the controller's validateTrigger.\r\n * @param newTrigger The new validateTrigger\r\n */\r\n public changeTrigger(newTrigger: validateTrigger) {\r\n this.validateTrigger = newTrigger;\r\n const bindings = Array.from(this.bindings.keys());\r\n for (const binding of bindings) {\r\n const source = binding.source;\r\n binding.unbind();\r\n binding.bind(source);\r\n }\r\n }\r\n\r\n /**\r\n * Revalidates the controller's current set of errors.\r\n */\r\n public revalidateErrors() {\r\n for (const { object, propertyName, rule } of this.errors) {\r\n if (rule.__manuallyAdded__) {\r\n continue;\r\n }\r\n const rules = [[rule]];\r\n this.validate({ object, propertyName, rules });\r\n }\r\n }\r\n\r\n private invokeCallbacks(instruction: ValidateInstruction | undefined, result: ControllerValidateResult | null) {\r\n if (this.eventCallbacks.length === 0) {\r\n return;\r\n }\r\n const event = new ValidateEvent(\r\n result ? 'validate' : 'reset',\r\n this.errors,\r\n this.results,\r\n instruction || null,\r\n result);\r\n for (let i = 0; i < this.eventCallbacks.length; i++) {\r\n this.eventCallbacks[i](event);\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Information related to an \"& validate\" decorated binding.\r\n */\r\nexport interface BindingInfo {\r\n /**\r\n * The DOM element associated with the binding.\r\n */\r\n target: Element;\r\n\r\n /**\r\n * The rules associated with the binding via the validate binding behavior's rules parameter.\r\n */\r\n rules?: any;\r\n\r\n /**\r\n * The object and property associated with the binding.\r\n */\r\n propertyInfo: { object: any; propertyName: string; } | null;\r\n}\r\n","// tslint:disable:no-bitwise\r\nimport { Optional } from 'aurelia-dependency-injection';\r\nimport { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { getTargetDOMElement } from './get-target-dom-element';\r\nimport { getPropertyInfo } from './property-info';\r\nimport { Expression } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated.\r\n */\r\nexport abstract class ValidateBindingBehaviorBase {\r\n constructor(private taskQueue: TaskQueue) { }\r\n\r\n protected abstract getValidateTrigger(controller: ValidationController): validateTrigger;\r\n\r\n public bind(binding: any, source: any, rulesOrController?: ValidationController | any, rules?: any) {\r\n // identify the target element.\r\n const target = getTargetDOMElement(binding, source);\r\n\r\n // locate the controller.\r\n let controller: ValidationController;\r\n if (rulesOrController instanceof ValidationController) {\r\n controller = rulesOrController;\r\n } else {\r\n controller = source.container.get(Optional.of(ValidationController));\r\n rules = rulesOrController;\r\n }\r\n if (controller === null) {\r\n throw new Error(`A ValidationController has not been registered.`);\r\n }\r\n\r\n controller.registerBinding(binding, target, rules);\r\n binding.validationController = controller;\r\n const trigger = this.getValidateTrigger(controller);\r\n const event =\r\n (trigger & validateTrigger.blur) === validateTrigger.blur ? 'blur'\r\n : (trigger & validateTrigger.focusout) === validateTrigger.focusout ? 'focusout'\r\n : null;\r\n const hasChangeTrigger = (trigger & validateTrigger.change) === validateTrigger.change;\r\n binding.isDirty = !hasChangeTrigger;\r\n // validatedOnce is used to control whether controller should validate upon user input\r\n //\r\n // always true when validation trigger doesn't include \"blur\" event (blur/focusout)\r\n // else it will be set to true after (a) the first user input & loss of focus or (b) validation\r\n binding.validatedOnce = hasChangeTrigger && event === null;\r\n if (hasChangeTrigger) {\r\n binding.vbbUpdateSource = binding.updateSource;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateSource = function (value: any) {\r\n this.vbbUpdateSource(value);\r\n this.isDirty = true;\r\n if (this.validatedOnce) {\r\n this.validationController.validateBinding(this);\r\n }\r\n };\r\n }\r\n\r\n if (event !== null) {\r\n binding.focusLossHandler = () => {\r\n this.taskQueue.queueMicroTask(() => {\r\n if (binding.isDirty) {\r\n controller.validateBinding(binding);\r\n binding.validatedOnce = true;\r\n }\r\n });\r\n };\r\n binding.validationTriggerEvent = event;\r\n binding.validateTarget = target;\r\n target.addEventListener(event, binding.focusLossHandler);\r\n if (hasChangeTrigger) {\r\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\r\n const { propertyName } = getPropertyInfo(binding.sourceExpression as Expression, binding.source)!;\r\n binding.validationSubscription = controller.subscribe((event) => {\r\n if (!binding.validatedOnce && event.type === 'validate') {\r\n binding.validatedOnce = event.errors.findIndex((e) => e.propertyName === propertyName) > -1;\r\n }\r\n });\r\n }\r\n }\r\n\r\n if (trigger !== validateTrigger.manual) {\r\n binding.standardUpdateTarget = binding.updateTarget;\r\n // tslint:disable-next-line:only-arrow-functions\r\n // tslint:disable-next-line:space-before-function-paren\r\n binding.updateTarget = function (value: any) {\r\n this.standardUpdateTarget(value);\r\n this.validationController.resetBinding(this);\r\n };\r\n }\r\n }\r\n\r\n public unbind(binding: any) {\r\n // reset the binding to it's original state.\r\n if (binding.vbbUpdateSource) {\r\n binding.updateSource = binding.vbbUpdateSource;\r\n binding.vbbUpdateSource = null;\r\n }\r\n if (binding.standardUpdateTarget) {\r\n binding.updateTarget = binding.standardUpdateTarget;\r\n binding.standardUpdateTarget = null;\r\n }\r\n if (binding.focusLossHandler) {\r\n binding.validateTarget.removeEventListener(binding.validationTriggerEvent, binding.focusLossHandler);\r\n binding.focusLossHandler = null;\r\n binding.validateTarget = null;\r\n }\r\n if (binding.validationSubscription) {\r\n binding.validationSubscription.dispose();\r\n binding.validationSubscription = null;\r\n }\r\n binding.validationController.unregisterBinding(binding);\r\n binding.validationController = null;\r\n binding.isDirty = null;\r\n binding.validatedOnce = null;\r\n }\r\n}\r\n","import { TaskQueue } from 'aurelia-task-queue';\r\nimport { ValidationController } from './validation-controller';\r\nimport { validateTrigger } from './validate-trigger';\r\nimport { ValidateBindingBehaviorBase } from './validate-binding-behavior-base';\r\nimport { bindingBehavior } from 'aurelia-binding';\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the validate trigger specified by the associated controller's\r\n * validateTrigger property occurs.\r\n */\r\n@bindingBehavior('validate')\r\nexport class ValidateBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger(controller: ValidationController) {\r\n return controller.validateTrigger;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property will be validated\r\n * manually, by calling controller.validate(). No automatic validation\r\n * triggered by data-entry or blur will occur.\r\n */\r\n@bindingBehavior('validateManually')\r\nexport class ValidateManuallyBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.manual;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs.\r\n */\r\n@bindingBehavior('validateOnBlur')\r\nexport class ValidateOnBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.blur;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element is changed by the user, causing a change\r\n * to the model.\r\n */\r\n@bindingBehavior('validateOnChange')\r\nexport class ValidateOnChangeBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.change;\r\n }\r\n}\r\n\r\n/**\r\n * Binding behavior. Indicates the bound property should be validated\r\n * when the associated element blurs or is changed by the user, causing\r\n * a change to the model.\r\n */\r\n@bindingBehavior('validateOnChangeOrBlur')\r\nexport class ValidateOnChangeOrBlurBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrBlur;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnFocusout')\r\nexport class ValidateOnFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.focusout;\r\n }\r\n}\r\n\r\n@bindingBehavior('validateOnChangeOrFocusout')\r\nexport class ValidateOnChangeOrFocusoutBindingBehavior extends ValidateBindingBehaviorBase {\r\n public static inject = [TaskQueue];\r\n\r\n public getValidateTrigger() {\r\n return validateTrigger.changeOrFocusout;\r\n }\r\n}\r\n","import { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationController } from './validation-controller';\r\nimport { Validator } from './validator';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\n\r\n/**\r\n * Creates ValidationController instances.\r\n */\r\nexport class ValidationControllerFactory {\r\n public static get(container: Container) {\r\n return new ValidationControllerFactory(container);\r\n }\r\n\r\n constructor(private container: Container) { }\r\n\r\n /**\r\n * Creates a new controller instance.\r\n */\r\n public create(validator?: Validator) {\r\n if (!validator) {\r\n validator = this.container.get(Validator) as Validator;\r\n }\r\n const propertyParser = this.container.get(PropertyAccessorParser) as PropertyAccessorParser;\r\n const config = this.container.get(GlobalValidationConfiguration) as GlobalValidationConfiguration;\r\n return new ValidationController(validator, propertyParser, config);\r\n }\r\n\r\n /**\r\n * Creates a new controller and registers it in the current element's container so that it's\r\n * available to the validate binding behavior and renderers.\r\n */\r\n public createForCurrentScope(validator?: Validator) {\r\n const controller = this.create(validator);\r\n this.container.registerInstance(ValidationController, controller);\r\n return controller;\r\n }\r\n}\r\n\r\n(ValidationControllerFactory as any)['protocol:aurelia:resolver'] = true;\r\n","import { bindingMode } from 'aurelia-binding';\r\nimport { Lazy } from 'aurelia-dependency-injection';\r\nimport { customAttribute, bindable } from 'aurelia-templating';\r\nimport { ValidationController } from './validation-controller';\r\nimport { ValidateResult } from './validate-result';\r\nimport { ValidationRenderer, RenderInstruction } from './validation-renderer';\r\nimport { DOM } from 'aurelia-pal';\r\n\r\nexport interface RenderedError {\r\n error: ValidateResult;\r\n targets: Element[];\r\n}\r\n\r\n@customAttribute('validation-errors')\r\nexport class ValidationErrorsCustomAttribute implements ValidationRenderer {\r\n\r\n public static inject(): [typeof DOM.Element, Lazy] {\r\n return [DOM.Element, Lazy.of(ValidationController)];\r\n }\r\n\r\n @bindable({ defaultBindingMode: bindingMode.oneWay })\r\n public controller: ValidationController | null = null;\r\n\r\n @bindable({ primaryProperty: true, defaultBindingMode: bindingMode.twoWay })\r\n public errors: RenderedError[] = [];\r\n\r\n private errorsInternal: RenderedError[] = [];\r\n\r\n constructor(private boundaryElement: Element, private controllerAccessor: () => ValidationController) {\r\n }\r\n\r\n public sort() {\r\n this.errorsInternal.sort((a, b) => {\r\n if (a.targets[0] === b.targets[0]) {\r\n return 0;\r\n }\r\n // tslint:disable-next-line:no-bitwise\r\n return a.targets[0].compareDocumentPosition(b.targets[0]) & 2 ? 1 : -1;\r\n });\r\n }\r\n\r\n public interestingElements(elements: Element[]): Element[] {\r\n return elements.filter(e => this.boundaryElement.contains(e));\r\n }\r\n\r\n public render(instruction: RenderInstruction) {\r\n for (const { result } of instruction.unrender) {\r\n const index = this.errorsInternal.findIndex(x => x.error === result);\r\n if (index !== -1) {\r\n this.errorsInternal.splice(index, 1);\r\n }\r\n }\r\n\r\n for (const { result, elements } of instruction.render) {\r\n if (result.valid) {\r\n continue;\r\n }\r\n const targets = this.interestingElements(elements);\r\n if (targets.length) {\r\n this.errorsInternal.push({ error: result, targets });\r\n }\r\n }\r\n\r\n this.sort();\r\n this.errors = this.errorsInternal;\r\n }\r\n\r\n public bind() {\r\n if (!this.controller) {\r\n this.controller = this.controllerAccessor();\r\n }\r\n // this will call render() with the side-effect of updating this.errors\r\n this.controller.addRenderer(this);\r\n }\r\n\r\n public unbind() {\r\n if (this.controller) {\r\n this.controller.removeRenderer(this);\r\n }\r\n }\r\n}\r\n","import { ValidationController } from './validation-controller';\r\nimport { ValidationRenderer } from './validation-renderer';\r\nimport { customAttribute } from 'aurelia-templating';\r\n\r\n@customAttribute('validation-renderer')\r\nexport class ValidationRendererCustomAttribute {\r\n\r\n private container: any;\r\n private controller: ValidationController;\r\n private value: string;\r\n private renderer: ValidationRenderer;\r\n\r\n public created(view: any) {\r\n this.container = view.container;\r\n }\r\n\r\n public bind() {\r\n this.controller = this.container.get(ValidationController);\r\n this.renderer = this.container.get(this.value);\r\n this.controller.addRenderer(this.renderer);\r\n }\r\n\r\n public unbind() {\r\n this.controller.removeRenderer(this.renderer);\r\n this.controller = null as any;\r\n this.renderer = null as any;\r\n }\r\n}\r\n","import { Rule, RuleProperty, ValidationDisplayNameAccessor } from './rule';\r\nimport { ValidationMessageParser } from './validation-message-parser';\r\nimport { Rules } from './rules';\r\nimport { validationMessages } from './validation-messages';\r\nimport { PropertyAccessorParser, PropertyAccessor } from '../property-accessor-parser';\r\nimport { isString } from '../util';\r\n\r\n/**\r\n * Part of the fluent rule API. Enables customizing property rules.\r\n */\r\nexport class FluentRuleCustomizer {\r\n private rule: Rule;\r\n\r\n constructor(\r\n property: RuleProperty,\r\n condition: (value: TValue, object?: TObject) => boolean | Promise,\r\n config: object = {},\r\n private fluentEnsure: FluentEnsure,\r\n private fluentRules: FluentRules,\r\n private parsers: Parsers\r\n ) {\r\n this.rule = {\r\n property,\r\n condition,\r\n config,\r\n when: null,\r\n messageKey: 'default',\r\n message: null,\r\n sequence: fluentRules.sequence\r\n };\r\n this.fluentEnsure._addRule(this.rule);\r\n }\r\n\r\n /**\r\n * Validate subsequent rules after previously declared rules have\r\n * been validated successfully. Use to postpone validation of costly\r\n * rules until less expensive rules pass validation.\r\n */\r\n public then() {\r\n this.fluentRules.sequence++;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies the key to use when looking up the rule's validation message.\r\n */\r\n public withMessageKey(key: string) {\r\n this.rule.messageKey = key;\r\n this.rule.message = null;\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies rule's validation message.\r\n */\r\n public withMessage(message: string) {\r\n this.rule.messageKey = 'custom';\r\n this.rule.message = this.parsers.message.parse(message);\r\n return this;\r\n }\r\n\r\n /**\r\n * Specifies a condition that must be met before attempting to validate the rule.\r\n * @param condition A function that accepts the object as a parameter and returns true\r\n * or false whether the rule should be evaluated.\r\n */\r\n public when(condition: (object: TObject) => boolean) {\r\n this.rule.when = condition;\r\n return this;\r\n }\r\n\r\n /**\r\n * Tags the rule instance, enabling the rule to be found easily\r\n * using ValidationRules.taggedRules(rules, tag)\r\n */\r\n public tag(tag: string) {\r\n this.rule.tag = tag;\r\n return this;\r\n }\r\n\r\n ///// FluentEnsure APIs /////\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public ensure(subject: string | ((model: TObject) => TValue2)) {\r\n return this.fluentEnsure.ensure(subject);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject() {\r\n return this.fluentEnsure.ensureObject();\r\n }\r\n\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public get rules() {\r\n return this.fluentEnsure.rules;\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n return this.fluentEnsure.on(target);\r\n }\r\n\r\n ///////// FluentRules APIs /////////\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object: TObject) => boolean | Promise, config?: object) {\r\n return this.fluentRules.satisfies(condition, config);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]) {\r\n return this.fluentRules.satisfiesRule(name, ...args);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.fluentRules.required();\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.fluentRules.matches(regex);\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n return this.fluentRules.email();\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.fluentRules.minLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.fluentRules.maxLength(length);\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.fluentRules.minItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.fluentRules.maxItems(count);\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(value: number) {\r\n return this.fluentRules.min(value);\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(value: number) {\r\n return this.fluentRules.max(value);\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.fluentRules.range(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.fluentRules.between(min, max);\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.fluentRules.equals(expectedValue);\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables applying rules to properties and objects.\r\n */\r\nexport class FluentRules {\r\n public static customRules: {\r\n [name: string]: {\r\n condition: (value: any, object?: any, ...fluentArgs: any[]) => boolean | Promise;\r\n argsToConfig?: (...args: any[]) => any;\r\n }\r\n } = {};\r\n\r\n /**\r\n * Current rule sequence number. Used to postpone evaluation of rules until rules\r\n * with lower sequence number have successfully validated. The \"then\" fluent API method\r\n * manages this property, there's usually no need to set it directly.\r\n */\r\n public sequence = 0;\r\n\r\n constructor(\r\n private fluentEnsure: FluentEnsure,\r\n private parsers: Parsers,\r\n private property: RuleProperty\r\n ) { }\r\n\r\n /**\r\n * Sets the display name of the ensured property.\r\n */\r\n public displayName(name: string | ValidationDisplayNameAccessor | null) {\r\n this.property.displayName = name;\r\n return this;\r\n }\r\n\r\n /**\r\n * Applies an ad-hoc rule function to the ensured property or object.\r\n * @param condition The function to validate the rule.\r\n * Will be called with two arguments, the property value and the object.\r\n * Should return a boolean or a Promise that resolves to a boolean.\r\n */\r\n public satisfies(condition: (value: TValue, object?: TObject) => boolean | Promise, config?: object) {\r\n return new FluentRuleCustomizer(\r\n this.property, condition, config, this.fluentEnsure, this, this.parsers);\r\n }\r\n\r\n /**\r\n * Applies a rule by name.\r\n * @param name The name of the custom or standard rule.\r\n * @param args The rule's arguments.\r\n */\r\n public satisfiesRule(name: string, ...args: any[]): FluentRuleCustomizer {\r\n let rule = FluentRules.customRules[name];\r\n if (!rule) {\r\n // standard rule?\r\n rule = (this as any)[name];\r\n if (rule instanceof Function) {\r\n return rule.call(this, ...args);\r\n }\r\n throw new Error(`Rule with name \"${name}\" does not exist.`);\r\n }\r\n const config = rule.argsToConfig ? rule.argsToConfig(...args) : undefined;\r\n return this.satisfies((value, obj) => rule.condition.call(this, value, obj, ...args), config)\r\n .withMessageKey(name);\r\n }\r\n\r\n /**\r\n * Applies the \"required\" rule to the property.\r\n * The value cannot be null, undefined or whitespace.\r\n */\r\n public required() {\r\n return this.satisfies(\r\n value =>\r\n value !== null\r\n && value !== undefined\r\n && !(isString(value) && !/\\S/.test(value as any))\r\n ).withMessageKey('required');\r\n }\r\n\r\n /**\r\n * Applies the \"matches\" rule to the property.\r\n * Value must match the specified regular expression.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public matches(regex: RegExp) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || (value as any).length === 0 || regex.test(value as any))\r\n .withMessageKey('matches');\r\n }\r\n\r\n /**\r\n * Applies the \"email\" rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public email() {\r\n // regex from https://html.spec.whatwg.org/multipage/forms.html#valid-e-mail-address\r\n /* tslint:disable:max-line-length */\r\n return this.matches(/^[a-zA-Z0-9.!#$%&'*+\\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/)\r\n /* tslint:enable:max-line-length */\r\n .withMessageKey('email');\r\n }\r\n\r\n /**\r\n * Applies the \"minLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public minLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length >= length,\r\n { length })\r\n .withMessageKey('minLength');\r\n }\r\n\r\n /**\r\n * Applies the \"maxLength\" STRING validation rule to the property.\r\n * null, undefined and empty-string values are considered valid.\r\n */\r\n public maxLength(length: number) {\r\n return this.satisfies(\r\n (value: any) => value === null || value === undefined || value.length === 0 || value.length <= length,\r\n { length })\r\n .withMessageKey('maxLength');\r\n }\r\n\r\n /**\r\n * Applies the \"minItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public minItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length >= count, { count })\r\n .withMessageKey('minItems');\r\n }\r\n\r\n /**\r\n * Applies the \"maxItems\" ARRAY validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public maxItems(count: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value.length <= count, { count })\r\n .withMessageKey('maxItems');\r\n }\r\n\r\n /**\r\n * Applies the \"min\" NUMBER validation rule to the property.\r\n * Value must be greater than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public min(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value >= constraint, { constraint })\r\n .withMessageKey('min');\r\n }\r\n\r\n /**\r\n * Applies the \"max\" NUMBER validation rule to the property.\r\n * Value must be less than or equal to the specified constraint.\r\n * null and undefined values are considered valid.\r\n */\r\n public max(constraint: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || value <= constraint, { constraint })\r\n .withMessageKey('max');\r\n }\r\n\r\n /**\r\n * Applies the \"range\" NUMBER validation rule to the property.\r\n * Value must be between or equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public range(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value >= min && value <= max),\r\n { min, max })\r\n .withMessageKey('range');\r\n }\r\n\r\n /**\r\n * Applies the \"between\" NUMBER validation rule to the property.\r\n * Value must be between but not equal to the specified min and max.\r\n * null and undefined values are considered valid.\r\n */\r\n public between(min: number, max: number) {\r\n return this.satisfies((value: any) => value === null || value === undefined || (value > min && value < max),\r\n { min, max })\r\n .withMessageKey('between');\r\n }\r\n\r\n /**\r\n * Applies the \"equals\" validation rule to the property.\r\n * null and undefined values are considered valid.\r\n */\r\n public equals(expectedValue: TValue) {\r\n return this.satisfies(\r\n value => value === null || value === undefined || value as any === '' || value === expectedValue,\r\n { expectedValue })\r\n .withMessageKey('equals');\r\n }\r\n}\r\n\r\n/**\r\n * Part of the fluent rule API. Enables targeting properties and objects with rules.\r\n */\r\nexport class FluentEnsure {\r\n /**\r\n * Rules that have been defined using the fluent API.\r\n */\r\n public rules: Rule[][] = [];\r\n\r\n constructor(private parsers: Parsers) { }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor\r\n * function.\r\n */\r\n public ensure(property: string | number | PropertyAccessor): FluentRules {\r\n this.assertInitialized();\r\n const name = this.parsers.property.parse(property);\r\n const fluentRules = new FluentRules(\r\n this,\r\n this.parsers,\r\n { name, displayName: null });\r\n return this.mergeRules(fluentRules, name);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public ensureObject(): FluentRules {\r\n this.assertInitialized();\r\n const fluentRules = new FluentRules(\r\n this, this.parsers, { name: null, displayName: null });\r\n return this.mergeRules(fluentRules, null);\r\n }\r\n\r\n /**\r\n * Applies the rules to a class or object, making them discoverable by the StandardValidator.\r\n * @param target A class or object.\r\n */\r\n public on(target: any) {\r\n Rules.set(target, this.rules);\r\n return this;\r\n }\r\n\r\n /**\r\n * Adds a rule definition to the sequenced ruleset.\r\n * @internal\r\n */\r\n public _addRule(rule: Rule) {\r\n while (this.rules.length < rule.sequence + 1) {\r\n this.rules.push([]);\r\n }\r\n this.rules[rule.sequence].push(rule);\r\n }\r\n\r\n private assertInitialized() {\r\n if (this.parsers) {\r\n return;\r\n }\r\n throw new Error(`Did you forget to add \".plugin('aurelia-validation')\" to your main.js?`);\r\n }\r\n\r\n private mergeRules(fluentRules: FluentRules, propertyName: string | number | null) {\r\n // tslint:disable-next-line:triple-equals | Use loose equality for property keys\r\n const existingRules = this.rules.find(r => r.length > 0 && r[0].property.name == propertyName);\r\n if (existingRules) {\r\n const rule = existingRules[existingRules.length - 1];\r\n fluentRules.sequence = rule.sequence;\r\n if (rule.property.displayName !== null) {\r\n fluentRules = fluentRules.displayName(rule.property.displayName);\r\n }\r\n }\r\n return fluentRules;\r\n }\r\n}\r\n\r\n/**\r\n * Fluent rule definition API.\r\n */\r\nexport class ValidationRules {\r\n private static parsers: Parsers;\r\n\r\n public static initialize(messageParser: ValidationMessageParser, propertyParser: PropertyAccessorParser) {\r\n this.parsers = {\r\n message: messageParser,\r\n property: propertyParser\r\n };\r\n }\r\n\r\n /**\r\n * Target a property with validation rules.\r\n * @param property The property to target. Can be the property name or a property accessor function.\r\n */\r\n public static ensure(property: string | number | PropertyAccessor) {\r\n return new FluentEnsure(ValidationRules.parsers).ensure(property);\r\n }\r\n\r\n /**\r\n * Targets an object with validation rules.\r\n */\r\n public static ensureObject() {\r\n return new FluentEnsure(ValidationRules.parsers).ensureObject();\r\n }\r\n\r\n /**\r\n * Defines a custom rule.\r\n * @param name The name of the custom rule. Also serves as the message key.\r\n * @param condition The rule function.\r\n * @param message The message expression\r\n * @param argsToConfig A function that maps the rule's arguments to a \"config\"\r\n * object that can be used when evaluating the message expression.\r\n */\r\n public static customRule(\r\n name: string,\r\n condition: (value: any, object?: any, ...args: any[]) => boolean | Promise,\r\n message: string,\r\n argsToConfig?: (...args: any[]) => any\r\n ) {\r\n validationMessages[name] = message;\r\n FluentRules.customRules[name] = { condition, argsToConfig };\r\n }\r\n\r\n /**\r\n * Returns rules with the matching tag.\r\n * @param rules The rules to search.\r\n * @param tag The tag to search for.\r\n */\r\n public static taggedRules(rules: Rule[][], tag: string): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === tag));\r\n }\r\n\r\n /**\r\n * Returns rules that have no tag.\r\n * @param rules The rules to search.\r\n */\r\n public static untaggedRules(rules: Rule[][]): Rule[][] {\r\n return rules.map(x => x.filter(r => r.tag === undefined));\r\n }\r\n\r\n /**\r\n * Removes the rules from a class or object.\r\n * @param target A class or object.\r\n */\r\n public static off(target: any): void {\r\n Rules.unset(target);\r\n }\r\n}\r\n\r\nexport interface Parsers {\r\n message: ValidationMessageParser;\r\n property: PropertyAccessorParser;\r\n}\r\n","// Exports\r\n\r\nexport * from './config';\r\nexport * from './controller-validate-result';\r\nexport * from './get-target-dom-element';\r\nexport * from './property-info';\r\nexport * from './property-accessor-parser';\r\nexport * from './validate-binding-behavior';\r\nexport * from './validate-event';\r\nexport * from './validate-instruction';\r\nexport * from './validate-result';\r\nexport * from './validate-trigger';\r\nexport * from './validation-controller';\r\nexport * from './validation-controller-factory';\r\nexport * from './validation-errors-custom-attribute';\r\nexport * from './validation-renderer-custom-attribute';\r\nexport * from './validation-renderer';\r\nexport * from './validator';\r\n\r\nexport * from './implementation/rule';\r\nexport * from './implementation/rules';\r\nexport * from './implementation/standard-validator';\r\nexport * from './implementation/validation-messages';\r\nexport * from './implementation/validation-message-parser';\r\nexport * from './implementation/validation-rules';\r\n\r\n// Configuration\r\n\r\nimport { Container } from 'aurelia-dependency-injection';\r\nimport { GlobalValidationConfiguration } from './config';\r\nimport { ValidationMessageParser } from './implementation/validation-message-parser';\r\nimport { PropertyAccessorParser } from './property-accessor-parser';\r\nimport { ValidationRules } from './implementation/validation-rules';\r\nimport {\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior\r\n} from './validate-binding-behavior';\r\nimport { ValidationErrorsCustomAttribute } from './validation-errors-custom-attribute';\r\nimport { ValidationRendererCustomAttribute } from './validation-renderer-custom-attribute';\r\n\r\n/**\r\n * Configures the plugin.\r\n */\r\nexport function configure(\r\n // tslint:disable-next-line:ban-types\r\n frameworkConfig: { container: Container, globalResources?: (...resources: any[]) => any },\r\n callback?: (config: GlobalValidationConfiguration) => void\r\n) {\r\n // the fluent rule definition API needs the parser to translate messages\r\n // to interpolation expressions.\r\n const messageParser = frameworkConfig.container.get(ValidationMessageParser);\r\n const propertyParser = frameworkConfig.container.get(PropertyAccessorParser);\r\n ValidationRules.initialize(messageParser, propertyParser);\r\n\r\n // configure...\r\n const config = new GlobalValidationConfiguration();\r\n if (callback instanceof Function) {\r\n callback(config);\r\n }\r\n config.apply(frameworkConfig.container);\r\n\r\n // globalize the behaviors.\r\n if (frameworkConfig.globalResources) {\r\n frameworkConfig.globalResources(\r\n ValidateBindingBehavior,\r\n ValidateManuallyBindingBehavior,\r\n ValidateOnBlurBindingBehavior,\r\n ValidateOnFocusoutBindingBehavior,\r\n ValidateOnChangeBindingBehavior,\r\n ValidateOnChangeOrBlurBindingBehavior,\r\n ValidateOnChangeOrFocusoutBindingBehavior,\r\n ValidationErrorsCustomAttribute,\r\n ValidationRendererCustomAttribute);\r\n }\r\n}\r\n"],"names":["LiteralString","LiteralPrimitive","Binary","Conditional","CallMember","BindingLanguage","LogManager","ViewResources","validateTrigger","DOM","BindingBehavior","ValueConverter","AccessScope","getContextFor","AccessMember","AccessKeyed","Parser","Optional","TaskQueue","bindingBehavior","Lazy","bindable","bindingMode","customAttribute"],"mappings":"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"} \ No newline at end of file diff --git a/doc/CHANGELOG.md b/doc/CHANGELOG.md index d5cbef41..71633f0a 100644 --- a/doc/CHANGELOG.md +++ b/doc/CHANGELOG.md @@ -2,6 +2,13 @@ All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines. +## [2.0.0](https://github.com/aurelia/validation/compare/2.0.0-rc2...2.0.0) (2023-02-07) + + +### Bug Fixes + +* property accessor ignore instrumenter ([#578](https://github.com/aurelia/validation/issues/578)) ([b9ee21c](https://github.com/aurelia/validation/commit/b9ee21c7941a4628cf247573202c1750ec309548)), closes [#571](https://github.com/aurelia/validation/issues/571) + ## [2.0.0](https://github.com/aurelia/validation/compare/2.0.0-rc2...2.0.0) (2023-02-02) # [2.0.0-rc2](https://github.com/aurelia/validation/compare/2.0.0-rc1...2.0.0-rc2) (2020-06-12) diff --git a/doc/api.json b/doc/api.json index 366f9a08..37698569 100644 --- a/doc/api.json +++ b/doc/api.json @@ -1 +1 @@ -{"name":"aurelia-validation","children":[{"id":52,"name":"validateTrigger","kind":4,"kindString":"Enumeration","flags":{"isExported":true},"comment":{"shortText":"Validation triggers."},"children":[{"id":54,"name":"blur","kind":16,"kindString":"Enumeration member","flags":{"isExported":true},"comment":{"shortText":"Validate the binding when the binding's target element fires a DOM \"blur\" event."},"sources":[{"fileName":"aurelia-validation.d.ts","line":137,"character":12}],"defaultValue":"1"},{"id":55,"name":"change","kind":16,"kindString":"Enumeration member","flags":{"isExported":true},"comment":{"shortText":"Validate the binding when it updates the model due to a change in the view."},"sources":[{"fileName":"aurelia-validation.d.ts","line":141,"character":14}],"defaultValue":"2"},{"id":56,"name":"changeOrBlur","kind":16,"kindString":"Enumeration member","flags":{"isExported":true},"comment":{"shortText":"Validate the binding when the binding's target element fires a DOM \"blur\" event and\nwhen it updates the model due to a change in the view."},"sources":[{"fileName":"aurelia-validation.d.ts","line":146,"character":20}],"defaultValue":"3"},{"id":53,"name":"manual","kind":16,"kindString":"Enumeration member","flags":{"isExported":true},"comment":{"shortText":"Manual validation. Use the controller's `validate()` and `reset()` methods\nto validate all bindings."},"sources":[{"fileName":"aurelia-validation.d.ts","line":133,"character":14}],"defaultValue":"0"}],"groups":[{"title":"Enumeration members","kind":16,"children":[54,55,56,53]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":128,"character":31}]},{"id":760,"name":"AureliaValidationConfiguration","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Aurelia Validation Configuration API"},"children":[{"id":761,"name":"validatorType","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":1006,"character":29}],"type":{"type":"intrinsic","name":"any"}},{"id":769,"name":"apply","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":770,"name":"apply","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the configuration."},"parameters":[{"id":771,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1016,"character":13}]},{"id":762,"name":"customValidator","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":763,"name":"customValidator","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Use a custom Validator implementation."},"parameters":[{"id":764,"name":"type","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":765,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":766,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":767,"name":"new __type","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":768,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","name":"Validator","id":38}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1010,"character":31}]}],"groups":[{"title":"Constructors","kind":512,"children":[766]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1010,"character":29}]}}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1010,"character":23}]}],"groups":[{"title":"Properties","kind":1024,"children":[761]},{"title":"Methods","kind":2048,"children":[769,762]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1005,"character":47}]},{"id":350,"name":"ExpressionVisitor","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":405,"name":"visitArgs","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":578,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":375,"name":"visitAccessKeyed","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":376,"name":"visitAccessKeyed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":377,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessKeyed"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":568,"character":24}]},{"id":372,"name":"visitAccessMember","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":373,"name":"visitAccessMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":374,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessMember"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":567,"character":25}]},{"id":369,"name":"visitAccessScope","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":370,"name":"visitAccessScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":371,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessScope"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":566,"character":24}]},{"id":366,"name":"visitAccessThis","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":367,"name":"visitAccessThis","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":368,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessThis","id":803}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":565,"character":23}]},{"id":360,"name":"visitAssign","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":361,"name":"visitAssign","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":362,"name":"assign","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Assign","id":802}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":563,"character":19}]},{"id":390,"name":"visitBinary","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":391,"name":"visitBinary","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":392,"name":"binary","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binary"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":573,"character":19}]},{"id":354,"name":"visitBindingBehavior","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":355,"name":"visitBindingBehavior","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":356,"name":"behavior","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"BindingBehavior"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":561,"character":28}]},{"id":381,"name":"visitCallFunction","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":382,"name":"visitCallFunction","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":383,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallFunction","id":806}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":570,"character":25}]},{"id":384,"name":"visitCallMember","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":385,"name":"visitCallMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":386,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallMember"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":571,"character":23}]},{"id":378,"name":"visitCallScope","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":379,"name":"visitCallScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":380,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallScope","id":805}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":569,"character":22}]},{"id":351,"name":"visitChain","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":352,"name":"visitChain","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":353,"name":"chain","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Chain","id":801}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":560,"character":18}]},{"id":363,"name":"visitConditional","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":364,"name":"visitConditional","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":365,"name":"conditional","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Conditional"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":564,"character":24}]},{"id":396,"name":"visitLiteralArray","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":397,"name":"visitLiteralArray","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":398,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralArray","id":809}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":575,"character":25}]},{"id":399,"name":"visitLiteralObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":400,"name":"visitLiteralObject","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":401,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralObject","id":810}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":576,"character":26}]},{"id":393,"name":"visitLiteralPrimitive","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":394,"name":"visitLiteralPrimitive","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":395,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralPrimitive","id":808}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":574,"character":29}]},{"id":402,"name":"visitLiteralString","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":403,"name":"visitLiteralString","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":404,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralString","id":811}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":577,"character":26}]},{"id":387,"name":"visitPrefix","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":388,"name":"visitPrefix","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":389,"name":"prefix","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"PrefixNot","id":807}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":572,"character":19}]},{"id":357,"name":"visitValueConverter","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":358,"name":"visitValueConverter","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":359,"name":"converter","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValueConverter"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":562,"character":27}]}],"groups":[{"title":"Properties","kind":1024,"children":[405]},{"title":"Methods","kind":2048,"children":[375,372,369,366,360,390,354,381,384,378,351,363,396,399,393,402,387,357]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":559,"character":34}],"extendedBy":[{"type":"reference","name":"MessageExpressionValidator","id":420}]},{"id":701,"name":"FluentEnsure","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Part of the fluent rule API. Enables targeting properties and objects with rules."},"typeParameter":[{"id":702,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"children":[{"id":705,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":706,"name":"new FluentEnsure","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":707,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Parsers","id":757}}],"type":{"type":"reference","name":"FluentEnsure","id":701}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":914,"character":38}]},{"id":717,"name":"assertInitialized","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":931,"character":33}],"type":{"type":"intrinsic","name":"any"}},{"id":718,"name":"mergeRules","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":932,"character":26}],"type":{"type":"intrinsic","name":"any"}},{"id":703,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":910,"character":23}],"type":{"type":"intrinsic","name":"any"}},{"id":704,"name":"rules","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"Rules that have been defined using the fluent API."},"sources":[{"fileName":"aurelia-validation.d.ts","line":914,"character":13}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}}},{"id":708,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":709,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Target a property with validation rules."},"typeParameter":[{"id":710,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":711,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The property to target. Can be the property name or a property accessor\nfunction.\n"},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","name":"PropertyAccessor","id":789,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}]}}],"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":921,"character":14}]},{"id":712,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":713,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Targets an object with validation rules."},"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":925,"character":20}]},{"id":714,"name":"on","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":715,"name":"on","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the rules to a class or object, making them discoverable by the StandardValidator."},"parameters":[{"id":716,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"A class or object.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":930,"character":10}]}],"groups":[{"title":"Constructors","kind":512,"children":[705]},{"title":"Properties","kind":1024,"children":[717,718,703,704]},{"title":"Methods","kind":2048,"children":[708,712,714]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":909,"character":29}]},{"id":526,"name":"FluentRuleCustomizer","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Part of the fluent rule API. Enables customizing property rules."},"typeParameter":[{"id":527,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":528,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"children":[{"id":533,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":534,"name":"new FluentRuleCustomizer","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":535,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RuleProperty","id":317}},{"id":536,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":537,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":538,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":539,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}},{"id":540,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"TObject","id":527}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":680,"character":54}]}}},{"id":541,"name":"config","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"undefined"}]}},{"id":542,"name":"fluentEnsure","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"FluentEnsure","id":701,"typeArguments":[{"type":"typeParameter","name":"TObject"}]}},{"id":543,"name":"fluentRules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}},{"id":544,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Parsers","id":757}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":679,"character":21}]},{"id":529,"name":"fluentEnsure","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":676,"character":28}],"type":{"type":"intrinsic","name":"any"}},{"id":530,"name":"fluentRules","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":677,"character":27}],"type":{"type":"intrinsic","name":"any"}},{"id":531,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":678,"character":23}],"type":{"type":"intrinsic","name":"any"}},{"id":532,"name":"rule","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":679,"character":20}],"type":{"type":"intrinsic","name":"any"}},{"id":571,"name":"rules","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"Rules that have been defined using the fluent API."},"sources":[{"fileName":"aurelia-validation.d.ts","line":718,"character":22}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}}},{"id":616,"name":"between","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":617,"name":"between","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"between\" NUMBER validation rule to the property.\nValue must be between but not equal to the specified min and max.\nnull and undefined values are considered valid."},"parameters":[{"id":618,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":619,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":796,"character":15}]},{"id":592,"name":"email","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":593,"name":"email","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"email\" rule to the property.\nnull, undefined and empty-string values are considered valid."},"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":752,"character":13}]},{"id":562,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":563,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Target a property with validation rules."},"typeParameter":[{"id":564,"name":"TValue2","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":565,"name":"subject","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"id":566,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":567,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":568,"name":"model","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}}],"type":{"type":"typeParameter","name":"TValue2"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":710,"character":41}]}}]}}],"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":710,"character":14}]},{"id":569,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":570,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Targets an object with validation rules."},"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":714,"character":20}]},{"id":620,"name":"equals","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":621,"name":"equals","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"equals\" validation rule to the property.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":622,"name":"expectedValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":801,"character":14}]},{"id":589,"name":"matches","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":590,"name":"matches","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"matches\" rule to the property.\nValue must match the specified regular expression.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":591,"name":"regex","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RegExp"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":747,"character":15}]},{"id":609,"name":"max","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":610,"name":"max","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"max\" NUMBER validation rule to the property.\nValue must be less than or equal to the specified constraint.\nnull and undefined values are considered valid."},"parameters":[{"id":611,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":784,"character":11}]},{"id":603,"name":"maxItems","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":604,"name":"maxItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"maxItems\" ARRAY validation rule to the property.\nnull and undefined values are considered valid."},"parameters":[{"id":605,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":772,"character":16}]},{"id":597,"name":"maxLength","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":598,"name":"maxLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"maxLength\" STRING validation rule to the property.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":599,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":762,"character":17}]},{"id":606,"name":"min","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":607,"name":"min","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"min\" NUMBER validation rule to the property.\nValue must be greater than or equal to the specified constraint.\nnull and undefined values are considered valid."},"parameters":[{"id":608,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":778,"character":11}]},{"id":600,"name":"minItems","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":601,"name":"minItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"minItems\" ARRAY validation rule to the property.\nnull and undefined values are considered valid."},"parameters":[{"id":602,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":767,"character":16}]},{"id":594,"name":"minLength","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":595,"name":"minLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"minLength\" STRING validation rule to the property.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":596,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":757,"character":17}]},{"id":572,"name":"on","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":573,"name":"on","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the rules to a class or object, making them discoverable by the StandardValidator."},"parameters":[{"id":574,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"A class or object.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"FluentEnsure","id":701,"typeArguments":[{"type":"typeParameter","name":"TObject"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":723,"character":10}]},{"id":612,"name":"range","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":613,"name":"range","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"range\" NUMBER validation rule to the property.\nValue must be between or equal to the specified min and max.\nnull and undefined values are considered valid."},"parameters":[{"id":614,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":615,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":790,"character":13}]},{"id":587,"name":"required","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":588,"name":"required","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"required\" rule to the property.\nThe value cannot be null, undefined or whitespace."},"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":741,"character":16}]},{"id":575,"name":"satisfies","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":576,"name":"satisfies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies an ad-hoc rule function to the ensured property or object."},"parameters":[{"id":577,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to validate the rule.\nWill be called with two arguments, the property value and the object.\nShould return a boolean or a Promise that resolves to a boolean.\n"},"type":{"type":"reflection","declaration":{"id":578,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":579,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":580,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}},{"id":581,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":730,"character":28}]}}},{"id":582,"name":"config","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"intrinsic","name":"object"}]}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":730,"character":17}]},{"id":583,"name":"satisfiesRule","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":584,"name":"satisfiesRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies a rule by name."},"parameters":[{"id":585,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The name of the custom or standard rule."},"type":{"type":"intrinsic","name":"string"}},{"id":586,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"text":"The rule's arguments.\n"},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":736,"character":21}]},{"id":559,"name":"tag","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":560,"name":"tag","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Tags the rule instance, enabling the rule to be found easily\nusing ValidationRules.taggedRules(rules, tag)"},"parameters":[{"id":561,"name":"tag","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":705,"character":11}]},{"id":545,"name":"then","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":546,"name":"then","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validate subsequent rules after previously declared rules have\nbeen validated successfully. Use to postpone validation of costly\nrules until less expensive rules pass validation."},"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":686,"character":12}]},{"id":553,"name":"when","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":554,"name":"when","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Specifies a condition that must be met before attempting to validate the rule."},"parameters":[{"id":555,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"A function that accepts the object as a parameter and returns true\nor false whether the rule should be evaluated.\n"},"type":{"type":"reflection","declaration":{"id":556,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":557,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":558,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}}],"type":{"type":"intrinsic","name":"boolean"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":700,"character":23}]}}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":700,"character":12}]},{"id":550,"name":"withMessage","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":551,"name":"withMessage","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Specifies rule's validation message."},"parameters":[{"id":552,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":694,"character":19}]},{"id":547,"name":"withMessageKey","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":548,"name":"withMessageKey","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Specifies the key to use when looking up the rule's validation message."},"parameters":[{"id":549,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":690,"character":22}]}],"groups":[{"title":"Constructors","kind":512,"children":[533]},{"title":"Properties","kind":1024,"children":[529,530,531,532,571]},{"title":"Methods","kind":2048,"children":[616,592,562,569,620,589,609,603,597,606,600,594,572,612,587,575,583,559,545,553,550,547]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":675,"character":37}]},{"id":623,"name":"FluentRules","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Part of the fluent rule API. Enables applying rules to properties and objects."},"typeParameter":[{"id":624,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":625,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"children":[{"id":645,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":646,"name":"new FluentRules","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":647,"name":"fluentEnsure","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"FluentEnsure","id":701,"typeArguments":[{"type":"typeParameter","name":"TObject"}]}},{"id":648,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Parsers","id":757}},{"id":649,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RuleProperty","id":317}}],"type":{"type":"reference","name":"FluentRules","id":623}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":821,"character":25}]},{"id":626,"name":"fluentEnsure","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":807,"character":28}],"type":{"type":"intrinsic","name":"any"}},{"id":627,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":808,"character":23}],"type":{"type":"intrinsic","name":"any"}},{"id":628,"name":"property","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":809,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":644,"name":"sequence","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"Current rule sequence number. Used to postpone evaluation of rules until rules\nwith lower sequence number have successfully validated. The \"then\" fluent API method\nmanages this property, there's usually no need to set it directly."},"sources":[{"fileName":"aurelia-validation.d.ts","line":821,"character":16}],"type":{"type":"intrinsic","name":"number"}},{"id":629,"name":"customRules","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":810,"character":26}],"type":{"type":"reflection","declaration":{"id":630,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"indexSignature":{"id":631,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":632,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reflection","declaration":{"id":633,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":640,"name":"argsToConfig","kind":32,"kindString":"Variable","flags":{"isOptional":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":813,"character":28}],"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"reflection","declaration":{"id":641,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":642,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":643,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}]}},{"id":634,"name":"condition","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"aurelia-validation.d.ts","line":812,"character":25}],"type":{"type":"reflection","declaration":{"id":635,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":636,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":637,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":638,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":639,"name":"fluentArgs","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":812,"character":26}]}}}],"groups":[{"title":"Variables","kind":32,"children":[640,634]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":811,"character":27}]}}},"sources":[{"fileName":"aurelia-validation.d.ts","line":810,"character":27}]}}},{"id":694,"name":"between","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":695,"name":"between","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"between\" NUMBER validation rule to the property.\nValue must be between but not equal to the specified min and max.\nnull and undefined values are considered valid."},"parameters":[{"id":696,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":697,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":899,"character":15}]},{"id":650,"name":"displayName","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":651,"name":"displayName","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Sets the display name of the ensured property."},"parameters":[{"id":652,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","name":"ValidationDisplayNameAccessor","id":798},{"type":"intrinsic","name":"null"}]}}],"type":{"type":"intrinsic","name":"this"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":826,"character":19}]},{"id":670,"name":"email","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":671,"name":"email","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"email\" rule to the property.\nnull, undefined and empty-string values are considered valid."},"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":855,"character":13}]},{"id":698,"name":"equals","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":699,"name":"equals","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"equals\" validation rule to the property.\nnull and undefined values are considered valid."},"parameters":[{"id":700,"name":"expectedValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":904,"character":14}]},{"id":667,"name":"matches","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":668,"name":"matches","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"matches\" rule to the property.\nValue must match the specified regular expression.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":669,"name":"regex","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RegExp"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":850,"character":15}]},{"id":687,"name":"max","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":688,"name":"max","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"max\" NUMBER validation rule to the property.\nValue must be less than or equal to the specified constraint.\nnull and undefined values are considered valid."},"parameters":[{"id":689,"name":"constraint","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":887,"character":11}]},{"id":681,"name":"maxItems","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":682,"name":"maxItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"maxItems\" ARRAY validation rule to the property.\nnull and undefined values are considered valid."},"parameters":[{"id":683,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":875,"character":16}]},{"id":675,"name":"maxLength","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":676,"name":"maxLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"maxLength\" STRING validation rule to the property.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":677,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":865,"character":17}]},{"id":684,"name":"min","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":685,"name":"min","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"min\" NUMBER validation rule to the property.\nValue must be greater than or equal to the specified constraint.\nnull and undefined values are considered valid."},"parameters":[{"id":686,"name":"constraint","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":881,"character":11}]},{"id":678,"name":"minItems","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":679,"name":"minItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"minItems\" ARRAY validation rule to the property.\nnull and undefined values are considered valid."},"parameters":[{"id":680,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":870,"character":16}]},{"id":672,"name":"minLength","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":673,"name":"minLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"minLength\" STRING validation rule to the property.\nnull, undefined and empty-string values are considered valid."},"parameters":[{"id":674,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":860,"character":17}]},{"id":690,"name":"range","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":691,"name":"range","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"range\" NUMBER validation rule to the property.\nValue must be between or equal to the specified min and max.\nnull and undefined values are considered valid."},"parameters":[{"id":692,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":693,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":893,"character":13}]},{"id":665,"name":"required","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":666,"name":"required","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the \"required\" rule to the property.\nThe value cannot be null, undefined or whitespace."},"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":844,"character":16}]},{"id":653,"name":"satisfies","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":654,"name":"satisfies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies an ad-hoc rule function to the ensured property or object."},"parameters":[{"id":655,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The function to validate the rule.\nWill be called with two arguments, the property value and the object.\nShould return a boolean or a Promise that resolves to a boolean.\n"},"type":{"type":"reflection","declaration":{"id":656,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":657,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":658,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}},{"id":659,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"TObject","id":624}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":833,"character":28}]}}},{"id":660,"name":"config","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"intrinsic","name":"object"}]}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":833,"character":17}]},{"id":661,"name":"satisfiesRule","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":662,"name":"satisfiesRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies a rule by name."},"parameters":[{"id":663,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The name of the custom or standard rule."},"type":{"type":"intrinsic","name":"string"}},{"id":664,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"text":"The rule's arguments.\n"},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","name":"FluentRuleCustomizer","id":526,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":839,"character":21}]}],"groups":[{"title":"Constructors","kind":512,"children":[645]},{"title":"Properties","kind":1024,"children":[626,627,628,644,629]},{"title":"Methods","kind":2048,"children":[694,650,670,698,667,687,681,675,684,678,672,690,665,653,661]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":806,"character":28}]},{"id":420,"name":"MessageExpressionValidator","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":426,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":427,"name":"new MessageExpressionValidator","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":428,"name":"originalMessage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"MessageExpressionValidator","id":420}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":596,"character":79}]},{"id":421,"name":"originalMessage","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":595,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":453,"name":"visitAccessKeyed","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":454,"name":"visitAccessKeyed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":455,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessKeyed"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessKeyed","id":375}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":568,"character":24}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessKeyed","id":375}},{"id":450,"name":"visitAccessMember","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":451,"name":"visitAccessMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":452,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessMember"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessMember","id":372}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":567,"character":25}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessMember","id":372}},{"id":429,"name":"visitAccessScope","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":430,"name":"visitAccessScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":431,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessScope"}}],"type":{"type":"intrinsic","name":"void"},"overwrites":{"type":"reference","name":"ExpressionVisitor.visitAccessScope","id":369}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":598,"character":24}],"overwrites":{"type":"reference","name":"ExpressionVisitor.visitAccessScope","id":369}},{"id":447,"name":"visitAccessThis","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":448,"name":"visitAccessThis","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":449,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessThis","id":803}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessThis","id":366}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":565,"character":23}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessThis","id":366}},{"id":441,"name":"visitAssign","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":442,"name":"visitAssign","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":443,"name":"assign","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Assign","id":802}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAssign","id":360}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":563,"character":19}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAssign","id":360}},{"id":468,"name":"visitBinary","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":469,"name":"visitBinary","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":470,"name":"binary","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binary"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBinary","id":390}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":573,"character":19}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBinary","id":390}},{"id":435,"name":"visitBindingBehavior","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":436,"name":"visitBindingBehavior","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":437,"name":"behavior","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"BindingBehavior"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBindingBehavior","id":354}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":561,"character":28}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBindingBehavior","id":354}},{"id":459,"name":"visitCallFunction","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":460,"name":"visitCallFunction","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":461,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallFunction","id":806}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallFunction","id":381}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":570,"character":25}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallFunction","id":381}},{"id":462,"name":"visitCallMember","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":463,"name":"visitCallMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":464,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallMember"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallMember","id":384}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":571,"character":23}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallMember","id":384}},{"id":456,"name":"visitCallScope","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":457,"name":"visitCallScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":458,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallScope","id":805}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallScope","id":378}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":569,"character":22}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallScope","id":378}},{"id":432,"name":"visitChain","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":433,"name":"visitChain","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":434,"name":"chain","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Chain","id":801}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitChain","id":351}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":560,"character":18}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitChain","id":351}},{"id":444,"name":"visitConditional","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":445,"name":"visitConditional","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":446,"name":"conditional","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Conditional"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitConditional","id":363}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":564,"character":24}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitConditional","id":363}},{"id":474,"name":"visitLiteralArray","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":475,"name":"visitLiteralArray","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":476,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralArray","id":809}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralArray","id":396}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":575,"character":25}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralArray","id":396}},{"id":477,"name":"visitLiteralObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":478,"name":"visitLiteralObject","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":479,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralObject","id":810}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralObject","id":399}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":576,"character":26}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralObject","id":399}},{"id":471,"name":"visitLiteralPrimitive","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":472,"name":"visitLiteralPrimitive","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":473,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralPrimitive","id":808}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralPrimitive","id":393}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":574,"character":29}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralPrimitive","id":393}},{"id":480,"name":"visitLiteralString","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":481,"name":"visitLiteralString","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":482,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralString","id":811}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralString","id":402}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":577,"character":26}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralString","id":402}},{"id":465,"name":"visitPrefix","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":466,"name":"visitPrefix","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":467,"name":"prefix","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"PrefixNot","id":807}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitPrefix","id":387}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":572,"character":19}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitPrefix","id":387}},{"id":438,"name":"visitValueConverter","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":439,"name":"visitValueConverter","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":440,"name":"converter","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValueConverter"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitValueConverter","id":357}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":562,"character":27}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitValueConverter","id":357}},{"id":422,"name":"validate","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":423,"name":"validate","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":424,"name":"expression","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Expression"}},{"id":425,"name":"originalMessage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":596,"character":23}]}],"groups":[{"title":"Constructors","kind":512,"children":[426]},{"title":"Properties","kind":1024,"children":[421]},{"title":"Methods","kind":2048,"children":[453,450,429,447,441,468,435,459,462,456,432,444,474,477,471,480,465,438,422]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":594,"character":43}],"extendedTypes":[{"type":"reference","name":"ExpressionVisitor","id":350}]},{"id":27,"name":"PropertyAccessorParser","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":30,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":31,"name":"new PropertyAccessorParser","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":32,"name":"parser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Parser"}}],"type":{"type":"reference","name":"PropertyAccessorParser","id":27}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":92,"character":41}]},{"id":28,"name":"parser","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":91,"character":22}],"type":{"type":"intrinsic","name":"any"}},{"id":29,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":92,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"Parser"}}},{"id":33,"name":"parse","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":34,"name":"parse","kind":4096,"kindString":"Call signature","flags":{},"typeParameter":[{"id":35,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":36,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":37,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","name":"PropertyAccessor","id":789,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}]}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":94,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[30]},{"title":"Properties","kind":1024,"children":[28,29]},{"title":"Methods","kind":2048,"children":[33]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":90,"character":39}]},{"id":338,"name":"Rules","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Sets, unsets and retrieves rules on an object or constructor function."},"children":[{"id":339,"name":"key","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isPrivate":true,"isExported":true},"comment":{"shortText":"The name of the property that stores the rules."},"sources":[{"fileName":"aurelia-validation.d.ts","line":533,"character":26}],"type":{"type":"intrinsic","name":"any"}},{"id":347,"name":"get","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":348,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Retrieves the target's rules."},"parameters":[{"id":349,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"union","types":[{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}},{"type":"intrinsic","name":"null"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":545,"character":18}]},{"id":340,"name":"set","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":341,"name":"set","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Applies the rules to a target."},"parameters":[{"id":342,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":343,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":537,"character":18}]},{"id":344,"name":"unset","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":345,"name":"unset","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Removes rules from a target."},"parameters":[{"id":346,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":541,"character":20}]}],"groups":[{"title":"Properties","kind":1024,"children":[339]},{"title":"Methods","kind":2048,"children":[347,340,344]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":529,"character":22}]},{"id":501,"name":"StandardValidator","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Validates.\nResponsible for validating objects and properties."},"children":[{"id":506,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":507,"name":"new StandardValidator","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":508,"name":"messageProvider","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidationMessageProvider","id":486}},{"id":509,"name":"resources","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ViewResources"}}],"type":{"type":"reference","name":"StandardValidator","id":501}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":642,"character":31}]},{"id":505,"name":"getDisplayName","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":642,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":523,"name":"getMessage","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":665,"character":26}],"type":{"type":"intrinsic","name":"any"}},{"id":504,"name":"lookupFunctions","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":641,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":503,"name":"messageProvider","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":640,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":525,"name":"validate","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":667,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":524,"name":"validateRuleSequence","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":666,"character":36}],"type":{"type":"intrinsic","name":"any"}},{"id":502,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":639,"character":21}],"type":{"type":"array","elementType":{"type":"union","types":[{"type":"reference","name":"ViewResources"},{"type":"reference","name":"ValidationMessageProvider","id":486}]}}},{"id":519,"name":"ruleExists","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":520,"name":"ruleExists","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Determines whether a rule exists in a set of rules.","tags":[{"tag":"parem","text":"rule The rule to find.\n"}]},"parameters":[{"id":521,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The rules to search."},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}},{"id":522,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}],"type":{"type":"intrinsic","name":"boolean"},"overwrites":{"type":"reference","name":"Validator.ruleExists","id":48}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":664,"character":18}],"overwrites":{"type":"reference","name":"Validator.ruleExists","id":48}},{"id":515,"name":"validateObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":516,"name":"validateObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates all rules for specified object and it's properties."},"parameters":[{"id":517,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object to validate."},"type":{"type":"intrinsic","name":"any"}},{"id":518,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. If unspecified, the rules will be looked up using the metadata\nfor the object created by ValidationRules....on(class/object)\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Promise","typeArguments":[{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}]},"overwrites":{"type":"reference","name":"Validator.validateObject","id":44}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":658,"character":22}],"overwrites":{"type":"reference","name":"Validator.validateObject","id":44}},{"id":510,"name":"validateProperty","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":511,"name":"validateProperty","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates the specified property."},"parameters":[{"id":512,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object to validate."},"type":{"type":"intrinsic","name":"any"}},{"id":513,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The name of the property to validate."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":514,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. If unspecified, the rules will be looked up using the metadata\nfor the object created by ValidationRules....on(class/object)\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Promise","typeArguments":[{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}]},"overwrites":{"type":"reference","name":"Validator.validateProperty","id":39}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":651,"character":24}],"overwrites":{"type":"reference","name":"Validator.validateProperty","id":39}}],"groups":[{"title":"Constructors","kind":512,"children":[506]},{"title":"Properties","kind":1024,"children":[505,523,504,503,525,524,502]},{"title":"Methods","kind":2048,"children":[519,515,510]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":638,"character":34}],"extendedTypes":[{"type":"reference","name":"Validator","id":38}]},{"id":177,"name":"ValidateBindingBehavior","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Binding behavior. Indicates the bound property should be validated\nwhen the validate trigger specified by the associated controller's\nvalidateTrigger property occurs."},"children":[{"id":182,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":183,"name":"new ValidateBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":184,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateBindingBehavior","id":177},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}},{"id":178,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":406,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"TaskQueue"}}},{"id":185,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":186,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":187,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":188,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":189,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":190,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}},{"id":179,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":180,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":181,"name":"controller","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidationController","id":81}}],"type":{"type":"reference","name":"validateTrigger","id":52},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":407,"character":26}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}},{"id":191,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":192,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":193,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"groups":[{"title":"Constructors","kind":512,"children":[182]},{"title":"Properties","kind":1024,"children":[178]},{"title":"Methods","kind":2048,"children":[185,179,191]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":405,"character":40}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}]},{"id":160,"name":"ValidateBindingBehaviorBase","kind":128,"kindString":"Class","flags":{"isExported":true,"isAbstract":true},"comment":{"shortText":"Binding behavior. Indicates the bound property should be validated."},"children":[{"id":162,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":163,"name":"new ValidateBindingBehaviorBase","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":164,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}]},{"id":161,"name":"taskQueue","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":168,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":169,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":170,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":171,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":172,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":173,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}]},{"id":165,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true,"isProtected":true,"isAbstract":true},"signatures":[{"id":166,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":167,"name":"controller","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidationController","id":81}}],"type":{"type":"reference","name":"validateTrigger","id":52}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":392,"character":45}]},{"id":174,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":175,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":176,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}]}],"groups":[{"title":"Constructors","kind":512,"children":[162]},{"title":"Properties","kind":1024,"children":[161]},{"title":"Methods","kind":2048,"children":[168,165,174]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":389,"character":53}],"extendedBy":[{"type":"reference","name":"ValidateBindingBehavior","id":177},{"type":"reference","name":"ValidateManuallyBindingBehavior","id":194},{"type":"reference","name":"ValidateOnBlurBindingBehavior","id":210},{"type":"reference","name":"ValidateOnChangeBindingBehavior","id":226},{"type":"reference","name":"ValidateOnChangeOrBlurBindingBehavior","id":242}]},{"id":68,"name":"ValidateEvent","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":74,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":75,"name":"new ValidateEvent","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":76,"name":"type","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"stringLiteral","value":"validate"},{"type":"stringLiteral","value":"reset"}]}},{"id":77,"name":"errors","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":78,"name":"results","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":79,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"reference","name":"ValidateInstruction","id":19},{"type":"intrinsic","name":"null"}]}},{"id":80,"name":"controllerValidateResult","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"reference","name":"ControllerValidateResult","id":23},{"type":"intrinsic","name":"null"}]}}],"type":{"type":"reference","name":"ValidateEvent","id":68}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":221,"character":75}]},{"id":73,"name":"controllerValidateResult","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"In events with type === \"validate\", this property will contain the result\nof validating the instruction (see \"instruction\" property). Use the controllerValidateResult\nto access the validate results specific to the call to \"validate\"\n(as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\nset of results/errors)."},"sources":[{"fileName":"aurelia-validation.d.ts","line":221,"character":41}],"type":{"type":"union","types":[{"type":"reference","name":"ControllerValidateResult","id":23},{"type":"intrinsic","name":"null"}]}},{"id":70,"name":"errors","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The controller's current array of errors. For an array containing both\nfailed rules and passed rules, use the \"results\" property."},"sources":[{"fileName":"aurelia-validation.d.ts","line":202,"character":23}],"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":72,"name":"instruction","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The instruction passed to the \"validate\" or \"reset\" event. Will be null when\nthe controller's validate/reset method was called with no instruction argument."},"sources":[{"fileName":"aurelia-validation.d.ts","line":213,"character":28}],"type":{"type":"union","types":[{"type":"reference","name":"ValidateInstruction","id":19},{"type":"intrinsic","name":"null"}]}},{"id":71,"name":"results","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The controller's current array of validate results. This\nincludes both passed rules and failed rules. For an array of only failed rules,\nuse the \"errors\" property."},"sources":[{"fileName":"aurelia-validation.d.ts","line":208,"character":24}],"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":69,"name":"type","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The type of validate event. Either \"validate\" or \"reset\"."},"sources":[{"fileName":"aurelia-validation.d.ts","line":197,"character":21}],"type":{"type":"union","types":[{"type":"stringLiteral","value":"validate"},{"type":"stringLiteral","value":"reset"}]}}],"groups":[{"title":"Constructors","kind":512,"children":[74]},{"title":"Properties","kind":1024,"children":[73,70,72,71,69]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":193,"character":30}]},{"id":194,"name":"ValidateManuallyBindingBehavior","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Binding behavior. Indicates the bound property will be validated\nmanually, by calling controller.validate(). No automatic validation\ntriggered by data-entry or blur will occur."},"children":[{"id":198,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":199,"name":"new ValidateManuallyBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":200,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateManuallyBindingBehavior","id":194},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}},{"id":195,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":415,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"TaskQueue"}}},{"id":201,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":202,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":203,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":204,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":205,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":206,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}},{"id":196,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":197,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","name":"validateTrigger","id":52},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":416,"character":26}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}},{"id":207,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":208,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":209,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"groups":[{"title":"Constructors","kind":512,"children":[198]},{"title":"Properties","kind":1024,"children":[195]},{"title":"Methods","kind":2048,"children":[201,196,207]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":414,"character":48}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}]},{"id":210,"name":"ValidateOnBlurBindingBehavior","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Binding behavior. Indicates the bound property should be validated\nwhen the associated element blurs."},"children":[{"id":214,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":215,"name":"new ValidateOnBlurBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":216,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateOnBlurBindingBehavior","id":210},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}},{"id":211,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":423,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"TaskQueue"}}},{"id":217,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":218,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":219,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":220,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":221,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":222,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}},{"id":212,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":213,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","name":"validateTrigger","id":52},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":424,"character":26}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}},{"id":223,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":224,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":225,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"groups":[{"title":"Constructors","kind":512,"children":[214]},{"title":"Properties","kind":1024,"children":[211]},{"title":"Methods","kind":2048,"children":[217,212,223]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":422,"character":46}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}]},{"id":226,"name":"ValidateOnChangeBindingBehavior","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Binding behavior. Indicates the bound property should be validated\nwhen the associated element is changed by the user, causing a change\nto the model."},"children":[{"id":230,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":231,"name":"new ValidateOnChangeBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":232,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateOnChangeBindingBehavior","id":226},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}},{"id":227,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":432,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"TaskQueue"}}},{"id":233,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":234,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":235,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":236,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":237,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":238,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}},{"id":228,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":229,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","name":"validateTrigger","id":52},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":433,"character":26}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}},{"id":239,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":240,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":241,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"groups":[{"title":"Constructors","kind":512,"children":[230]},{"title":"Properties","kind":1024,"children":[227]},{"title":"Methods","kind":2048,"children":[233,228,239]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":431,"character":48}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}]},{"id":242,"name":"ValidateOnChangeOrBlurBindingBehavior","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Binding behavior. Indicates the bound property should be validated\nwhen the associated element blurs or is changed by the user, causing\na change to the model."},"children":[{"id":246,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":247,"name":"new ValidateOnChangeOrBlurBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":248,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue"}}],"type":{"type":"reference","name":"ValidateOnChangeOrBlurBindingBehavior","id":242},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":390,"character":26}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.__constructor","id":162}},{"id":243,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":441,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"TaskQueue"}}},{"id":249,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":250,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":251,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":252,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":253,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"any"}]}},{"id":254,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":393,"character":12}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind","id":168}},{"id":244,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":245,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","name":"validateTrigger","id":52},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":442,"character":26}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger","id":165}},{"id":255,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":256,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":257,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":394,"character":14}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind","id":174}}],"groups":[{"title":"Constructors","kind":512,"children":[246]},{"title":"Properties","kind":1024,"children":[243]},{"title":"Methods","kind":2048,"children":[249,244,255]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":440,"character":54}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase","id":160}]},{"id":2,"name":"ValidateResult","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"The result of validating an individual validation rule."},"children":[{"id":10,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"comment":{},"signatures":[{"id":11,"name":"new ValidateResult","kind":16384,"kindString":"Constructor signature","flags":{},"comment":{},"parameters":[{"id":12,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The rule associated with the result. Validator implementation specific."},"type":{"type":"intrinsic","name":"any"}},{"id":13,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The object that was validated."},"type":{"type":"intrinsic","name":"any"}},{"id":14,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"shortText":"The name of the property that was validated."},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"null"}]}},{"id":15,"name":"valid","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"boolean"}},{"id":16,"name":"message","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"null"}]}}],"type":{"type":"reference","name":"ValidateResult","id":2}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":20,"character":19}]},{"id":9,"name":"id","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"A number that uniquely identifies the result instance."},"sources":[{"fileName":"aurelia-validation.d.ts","line":20,"character":10}],"type":{"type":"intrinsic","name":"number"}},{"id":7,"name":"message","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":15,"character":15}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"null"}]}},{"id":4,"name":"object","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":12,"character":14}],"type":{"type":"intrinsic","name":"any"}},{"id":5,"name":"propertyName","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":13,"character":20}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"null"}]}},{"id":3,"name":"rule","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":11,"character":12}],"type":{"type":"intrinsic","name":"any"}},{"id":6,"name":"valid","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":14,"character":13}],"type":{"type":"intrinsic","name":"boolean"}},{"id":8,"name":"nextId","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":16,"character":29}],"type":{"type":"intrinsic","name":"any"}},{"id":17,"name":"toString","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":18,"name":"toString","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"null"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":28,"character":16}]}],"groups":[{"title":"Constructors","kind":512,"children":[10]},{"title":"Properties","kind":1024,"children":[9,7,4,5,3,6,8]},{"title":"Methods","kind":2048,"children":[17]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":10,"character":31}]},{"id":81,"name":"ValidationController","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Orchestrates validation.\nManages a set of bindings, renderers and objects.\nExposes the current list of validation results for binding purposes."},"children":[{"id":95,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":96,"name":"new ValidationController","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":97,"name":"validator","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Validator","id":38}},{"id":98,"name":"propertyParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"PropertyAccessorParser","id":27}}],"type":{"type":"reference","name":"ValidationController","id":81}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":291,"character":31}]},{"id":85,"name":"bindings","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":270,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":90,"name":"elements","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":284,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":88,"name":"errors","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"Validation errors that have been rendered by the controller."},"sources":[{"fileName":"aurelia-validation.d.ts","line":279,"character":14}],"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":94,"name":"eventCallbacks","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":291,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":93,"name":"finishValidating","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":290,"character":32}],"type":{"type":"intrinsic","name":"any"}},{"id":146,"name":"getAssociatedElements","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"comment":{"shortText":"Gets the elements associated with an object and propertyName (if any)."},"sources":[{"fileName":"aurelia-validation.d.ts","line":362,"character":37}],"type":{"type":"intrinsic","name":"any"}},{"id":139,"name":"getInstructionPredicate","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"comment":{"shortText":"Interprets the instruction and returns a predicate that will identify\nrelevant results in the list of rendered validation results."},"sources":[{"fileName":"aurelia-validation.d.ts","line":346,"character":39}],"type":{"type":"intrinsic","name":"any"}},{"id":159,"name":"invokeCallbacks","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":381,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":91,"name":"objects","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":285,"character":23}],"type":{"type":"intrinsic","name":"any"}},{"id":147,"name":"processResultDelta","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":363,"character":34}],"type":{"type":"intrinsic","name":"any"}},{"id":83,"name":"propertyParser","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":268,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":86,"name":"renderers","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":271,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":87,"name":"results","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"comment":{"shortText":"Validation results that have been rendered by the controller."},"sources":[{"fileName":"aurelia-validation.d.ts","line":275,"character":23}],"type":{"type":"intrinsic","name":"any"}},{"id":92,"name":"validateTrigger","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The trigger that will invoke automatic validation of a property used in a binding."},"sources":[{"fileName":"aurelia-validation.d.ts","line":289,"character":23}],"type":{"type":"reference","name":"validateTrigger","id":52}},{"id":89,"name":"validating","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":" Whether the controller is currently validating."},"sources":[{"fileName":"aurelia-validation.d.ts","line":283,"character":18}],"type":{"type":"intrinsic","name":"boolean"}},{"id":82,"name":"validator","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":267,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":84,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":269,"character":21}],"type":{"type":"array","elementType":{"type":"union","types":[{"type":"reference","name":"PropertyAccessorParser","id":27},{"type":"reference","name":"Validator","id":38}]}}},{"id":116,"name":"addError","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":117,"name":"addError","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Adds and renders an error."},"typeParameter":[{"id":118,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":119,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}},{"id":120,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}},{"id":121,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","name":"PropertyAccessor","id":789,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"string"}]},{"type":"intrinsic","name":"null"}]}}],"type":{"type":"reference","name":"ValidateResult","id":2}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":315,"character":16}]},{"id":109,"name":"addObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":110,"name":"addObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Adds an object to the set of objects that should be validated when validate is called."},"parameters":[{"id":111,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object."},"type":{"type":"intrinsic","name":"any"}},{"id":112,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":306,"character":17}]},{"id":125,"name":"addRenderer","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":126,"name":"addRenderer","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Adds a renderer."},"parameters":[{"id":127,"name":"renderer","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The renderer.\n"},"type":{"type":"reference","name":"ValidationRenderer","id":64}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":324,"character":19}]},{"id":154,"name":"changeTrigger","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":155,"name":"changeTrigger","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Changes the controller's validateTrigger."},"parameters":[{"id":156,"name":"newTrigger","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The new validateTrigger\n"},"type":{"type":"reference","name":"validateTrigger","id":52}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":376,"character":21}]},{"id":131,"name":"registerBinding","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":132,"name":"registerBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Registers a binding with the controller."},"parameters":[{"id":133,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The binding instance."},"type":{"type":"reference","name":"Binding"}},{"id":134,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The DOM element."},"type":{"type":"reference","name":"Element"}},{"id":135,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"(optional) rules associated with the binding. Validator implementation specific.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":336,"character":23}]},{"id":122,"name":"removeError","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":123,"name":"removeError","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Removes and unrenders an error."},"parameters":[{"id":124,"name":"result","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidateResult","id":2}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":319,"character":19}]},{"id":113,"name":"removeObject","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":114,"name":"removeObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Removes an object from the set of objects that should be validated when validate is called."},"parameters":[{"id":115,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":311,"character":20}]},{"id":128,"name":"removeRenderer","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":129,"name":"removeRenderer","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Removes a renderer."},"parameters":[{"id":130,"name":"renderer","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The renderer.\n"},"type":{"type":"reference","name":"ValidationRenderer","id":64}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":329,"character":22}]},{"id":143,"name":"reset","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":144,"name":"reset","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resets any rendered validation results (unrenders)."},"parameters":[{"id":145,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. Instructions on what to reset. If unspecified all rendered results\nwill be unrendered.\n"},"type":{"type":"reference","name":"ValidateInstruction","id":19}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":358,"character":13}]},{"id":151,"name":"resetBinding","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":152,"name":"resetBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Resets the results for a property associated with a binding."},"parameters":[{"id":153,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binding"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":371,"character":20}]},{"id":157,"name":"revalidateErrors","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":158,"name":"revalidateErrors","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Revalidates the controller's current set of errors."},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":380,"character":24}]},{"id":99,"name":"subscribe","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":100,"name":"subscribe","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Subscribe to controller validate and reset events. These events occur when the\ncontroller's \"validate\"\" and \"reset\" methods are called."},"parameters":[{"id":101,"name":"callback","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The callback to be invoked when the controller validates or resets.\n"},"type":{"type":"reflection","declaration":{"id":102,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":103,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":104,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidateEvent","id":68}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":298,"character":27}]}}}],"type":{"type":"reflection","declaration":{"id":105,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":106,"name":"dispose","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"aurelia-validation.d.ts","line":299,"character":19}],"type":{"type":"reflection","declaration":{"id":107,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":108,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":299,"character":20}]}}}],"groups":[{"title":"Variables","kind":32,"children":[106]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":298,"character":60}]}}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":298,"character":17}]},{"id":136,"name":"unregisterBinding","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":137,"name":"unregisterBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Unregisters a binding with the controller."},"parameters":[{"id":138,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The binding instance.\n"},"type":{"type":"reference","name":"Binding"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":341,"character":25}]},{"id":140,"name":"validate","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":141,"name":"validate","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates and renders results."},"parameters":[{"id":142,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. Instructions on what to validate. If undefined, all\nobjects and bindings will be validated.\n"},"type":{"type":"reference","name":"ValidateInstruction","id":19}}],"type":{"type":"reference","name":"Promise","typeArguments":[{"type":"reference","name":"ControllerValidateResult","id":23}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":352,"character":16}]},{"id":148,"name":"validateBinding","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":149,"name":"validateBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates the property associated with a binding."},"parameters":[{"id":150,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binding"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":367,"character":23}]}],"groups":[{"title":"Constructors","kind":512,"children":[95]},{"title":"Properties","kind":1024,"children":[85,90,88,94,93,146,139,159,91,147,83,86,87,92,89,82,84]},{"title":"Methods","kind":2048,"children":[116,109,125,154,131,122,113,128,143,151,157,99,136,140,148]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":266,"character":37}]},{"id":258,"name":"ValidationControllerFactory","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Creates ValidationController instances."},"children":[{"id":263,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":264,"name":"new ValidationControllerFactory","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":265,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container"}}],"type":{"type":"reference","name":"ValidationControllerFactory","id":258}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":452,"character":70}]},{"id":259,"name":"container","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":451,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":266,"name":"create","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":267,"name":"create","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new controller instance."},"parameters":[{"id":268,"name":"validator","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"Validator","id":38}}],"type":{"type":"reference","name":"ValidationController","id":81}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":457,"character":14}]},{"id":269,"name":"createForCurrentScope","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":270,"name":"createForCurrentScope","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Creates a new controller and registers it in the current element's container so that it's\navailable to the validate binding behavior and renderers."},"parameters":[{"id":271,"name":"validator","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"Validator","id":38}}],"type":{"type":"reference","name":"ValidationController","id":81}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":462,"character":29}]},{"id":260,"name":"get","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":261,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":262,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container"}}],"type":{"type":"reference","name":"ValidationControllerFactory","id":258}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":452,"character":18}]}],"groups":[{"title":"Constructors","kind":512,"children":[263]},{"title":"Properties","kind":1024,"children":[259]},{"title":"Methods","kind":2048,"children":[266,269,260]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":450,"character":44}]},{"id":275,"name":"ValidationErrorsCustomAttribute","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":287,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":288,"name":"new ValidationErrorsCustomAttribute","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":289,"name":"boundaryElement","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Element"}},{"id":290,"name":"controllerAccessor","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":291,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":292,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","name":"ValidationController","id":81}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":480,"character":65}]}}}],"type":{"type":"reference","name":"ValidationErrorsCustomAttribute","id":275}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":479,"character":31}]},{"id":276,"name":"boundaryElement","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":474,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":284,"name":"controller","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":477,"character":18}],"type":{"type":"union","types":[{"type":"reference","name":"ValidationController","id":81},{"type":"intrinsic","name":"null"}]}},{"id":277,"name":"controllerAccessor","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":475,"character":34}],"type":{"type":"intrinsic","name":"any"}},{"id":285,"name":"errors","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":478,"character":14}],"type":{"type":"array","elementType":{"type":"reference","name":"RenderedError","id":272}}},{"id":286,"name":"errorsInternal","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":479,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":301,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":302,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":484,"character":12}]},{"id":295,"name":"interestingElements","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":296,"name":"interestingElements","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":297,"name":"elements","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","name":"Element"}}}],"type":{"type":"array","elementType":{"type":"reference","name":"Element"}}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":482,"character":27}]},{"id":298,"name":"render","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":299,"name":"render","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":300,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RenderInstruction","id":60}}],"type":{"type":"intrinsic","name":"void"},"implementationOf":{"type":"reference","name":"ValidationRenderer.render","id":66}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":483,"character":14}],"implementationOf":{"type":"reference","name":"ValidationRenderer.render","id":65}},{"id":293,"name":"sort","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":294,"name":"sort","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":481,"character":12}]},{"id":303,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":304,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":485,"character":14}]},{"id":278,"name":"inject","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":279,"name":"inject","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"tuple","elements":[{"type":"reflection","declaration":{"id":280,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":282,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":283,"name":"new __type","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","name":"Element"}}],"sources":[{"fileName":"/Users/reisenberg/Documents/Code/aurelia/current/validation/node_modules/typedoc/node_modules/typescript/lib/lib.dom.d.ts","line":5148,"character":23}]},{"id":281,"name":"prototype","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"/Users/reisenberg/Documents/Code/aurelia/current/validation/node_modules/typedoc/node_modules/typescript/lib/lib.dom.d.ts","line":5148,"character":13}],"type":{"type":"reference","name":"Element"}}],"groups":[{"title":"Constructors","kind":512,"children":[282]},{"title":"Variables","kind":32,"children":[281]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":476,"character":26}]}},{"type":"reference","name":"Lazy","typeArguments":[{"type":"reference","name":"ValidationController","id":81}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":476,"character":21}]}],"groups":[{"title":"Constructors","kind":512,"children":[287]},{"title":"Properties","kind":1024,"children":[276,284,277,285,286]},{"title":"Methods","kind":2048,"children":[301,295,298,293,303,278]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":473,"character":48}],"implementedTypes":[{"type":"reference","name":"ValidationRenderer","id":64}]},{"id":406,"name":"ValidationMessageParser","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":413,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":414,"name":"new ValidationMessageParser","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":415,"name":"bindinqLanguage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"BindingLanguage"}}],"type":{"type":"reference","name":"ValidationMessageParser","id":406}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":589,"character":22}]},{"id":407,"name":"bindinqLanguage","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":584,"character":31}],"type":{"type":"intrinsic","name":"any"}},{"id":412,"name":"cache","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":589,"character":21}],"type":{"type":"intrinsic","name":"any"}},{"id":419,"name":"coalesce","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":592,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":409,"name":"emptyStringExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":586,"character":37}],"type":{"type":"intrinsic","name":"any"}},{"id":410,"name":"nullExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":587,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":411,"name":"undefinedExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":588,"character":35}],"type":{"type":"intrinsic","name":"any"}},{"id":408,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":585,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"BindingLanguage"}}},{"id":416,"name":"parse","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":417,"name":"parse","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":418,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"Expression"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":591,"character":13}]}],"groups":[{"title":"Constructors","kind":512,"children":[413]},{"title":"Properties","kind":1024,"children":[407,412,419,409,410,411,408]},{"title":"Methods","kind":2048,"children":[416]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":583,"character":40}]},{"id":486,"name":"ValidationMessageProvider","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Retrieves validation messages and property display names."},"children":[{"id":489,"name":"constructor","kind":512,"kindString":"Constructor","flags":{"isExported":true},"signatures":[{"id":490,"name":"new ValidationMessageProvider","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":491,"name":"parser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidationMessageParser","id":406}}],"type":{"type":"reference","name":"ValidationMessageProvider","id":486}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":614,"character":58}]},{"id":487,"name":"parser","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":613,"character":14}],"type":{"type":"reference","name":"ValidationMessageParser","id":406}},{"id":488,"name":"inject","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":614,"character":21}],"type":{"type":"array","elementType":{"type":"reference","name":"ValidationMessageParser","id":406}}},{"id":495,"name":"getDisplayName","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":496,"name":"getDisplayName","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Formulates a property display name using the property name and the configured\ndisplayName (if provided).\nOverride this with your own custom logic."},"parameters":[{"id":497,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The property name.\n"},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":498,"name":"displayName","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"null"},{"type":"reflection","declaration":{"id":499,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":500,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"string"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":627,"character":83}]}}]}}],"type":{"type":"intrinsic","name":"string"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":627,"character":22}]},{"id":492,"name":"getMessage","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":493,"name":"getMessage","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Returns a message binding expression that corresponds to the key."},"parameters":[{"id":494,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The message key.\n"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"Expression"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":620,"character":18}]}],"groups":[{"title":"Constructors","kind":512,"children":[489]},{"title":"Properties","kind":1024,"children":[487,488]},{"title":"Methods","kind":2048,"children":[495,492]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":612,"character":42}]},{"id":305,"name":"ValidationRendererCustomAttribute","kind":128,"kindString":"Class","flags":{"isExported":true},"children":[{"id":306,"name":"container","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":489,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":307,"name":"controller","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":490,"character":26}],"type":{"type":"intrinsic","name":"any"}},{"id":309,"name":"renderer","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":492,"character":24}],"type":{"type":"intrinsic","name":"any"}},{"id":308,"name":"value","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":491,"character":21}],"type":{"type":"intrinsic","name":"any"}},{"id":313,"name":"bind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":314,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":494,"character":12}]},{"id":310,"name":"created","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":311,"name":"created","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":312,"name":"view","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":493,"character":15}]},{"id":315,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":316,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":495,"character":14}]}],"groups":[{"title":"Properties","kind":1024,"children":[306,307,309,308]},{"title":"Methods","kind":2048,"children":[313,310,315]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":488,"character":50}]},{"id":719,"name":"ValidationRules","kind":128,"kindString":"Class","flags":{"isExported":true},"comment":{"shortText":"Fluent rule definition API."},"children":[{"id":720,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isStatic":true,"isPrivate":true,"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":938,"character":30}],"type":{"type":"intrinsic","name":"any"}},{"id":733,"name":"customRule","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":734,"name":"customRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Defines a custom rule."},"parameters":[{"id":735,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The name of the custom rule. Also serves as the message key."},"type":{"type":"intrinsic","name":"string"}},{"id":736,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The rule function."},"type":{"type":"reflection","declaration":{"id":737,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":738,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":739,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":740,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":741,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":957,"character":50}]}}},{"id":742,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The message expression"},"type":{"type":"intrinsic","name":"string"}},{"id":743,"name":"argsToConfig","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"A function that maps the rule's arguments to a \"config\"\nobject that can be used when evaluating the message expression.\n"},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"reflection","declaration":{"id":744,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":745,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":746,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}]}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":957,"character":25}]},{"id":725,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":726,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Target a property with validation rules."},"typeParameter":[{"id":727,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":728,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":729,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The property to target. Can be the property name or a property accessor function.\n"},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","name":"PropertyAccessor","id":789,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"typeParameter","name":"TValue"}]}]}}],"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":944,"character":21}]},{"id":730,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":731,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Targets an object with validation rules."},"typeParameter":[{"id":732,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"type":{"type":"reference","name":"FluentRules","id":623,"typeArguments":[{"type":"typeParameter","name":"TObject"},{"type":"intrinsic","name":"any"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":948,"character":27}]},{"id":721,"name":"initialize","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":722,"name":"initialize","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":723,"name":"messageParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValidationMessageParser","id":406}},{"id":724,"name":"propertyParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"PropertyAccessorParser","id":27}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":939,"character":25}]},{"id":754,"name":"off","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":755,"name":"off","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Removes the rules from a class or object."},"parameters":[{"id":756,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"A class or object.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":973,"character":18}]},{"id":747,"name":"taggedRules","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":748,"name":"taggedRules","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Returns rules with the matching tag."},"parameters":[{"id":749,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The rules to search."},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}},{"id":750,"name":"tag","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The tag to search for.\n"},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":963,"character":26}]},{"id":751,"name":"untaggedRules","kind":2048,"kindString":"Method","flags":{"isStatic":true,"isExported":true},"signatures":[{"id":752,"name":"untaggedRules","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Returns rules that have no tag."},"parameters":[{"id":753,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The rules to search.\n"},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","name":"Rule","id":320,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}]}}}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":968,"character":28}]}],"groups":[{"title":"Properties","kind":1024,"children":[720]},{"title":"Methods","kind":2048,"children":[733,725,730,721,754,747,751]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":937,"character":32}]},{"id":38,"name":"Validator","kind":128,"kindString":"Class","flags":{"isExported":true,"isAbstract":true},"comment":{"shortText":"Validates objects and properties."},"children":[{"id":48,"name":"ruleExists","kind":2048,"kindString":"Method","flags":{"isExported":true,"isAbstract":true},"signatures":[{"id":49,"name":"ruleExists","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Determines whether a rule exists in a set of rules.","tags":[{"tag":"parem","text":"rule The rule to find.\n"}]},"parameters":[{"id":50,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The rules to search."},"type":{"type":"intrinsic","name":"any"}},{"id":51,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"boolean"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":122,"character":27}]},{"id":44,"name":"validateObject","kind":2048,"kindString":"Method","flags":{"isExported":true,"isAbstract":true},"signatures":[{"id":45,"name":"validateObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates all rules for specified object and it's properties."},"parameters":[{"id":46,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object to validate."},"type":{"type":"intrinsic","name":"any"}},{"id":47,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. If unspecified, the implementation should lookup the rules for the\nspecified object. This may not be possible for all implementations of this interface.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Promise","typeArguments":[{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":116,"character":31}]},{"id":39,"name":"validateProperty","kind":2048,"kindString":"Method","flags":{"isExported":true,"isAbstract":true},"signatures":[{"id":40,"name":"validateProperty","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Validates the specified property."},"parameters":[{"id":41,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The object to validate."},"type":{"type":"intrinsic","name":"any"}},{"id":42,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The name of the property to validate."},"type":{"type":"intrinsic","name":"string"}},{"id":43,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"text":"Optional. If unspecified, the implementation should lookup the rules for the\nspecified object. This may not be possible for all implementations of this interface.\n"},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Promise","typeArguments":[{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":109,"character":33}]}],"groups":[{"title":"Methods","kind":2048,"children":[48,44,39]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":101,"character":35}],"extendedBy":[{"type":"reference","name":"StandardValidator","id":501}]},{"id":23,"name":"ControllerValidateResult","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"The result of a call to the validation controller's validate method."},"children":[{"id":26,"name":"instruction","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"comment":{"shortText":"The instruction passed to the controller's validate method."},"sources":[{"fileName":"aurelia-validation.d.ts","line":65,"character":19}],"type":{"type":"reference","name":"ValidateInstruction","id":19}},{"id":25,"name":"results","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The validation result of every rule that was evaluated."},"sources":[{"fileName":"aurelia-validation.d.ts","line":61,"character":15}],"type":{"type":"array","elementType":{"type":"reference","name":"ValidateResult","id":2}}},{"id":24,"name":"valid","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"Whether validation passed."},"sources":[{"fileName":"aurelia-validation.d.ts","line":57,"character":13}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","kind":1024,"children":[26,25,24]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":53,"character":45}]},{"id":757,"name":"Parsers","kind":256,"kindString":"Interface","flags":{"isExported":true},"children":[{"id":758,"name":"message","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":976,"character":15}],"type":{"type":"reference","name":"ValidationMessageParser","id":406}},{"id":759,"name":"property","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":977,"character":16}],"type":{"type":"reference","name":"PropertyAccessorParser","id":27}}],"groups":[{"title":"Properties","kind":1024,"children":[758,759]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":975,"character":28}]},{"id":60,"name":"RenderInstruction","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Defines which validation results to render and which validation results to unrender."},"children":[{"id":61,"name":"kind","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The \"kind\" of render instruction. Either 'validate' or 'reset'."},"sources":[{"fileName":"aurelia-validation.d.ts","line":169,"character":12}],"type":{"type":"union","types":[{"type":"stringLiteral","value":"validate"},{"type":"stringLiteral","value":"reset"}]}},{"id":62,"name":"render","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The results to render."},"sources":[{"fileName":"aurelia-validation.d.ts","line":173,"character":14}],"type":{"type":"array","elementType":{"type":"reference","name":"ResultInstruction","id":57}}},{"id":63,"name":"unrender","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The results to unrender."},"sources":[{"fileName":"aurelia-validation.d.ts","line":177,"character":16}],"type":{"type":"array","elementType":{"type":"reference","name":"ResultInstruction","id":57}}}],"groups":[{"title":"Properties","kind":1024,"children":[61,62,63]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":165,"character":38}]},{"id":272,"name":"RenderedError","kind":256,"kindString":"Interface","flags":{"isExported":true},"children":[{"id":273,"name":"error","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":470,"character":13}],"type":{"type":"reference","name":"ValidateResult","id":2}},{"id":274,"name":"targets","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":471,"character":15}],"type":{"type":"array","elementType":{"type":"reference","name":"Element"}}}],"groups":[{"title":"Properties","kind":1024,"children":[273,274]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":469,"character":34}]},{"id":57,"name":"ResultInstruction","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"A result to render (or unrender) and the associated elements (if any)"},"children":[{"id":59,"name":"elements","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The associated elements (if any)."},"sources":[{"fileName":"aurelia-validation.d.ts","line":160,"character":16}],"type":{"type":"array","elementType":{"type":"reference","name":"Element"}}},{"id":58,"name":"result","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The validation result."},"sources":[{"fileName":"aurelia-validation.d.ts","line":156,"character":14}],"type":{"type":"reference","name":"ValidateResult","id":2}}],"groups":[{"title":"Properties","kind":1024,"children":[59,58]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":152,"character":38}]},{"id":320,"name":"Rule","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"A rule definition. Associations a rule with a property or object."},"typeParameter":[{"id":321,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":322,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"children":[{"id":324,"name":"condition","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":517,"character":17}],"type":{"type":"reflection","declaration":{"id":325,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":326,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":327,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TValue"}},{"id":328,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","name":"TObject","id":321}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","name":"Promise","typeArguments":[{"type":"intrinsic","name":"boolean"}]}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":517,"character":18}]}}},{"id":329,"name":"config","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":518,"character":14}],"type":{"type":"intrinsic","name":"object"}},{"id":335,"name":"message","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":521,"character":15}],"type":{"type":"union","types":[{"type":"reference","name":"Expression"},{"type":"intrinsic","name":"null"}]}},{"id":334,"name":"messageKey","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":520,"character":18}],"type":{"type":"intrinsic","name":"string"}},{"id":323,"name":"property","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":516,"character":16}],"type":{"type":"reference","name":"RuleProperty","id":317}},{"id":336,"name":"sequence","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":522,"character":16}],"type":{"type":"intrinsic","name":"number"}},{"id":337,"name":"tag","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":523,"character":11}],"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"intrinsic","name":"string"}]}},{"id":330,"name":"when","kind":1024,"kindString":"Property","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":519,"character":12}],"type":{"type":"union","types":[{"type":"reflection","declaration":{"id":331,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":332,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":333,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}}],"type":{"type":"intrinsic","name":"boolean"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":519,"character":13}]}},{"type":"intrinsic","name":"null"}]}}],"groups":[{"title":"Properties","kind":1024,"children":[324,329,335,334,323,336,337,330]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":515,"character":25}]},{"id":317,"name":"RuleProperty","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Information related to a property that is the subject of validation."},"children":[{"id":319,"name":"displayName","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The displayName of the property (or object)."},"sources":[{"fileName":"aurelia-validation.d.ts","line":510,"character":19}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reference","name":"ValidationDisplayNameAccessor","id":798},{"type":"intrinsic","name":"null"}]}},{"id":318,"name":"name","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The property name. null indicates the rule targets the object itself."},"sources":[{"fileName":"aurelia-validation.d.ts","line":506,"character":12}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"intrinsic","name":"null"}]}}],"groups":[{"title":"Properties","kind":1024,"children":[319,318]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":502,"character":33}]},{"id":19,"name":"ValidateInstruction","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Instructions for the validation controller's validate method."},"children":[{"id":20,"name":"object","kind":1024,"kindString":"Property","flags":{"isExported":true},"comment":{"shortText":"The object to validate."},"sources":[{"fileName":"aurelia-validation.d.ts","line":38,"character":14}],"type":{"type":"intrinsic","name":"any"}},{"id":21,"name":"propertyName","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"comment":{"shortText":"The property to validate. Optional."},"sources":[{"fileName":"aurelia-validation.d.ts","line":42,"character":20}],"type":{"type":"intrinsic","name":"any"}},{"id":22,"name":"rules","kind":1024,"kindString":"Property","flags":{"isExported":true,"isOptional":true},"comment":{"shortText":"The rules to validate. Optional."},"sources":[{"fileName":"aurelia-validation.d.ts","line":46,"character":13}],"type":{"type":"intrinsic","name":"any"}}],"groups":[{"title":"Properties","kind":1024,"children":[20,21,22]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":34,"character":40}]},{"id":483,"name":"ValidationMessages","kind":256,"kindString":"Interface","flags":{"isExported":true},"indexSignature":{"id":484,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":485,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}},"sources":[{"fileName":"aurelia-validation.d.ts","line":602,"character":39}]},{"id":64,"name":"ValidationRenderer","kind":256,"kindString":"Interface","flags":{"isExported":true},"comment":{"shortText":"Renders validation results."},"children":[{"id":65,"name":"render","kind":2048,"kindString":"Method","flags":{"isExported":true},"signatures":[{"id":66,"name":"render","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Render the validation results."},"parameters":[{"id":67,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The render instruction. Defines which results to render and which\nresults to unrender.\n"},"type":{"type":"reference","name":"RenderInstruction","id":60}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":188,"character":14}]}],"groups":[{"title":"Methods","kind":2048,"children":[65]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":182,"character":39}],"implementedBy":[{"type":"reference","name":"ValidationErrorsCustomAttribute","id":275}]},{"id":804,"name":"AccessScope","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":551,"character":27}],"type":{"type":"intrinsic","name":"any"}},{"id":803,"name":"AccessThis","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":550,"character":26}],"type":{"type":"intrinsic","name":"any"}},{"id":802,"name":"Assign","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":549,"character":22}],"type":{"type":"intrinsic","name":"any"}},{"id":806,"name":"CallFunction","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":553,"character":28}],"type":{"type":"intrinsic","name":"any"}},{"id":805,"name":"CallScope","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":552,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":801,"name":"Chain","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":548,"character":21}],"type":{"type":"intrinsic","name":"any"}},{"id":809,"name":"LiteralArray","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":556,"character":28}],"type":{"type":"intrinsic","name":"any"}},{"id":810,"name":"LiteralObject","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":557,"character":29}],"type":{"type":"intrinsic","name":"any"}},{"id":808,"name":"LiteralPrimitive","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":555,"character":32}],"type":{"type":"intrinsic","name":"any"}},{"id":811,"name":"LiteralString","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":558,"character":29}],"type":{"type":"intrinsic","name":"any"}},{"id":807,"name":"PrefixNot","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":554,"character":25}],"type":{"type":"intrinsic","name":"any"}},{"id":789,"name":"PropertyAccessor","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"typeParameter":[{"id":790,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":791,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":89,"character":32}],"type":{"type":"reflection","declaration":{"id":792,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":793,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":794,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"typeParameter","name":"TObject"}}],"type":{"type":"typeParameter","name":"TValue"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":89,"character":51}]}}},{"id":798,"name":"ValidationDisplayNameAccessor","kind":4194304,"kindString":"Type alias","flags":{"isExported":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":498,"character":45}],"type":{"type":"reflection","declaration":{"id":799,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":800,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"string"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":498,"character":47}]}}},{"id":812,"name":"validationMessages","kind":32,"kindString":"Variable","flags":{"isExported":true,"isConst":true},"comment":{"shortText":"Dictionary of validation messages. [messageKey]: messageExpression"},"sources":[{"fileName":"aurelia-validation.d.ts","line":608,"character":35}],"type":{"type":"reference","name":"ValidationMessages","id":483}},{"id":813,"name":"configure","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":814,"name":"configure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Configures the plugin."},"parameters":[{"id":815,"name":"frameworkConfig","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":816,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":817,"name":"container","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"aurelia-validation.d.ts","line":1022,"character":17}],"type":{"type":"reference","name":"Container"}},{"id":818,"name":"globalResources","kind":32,"kindString":"Variable","flags":{"isOptional":true},"sources":[{"fileName":"aurelia-validation.d.ts","line":1023,"character":23}],"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"reflection","declaration":{"id":819,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":820,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":821,"name":"resources","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}]}}],"groups":[{"title":"Variables","kind":32,"children":[817,818]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1021,"character":46}]}}},{"id":822,"name":"callback","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"reflection","declaration":{"id":823,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"signatures":[{"id":824,"name":"__call","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":825,"name":"config","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AureliaValidationConfiguration","id":760}}],"type":{"type":"intrinsic","name":"void"}}]}}]}}],"type":{"type":"intrinsic","name":"void"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":1021,"character":29}]},{"id":795,"name":"getAccessorExpression","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":796,"name":"getAccessorExpression","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":797,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":96,"character":41}]},{"id":776,"name":"getPropertyInfo","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":777,"name":"getPropertyInfo","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Retrieves the object and property name for the specified expression."},"parameters":[{"id":778,"name":"expression","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The expression"},"type":{"type":"reference","name":"Expression"}},{"id":779,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"comment":{"text":"The scope\n"},"type":{"type":"reference","name":"Scope"}}],"type":{"type":"union","types":[{"type":"reflection","declaration":{"id":780,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":781,"name":"object","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"aurelia-validation.d.ts","line":82,"character":14}],"type":{"type":"intrinsic","name":"object"}},{"id":782,"name":"propertyName","kind":32,"kindString":"Variable","flags":{},"sources":[{"fileName":"aurelia-validation.d.ts","line":83,"character":20}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Variables","kind":32,"children":[781,782]}],"sources":[{"fileName":"aurelia-validation.d.ts","line":81,"character":75}]}},{"type":"intrinsic","name":"null"}]}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":81,"character":35}]},{"id":772,"name":"getTargetDOMElement","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":773,"name":"getTargetDOMElement","kind":4096,"kindString":"Call signature","flags":{},"comment":{"shortText":"Gets the DOM element associated with the data-binding. Most of the time it's\nthe binding.target but sometimes binding.target is an aurelia custom element,\nor custom attribute which is a javascript \"class\" instance, so we need to use\nthe controller's container to retrieve the actual DOM element."},"parameters":[{"id":774,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":775,"name":"view","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Element"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":74,"character":39}]},{"id":786,"name":"isNumber","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":787,"name":"isNumber","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":788,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"boolean"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":87,"character":28}]},{"id":783,"name":"isString","kind":64,"kindString":"Function","flags":{"isExported":true},"signatures":[{"id":784,"name":"isString","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":785,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"boolean"}}],"sources":[{"fileName":"aurelia-validation.d.ts","line":86,"character":28}]}],"groups":[{"title":"Enumerations","kind":4,"children":[52]},{"title":"Classes","kind":128,"children":[760,350,701,526,623,420,27,338,501,177,160,68,194,210,226,242,2,81,258,275,406,486,305,719,38]},{"title":"Interfaces","kind":256,"children":[23,757,60,272,57,320,317,19,483,64]},{"title":"Type aliases","kind":4194304,"children":[804,803,802,806,805,801,809,810,808,811,807,789,798]},{"title":"Variables","kind":32,"children":[812]},{"title":"Functions","kind":64,"children":[813,795,776,772,786,783]}]} +{"id":0,"name":"aurelia-validation-docs","kind":1,"kindString":"Project","flags":{},"children":[{"id":217,"name":"validateTrigger","kind":8,"kindString":"Enumeration","flags":{},"comment":{"summary":[{"kind":"text","text":"Validation triggers."}]},"children":[{"id":219,"name":"blur","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate the binding when the binding's target element fires a DOM \"blur\" event."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L14"}],"type":{"type":"literal","value":1}},{"id":220,"name":"change","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate the binding when it updates the model due to a change in the view."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":19,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L19"}],"type":{"type":"literal","value":2}},{"id":221,"name":"changeOrBlur","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate the binding when the binding's target element fires a DOM \"blur\" event and\r\nwhen it updates the model due to a change in the view."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":25,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L25"}],"type":{"type":"literal","value":3}},{"id":223,"name":"changeOrFocusout","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate the binding when the binding's target element fires a DOM \"focusout\" event or\r\nwhen it updates the model due to a change in the view."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":37,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L37"}],"type":{"type":"literal","value":6}},{"id":222,"name":"focusout","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate the binding when the binding's target element fires a DOM \"focusout\" event.\r\nUnlike \"blur\", this event bubbles."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":31,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L31"}],"type":{"type":"literal","value":4}},{"id":218,"name":"manual","kind":16,"kindString":"Enumeration Member","flags":{},"comment":{"summary":[{"kind":"text","text":"Manual validation. Use the controller's "},{"kind":"code","text":"`validate()`"},{"kind":"text","text":" and "},{"kind":"code","text":"`reset()`"},{"kind":"text","text":" methods\r\nto validate all bindings."}]},"sources":[{"fileName":"src/validate-trigger.ts","line":9,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L9"}],"type":{"type":"literal","value":0}}],"groups":[{"title":"Enumeration Members","children":[219,220,221,223,222,218]}],"sources":[{"fileName":"src/validate-trigger.ts","line":4,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-trigger.ts#L4"}]},{"id":777,"name":"FluentEnsure","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Part of the fluent rule API. Enables targeting properties and objects with rules."}]},"children":[{"id":778,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":438,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L438"}],"signatures":[{"id":779,"name":"new FluentEnsure","kind":16384,"kindString":"Constructor signature","flags":{},"typeParameter":[{"id":780,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":781,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":843,"name":"Parsers"}}],"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":780,"name":"TObject"}],"name":"FluentEnsure"}}]},{"id":783,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":438,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L438"}],"type":{"type":"reference","id":843,"name":"Parsers"}},{"id":782,"name":"rules","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"Rules that have been defined using the fluent API."}]},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":436,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L436"}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}},"defaultValue":"[]"},{"id":796,"name":"assertInitialized","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":485,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L485"}],"signatures":[{"id":797,"name":"assertInitialized","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]},{"id":784,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":445,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L445"}],"signatures":[{"id":785,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Target a property with validation rules."}]},"typeParameter":[{"id":786,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":787,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The property to target. Can be the property name or a property accessor\r\nfunction."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","id":53,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"reference","id":786,"name":"TValue"}],"name":"PropertyAccessor"}]}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":788,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":458,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L458"}],"signatures":[{"id":789,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Targets an object with validation rules."}]},"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":798,"name":"mergeRules","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":492,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L492"}],"signatures":[{"id":799,"name":"mergeRules","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":800,"name":"fluentRules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}},{"id":801,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":780,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":790,"name":"on","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":469,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L469"}],"signatures":[{"id":791,"name":"on","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the rules to a class or object, making them discoverable by the StandardValidator."}]},"parameters":[{"id":792,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"A class or object."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":780,"name":"TObject"}],"name":"FluentEnsure"}}]}],"groups":[{"title":"Constructors","children":[778]},{"title":"Properties","children":[783,782]},{"title":"Methods","children":[796,784,788,798,790]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":432,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L432"}],"typeParameters":[{"id":802,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}]},{"id":597,"name":"FluentRuleCustomizer","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Part of the fluent rule API. Enables customizing property rules."}]},"children":[{"id":598,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L14"}],"signatures":[{"id":599,"name":"new FluentRuleCustomizer","kind":16384,"kindString":"Constructor signature","flags":{},"typeParameter":[{"id":600,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":601,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":602,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":419,"name":"RuleProperty"}},{"id":603,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":604,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":16,"character":15,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L16"}],"signatures":[{"id":605,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":606,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":601,"name":"TValue"}},{"id":607,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":600,"name":"TObject"}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}},{"id":608,"name":"config","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"object"},"defaultValue":"{}"},{"id":609,"name":"fluentEnsure","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":600,"name":"TObject"}],"name":"FluentEnsure"}},{"id":610,"name":"fluentRules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRules"}},{"id":611,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":843,"name":"Parsers"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":613,"name":"fluentEnsure","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":18,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L18"}],"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":600,"name":"TObject"}],"name":"FluentEnsure"}},{"id":614,"name":"fluentRules","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":19,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L19"}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRules"}},{"id":615,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":20,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L20"}],"type":{"type":"reference","id":843,"name":"Parsers"}},{"id":612,"name":"rule","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":12,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L12"}],"type":{"type":"reference","id":422,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"Rule"}},{"id":642,"name":"rules","kind":262144,"kindString":"Accessor","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":101,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L101"}],"getSignature":{"id":643,"name":"rules","kind":524288,"kindString":"Get signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Rules that have been defined using the fluent API."}]},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}}},{"id":688,"name":"between","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":223,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L223"}],"signatures":[{"id":689,"name":"between","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"between\" NUMBER validation rule to the property.\r\nValue must be between but not equal to the specified min and max.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":690,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":691,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":664,"name":"email","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":155,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L155"}],"signatures":[{"id":665,"name":"email","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"email\" rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":633,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":87,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L87"}],"signatures":[{"id":634,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Target a property with validation rules."}]},"typeParameter":[{"id":635,"name":"TValue2","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":636,"name":"subject","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"id":637,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":87,"character":44,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L87"}],"signatures":[{"id":638,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":639,"name":"model","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":600,"name":"TObject"}}],"type":{"type":"reference","id":635,"name":"TValue2"}}]}}]}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":640,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":94,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L94"}],"signatures":[{"id":641,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Targets an object with validation rules."}]},"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":692,"name":"equals","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":231,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L231"}],"signatures":[{"id":693,"name":"equals","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"equals\" validation rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":694,"name":"expectedValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":601,"name":"TValue"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":661,"name":"matches","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":147,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L147"}],"signatures":[{"id":662,"name":"matches","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"matches\" rule to the property.\r\nValue must match the specified regular expression.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":663,"name":"regex","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RegExp","qualifiedName":"RegExp","package":"typescript"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":681,"name":"max","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":205,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L205"}],"signatures":[{"id":682,"name":"max","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"max\" NUMBER validation rule to the property.\r\nValue must be less than or equal to the specified constraint.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":683,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":675,"name":"maxItems","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":187,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L187"}],"signatures":[{"id":676,"name":"maxItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"maxItems\" ARRAY validation rule to the property.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":677,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":669,"name":"maxLength","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":171,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L171"}],"signatures":[{"id":670,"name":"maxLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"maxLength\" STRING validation rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":671,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":678,"name":"min","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":196,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L196"}],"signatures":[{"id":679,"name":"min","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"min\" NUMBER validation rule to the property.\r\nValue must be greater than or equal to the specified constraint.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":680,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":672,"name":"minItems","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":179,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L179"}],"signatures":[{"id":673,"name":"minItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"minItems\" ARRAY validation rule to the property.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":674,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":666,"name":"minLength","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":163,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L163"}],"signatures":[{"id":667,"name":"minLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"minLength\" STRING validation rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":668,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":644,"name":"on","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":109,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L109"}],"signatures":[{"id":645,"name":"on","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the rules to a class or object, making them discoverable by the StandardValidator."}]},"parameters":[{"id":646,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"A class or object."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":600,"name":"TObject"}],"name":"FluentEnsure"}}]},{"id":684,"name":"range","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":214,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L214"}],"signatures":[{"id":685,"name":"range","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"range\" NUMBER validation rule to the property.\r\nValue must be between or equal to the specified min and max.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":686,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":687,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":659,"name":"required","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":138,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L138"}],"signatures":[{"id":660,"name":"required","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"required\" rule to the property.\r\nThe value cannot be null, undefined or whitespace."}]},"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":647,"name":"satisfies","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":121,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L121"}],"signatures":[{"id":648,"name":"satisfies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies an ad-hoc rule function to the ensured property or object."}]},"parameters":[{"id":649,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The function to validate the rule.\r\nWill be called with two arguments, the property value and the object.\r\nShould return a boolean or a Promise that resolves to a boolean."}]},"type":{"type":"reflection","declaration":{"id":650,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":121,"character":30,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L121"}],"signatures":[{"id":651,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":652,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":601,"name":"TValue"}},{"id":653,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":600,"name":"TObject"}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}},{"id":654,"name":"config","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"object"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":655,"name":"satisfiesRule","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":130,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L130"}],"signatures":[{"id":656,"name":"satisfiesRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies a rule by name."}]},"parameters":[{"id":657,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the custom or standard rule."}]},"type":{"type":"intrinsic","name":"string"}},{"id":658,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"summary":[{"kind":"text","text":"The rule's arguments."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":630,"name":"tag","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":76,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L76"}],"signatures":[{"id":631,"name":"tag","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Tags the rule instance, enabling the rule to be found easily\r\nusing ValidationRules.taggedRules(rules, tag)"}]},"parameters":[{"id":632,"name":"tag","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":616,"name":"then","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":39,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L39"}],"signatures":[{"id":617,"name":"then","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validate subsequent rules after previously declared rules have\r\nbeen validated successfully. Use to postpone validation of costly\r\nrules until less expensive rules pass validation."}]},"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":624,"name":"when","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":67,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L67"}],"signatures":[{"id":625,"name":"when","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Specifies a condition that must be met before attempting to validate the rule."}]},"parameters":[{"id":626,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"A function that accepts the object as a parameter and returns true\r\nor false whether the rule should be evaluated."}]},"type":{"type":"reflection","declaration":{"id":627,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":67,"character":25,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L67"}],"signatures":[{"id":628,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":629,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":600,"name":"TObject"}}],"type":{"type":"intrinsic","name":"boolean"}}]}}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":621,"name":"withMessage","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":56,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L56"}],"signatures":[{"id":622,"name":"withMessage","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Specifies rule's validation message."}]},"parameters":[{"id":623,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":618,"name":"withMessageKey","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":47,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L47"}],"signatures":[{"id":619,"name":"withMessageKey","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Specifies the key to use when looking up the rule's validation message."}]},"parameters":[{"id":620,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":600,"name":"TObject"},{"type":"reference","id":601,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]}],"groups":[{"title":"Constructors","children":[598]},{"title":"Properties","children":[613,614,615,612]},{"title":"Accessors","children":[642]},{"title":"Methods","children":[688,664,633,640,692,661,681,675,669,678,672,666,644,684,659,647,655,630,616,624,621,618]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":11,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L11"}],"typeParameters":[{"id":695,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":696,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}]},{"id":697,"name":"FluentRules","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Part of the fluent rule API. Enables applying rules to properties and objects."}]},"children":[{"id":713,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":254,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L254"}],"signatures":[{"id":714,"name":"new FluentRules","kind":16384,"kindString":"Constructor signature","flags":{},"typeParameter":[{"id":715,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":716,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":717,"name":"fluentEnsure","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":715,"name":"TObject"}],"name":"FluentEnsure"}},{"id":718,"name":"parsers","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":843,"name":"Parsers"}},{"id":719,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":419,"name":"RuleProperty"}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRules"}}]},{"id":721,"name":"fluentEnsure","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":255,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L255"}],"type":{"type":"reference","id":777,"typeArguments":[{"type":"reference","id":715,"name":"TObject"}],"name":"FluentEnsure"}},{"id":722,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":256,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L256"}],"type":{"type":"reference","id":843,"name":"Parsers"}},{"id":723,"name":"property","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":257,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L257"}],"type":{"type":"reference","id":419,"name":"RuleProperty"}},{"id":720,"name":"sequence","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"Current rule sequence number. Used to postpone evaluation of rules until rules\r\nwith lower sequence number have successfully validated. The \"then\" fluent API method\r\nmanages this property, there's usually no need to set it directly."}]},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":252,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L252"}],"type":{"type":"intrinsic","name":"number"},"defaultValue":"0"},{"id":698,"name":"customRules","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":240,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L240"}],"type":{"type":"reflection","declaration":{"id":699,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":240,"character":29,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L240"}],"indexSignature":{"id":700,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":701,"name":"name","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reflection","declaration":{"id":702,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":709,"name":"argsToConfig","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":243,"character":6,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L243"}],"type":{"type":"reflection","declaration":{"id":710,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":243,"character":21,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L243"}],"signatures":[{"id":711,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":712,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}},{"id":703,"name":"condition","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":242,"character":6,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L242"}],"type":{"type":"reflection","declaration":{"id":704,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":242,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L242"}],"signatures":[{"id":705,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":706,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":707,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":708,"name":"fluentArgs","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}}],"groups":[{"title":"Properties","children":[709,703]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":241,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L241"}]}}}}},"defaultValue":"{}"},{"id":768,"name":"between","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":411,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L411"}],"signatures":[{"id":769,"name":"between","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"between\" NUMBER validation rule to the property.\r\nValue must be between but not equal to the specified min and max.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":770,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":771,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":724,"name":"displayName","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":263,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L263"}],"signatures":[{"id":725,"name":"displayName","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Sets the display name of the ensured property."}]},"parameters":[{"id":726,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"reference","id":416,"name":"ValidationDisplayNameAccessor"}]}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRules"}}]},{"id":744,"name":"email","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":327,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L327"}],"signatures":[{"id":745,"name":"email","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"email\" rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":772,"name":"equals","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":421,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L421"}],"signatures":[{"id":773,"name":"equals","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"equals\" validation rule to the property.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":774,"name":"expectedValue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":716,"name":"TValue"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":741,"name":"matches","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":317,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L317"}],"signatures":[{"id":742,"name":"matches","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"matches\" rule to the property.\r\nValue must match the specified regular expression.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":743,"name":"regex","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"RegExp","qualifiedName":"RegExp","package":"typescript"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":761,"name":"max","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":390,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L390"}],"signatures":[{"id":762,"name":"max","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"max\" NUMBER validation rule to the property.\r\nValue must be less than or equal to the specified constraint.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":763,"name":"constraint","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":755,"name":"maxItems","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":370,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L370"}],"signatures":[{"id":756,"name":"maxItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"maxItems\" ARRAY validation rule to the property.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":757,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":749,"name":"maxLength","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":350,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L350"}],"signatures":[{"id":750,"name":"maxLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"maxLength\" STRING validation rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":751,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":758,"name":"min","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":380,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L380"}],"signatures":[{"id":759,"name":"min","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"min\" NUMBER validation rule to the property.\r\nValue must be greater than or equal to the specified constraint.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":760,"name":"constraint","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":752,"name":"minItems","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":361,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L361"}],"signatures":[{"id":753,"name":"minItems","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"minItems\" ARRAY validation rule to the property.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":754,"name":"count","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":746,"name":"minLength","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":339,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L339"}],"signatures":[{"id":747,"name":"minLength","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"minLength\" STRING validation rule to the property.\r\nnull, undefined and empty-string values are considered valid."}]},"parameters":[{"id":748,"name":"length","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":764,"name":"range","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":400,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L400"}],"signatures":[{"id":765,"name":"range","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"range\" NUMBER validation rule to the property.\r\nValue must be between or equal to the specified min and max.\r\nnull and undefined values are considered valid."}]},"parameters":[{"id":766,"name":"min","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":767,"name":"max","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":739,"name":"required","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":303,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L303"}],"signatures":[{"id":740,"name":"required","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the \"required\" rule to the property.\r\nThe value cannot be null, undefined or whitespace."}]},"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":727,"name":"satisfies","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":274,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L274"}],"signatures":[{"id":728,"name":"satisfies","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies an ad-hoc rule function to the ensured property or object."}]},"parameters":[{"id":729,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The function to validate the rule.\r\nWill be called with two arguments, the property value and the object.\r\nShould return a boolean or a Promise that resolves to a boolean."}]},"type":{"type":"reflection","declaration":{"id":730,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":274,"character":30,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L274"}],"signatures":[{"id":731,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":732,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":716,"name":"TValue"}},{"id":733,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":715,"name":"TObject"}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}},{"id":734,"name":"config","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"object"}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]},{"id":735,"name":"satisfiesRule","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":284,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L284"}],"signatures":[{"id":736,"name":"satisfiesRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies a rule by name."}]},"parameters":[{"id":737,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the custom or standard rule."}]},"type":{"type":"intrinsic","name":"string"}},{"id":738,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"comment":{"summary":[{"kind":"text","text":"The rule's arguments."}]},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","id":597,"typeArguments":[{"type":"reference","id":715,"name":"TObject"},{"type":"reference","id":716,"name":"TValue"}],"name":"FluentRuleCustomizer"}}]}],"groups":[{"title":"Constructors","children":[713]},{"title":"Properties","children":[721,722,723,720,698]},{"title":"Methods","children":[768,724,744,772,741,761,755,749,758,752,746,764,739,727,735]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":239,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L239"}],"typeParameters":[{"id":775,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":776,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}]},{"id":18,"name":"GlobalValidationConfiguration","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Aurelia Validation Configuration API"}]},"children":[{"id":20,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":21,"name":"new GlobalValidationConfiguration","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}}]},{"id":23,"name":"validationTrigger","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/config.ts","line":15,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L15"}],"type":{"type":"reference","id":217,"name":"validateTrigger"},"defaultValue":"GlobalValidationConfiguration.DEFAULT_VALIDATION_TRIGGER"},{"id":22,"name":"validatorType","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/config.ts","line":14,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L14"}],"type":{"type":"reference","id":14,"name":"ValidatorCtor"},"defaultValue":"StandardValidator"},{"id":19,"name":"DEFAULT_VALIDATION_TRIGGER","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/config.ts","line":12,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L12"}],"type":{"type":"reference","id":217,"name":"validateTrigger"},"defaultValue":"validateTrigger.blur"},{"id":32,"name":"apply","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/config.ts","line":37,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L37"}],"signatures":[{"id":33,"name":"apply","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the configuration."}]},"parameters":[{"id":34,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container","qualifiedName":"Container","package":"aurelia-dependency-injection"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":24,"name":"customValidator","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/config.ts","line":20,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L20"}],"signatures":[{"id":25,"name":"customValidator","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Use a custom Validator implementation."}]},"parameters":[{"id":26,"name":"type","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":14,"name":"ValidatorCtor"}}],"type":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}}]},{"id":27,"name":"defaultValidationTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/config.ts","line":25,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L25"}],"signatures":[{"id":28,"name":"defaultValidationTrigger","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":29,"name":"trigger","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"}}],"type":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}}]},{"id":30,"name":"getDefaultValidationTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/config.ts","line":30,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L30"}],"signatures":[{"id":31,"name":"getDefaultValidationTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"}}]}],"groups":[{"title":"Constructors","children":[20]},{"title":"Properties","children":[23,22,19]},{"title":"Methods","children":[32,24,27,30]}],"sources":[{"fileName":"src/config.ts","line":11,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L11"}]},{"id":534,"name":"MessageExpressionValidator","kind":128,"kindString":"Class","flags":{},"children":[{"id":539,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":73,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L73"}],"signatures":[{"id":540,"name":"new MessageExpressionValidator","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":541,"name":"originalMessage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","id":534,"name":"MessageExpressionValidator"},"overwrites":{"type":"reference","name":"ExpressionVisitor.constructor"}}],"overwrites":{"type":"reference","name":"ExpressionVisitor.constructor"}},{"id":542,"name":"originalMessage","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":73,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L73"}],"type":{"type":"intrinsic","name":"string"}},{"id":567,"name":"visitAccessKeyed","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":54,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L54"}],"signatures":[{"id":568,"name":"visitAccessKeyed","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":569,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessKeyed","qualifiedName":"AccessKeyed","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessKeyed"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessKeyed"}},{"id":564,"name":"visitAccessMember","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":50,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L50"}],"signatures":[{"id":565,"name":"visitAccessMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":566,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessMember","qualifiedName":"AccessMember","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessMember"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessMember"}},{"id":543,"name":"visitAccessScope","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":77,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L77"}],"signatures":[{"id":544,"name":"visitAccessScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":545,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"AccessScope","qualifiedName":"AccessScope","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"overwrites":{"type":"reference","name":"ExpressionVisitor.visitAccessScope"}}],"overwrites":{"type":"reference","name":"ExpressionVisitor.visitAccessScope"}},{"id":561,"name":"visitAccessThis","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":42,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L42"}],"signatures":[{"id":562,"name":"visitAccessThis","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":563,"name":"access","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessThis"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAccessThis"}},{"id":555,"name":"visitAssign","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":31,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L31"}],"signatures":[{"id":556,"name":"visitAssign","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":557,"name":"assign","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAssign"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitAssign"}},{"id":582,"name":"visitBinary","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":77,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L77"}],"signatures":[{"id":583,"name":"visitBinary","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":584,"name":"binary","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binary","qualifiedName":"Binary","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBinary"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBinary"}},{"id":549,"name":"visitBindingBehavior","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":21,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L21"}],"signatures":[{"id":550,"name":"visitBindingBehavior","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":551,"name":"behavior","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"BindingBehavior","qualifiedName":"BindingBehavior","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBindingBehavior"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitBindingBehavior"}},{"id":573,"name":"visitCallFunction","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":63,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L63"}],"signatures":[{"id":574,"name":"visitCallFunction","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":575,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallFunction"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallFunction"}},{"id":576,"name":"visitCallMember","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":68,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L68"}],"signatures":[{"id":577,"name":"visitCallMember","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":578,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"CallMember","qualifiedName":"CallMember","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallMember"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallMember"}},{"id":570,"name":"visitCallScope","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":59,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L59"}],"signatures":[{"id":571,"name":"visitCallScope","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":572,"name":"call","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallScope"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitCallScope"}},{"id":546,"name":"visitChain","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":17,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L17"}],"signatures":[{"id":547,"name":"visitChain","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":548,"name":"chain","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitChain"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitChain"}},{"id":558,"name":"visitConditional","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":36,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L36"}],"signatures":[{"id":559,"name":"visitConditional","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":560,"name":"conditional","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Conditional","qualifiedName":"Conditional","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitConditional"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitConditional"}},{"id":588,"name":"visitLiteralArray","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":86,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L86"}],"signatures":[{"id":589,"name":"visitLiteralArray","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":590,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralArray"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralArray"}},{"id":591,"name":"visitLiteralObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":90,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L90"}],"signatures":[{"id":592,"name":"visitLiteralObject","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":593,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralObject"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralObject"}},{"id":585,"name":"visitLiteralPrimitive","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":82,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L82"}],"signatures":[{"id":586,"name":"visitLiteralPrimitive","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":587,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralPrimitive","qualifiedName":"LiteralPrimitive","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralPrimitive"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralPrimitive"}},{"id":594,"name":"visitLiteralString","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":94,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L94"}],"signatures":[{"id":595,"name":"visitLiteralString","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":596,"name":"literal","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"LiteralString","qualifiedName":"LiteralString","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralString"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitLiteralString"}},{"id":579,"name":"visitPrefix","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":73,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L73"}],"signatures":[{"id":580,"name":"visitPrefix","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":581,"name":"prefix","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitPrefix"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitPrefix"}},{"id":552,"name":"visitValueConverter","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/expression-visitor.ts","line":26,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/expression-visitor.ts#L26"}],"signatures":[{"id":553,"name":"visitValueConverter","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":554,"name":"converter","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ValueConverter","qualifiedName":"ValueConverter","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitValueConverter"}}],"inheritedFrom":{"type":"reference","name":"ExpressionVisitor.visitValueConverter"}},{"id":535,"name":"validate","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":68,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L68"}],"signatures":[{"id":536,"name":"validate","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":537,"name":"expression","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}},{"id":538,"name":"originalMessage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"void"}}]}],"groups":[{"title":"Constructors","children":[539]},{"title":"Properties","children":[542]},{"title":"Methods","children":[567,564,543,561,555,582,549,573,576,570,546,558,588,591,585,594,579,552,535]}],"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":67,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L67"}],"extendedTypes":[{"type":"reference","name":"ExpressionVisitor"}]},{"id":59,"name":"PropertyAccessorParser","kind":128,"kindString":"Class","flags":{},"children":[{"id":61,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/property-accessor-parser.ts","line":13,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L13"}],"signatures":[{"id":62,"name":"new PropertyAccessorParser","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":63,"name":"parser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Parser","qualifiedName":"Parser","package":"aurelia-binding"}}],"type":{"type":"reference","id":59,"name":"PropertyAccessorParser"}}]},{"id":64,"name":"parser","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/property-accessor-parser.ts","line":13,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L13"}],"type":{"type":"reference","name":"Parser","qualifiedName":"Parser","package":"aurelia-binding"}},{"id":60,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/property-accessor-parser.ts","line":11,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L11"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"Parser","qualifiedName":"Parser","package":"aurelia-binding"}}},"defaultValue":"..."},{"id":65,"name":"parse","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/property-accessor-parser.ts","line":15,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L15"}],"signatures":[{"id":66,"name":"parse","kind":4096,"kindString":"Call signature","flags":{},"typeParameter":[{"id":67,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":68,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":69,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","id":53,"typeArguments":[{"type":"reference","id":67,"name":"TObject"},{"type":"reference","id":68,"name":"TValue"}],"name":"PropertyAccessor"}]}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}]}],"groups":[{"title":"Constructors","children":[61]},{"title":"Properties","children":[64,60]},{"title":"Methods","children":[65]}],"sources":[{"fileName":"src/property-accessor-parser.ts","line":10,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L10"}]},{"id":440,"name":"Rules","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Sets, unsets and retrieves rules on an object or constructor function."}]},"children":[{"id":452,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":453,"name":"new Rules","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","id":440,"name":"Rules"}}]},{"id":441,"name":"key","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isStatic":true},"comment":{"summary":[{"kind":"text","text":"The name of the property that stores the rules."}]},"sources":[{"fileName":"src/implementation/rules.ts","line":10,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rules.ts#L10"}],"type":{"type":"intrinsic","name":"string"},"defaultValue":"'__rules__'"},{"id":449,"name":"get","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/rules.ts","line":38,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rules.ts#L38"}],"signatures":[{"id":450,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Retrieves the target's rules."}]},"parameters":[{"id":451,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}]}}]},{"id":442,"name":"set","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/rules.ts","line":15,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rules.ts#L15"}],"signatures":[{"id":443,"name":"set","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Applies the rules to a target."}]},"parameters":[{"id":444,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":445,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":446,"name":"unset","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/rules.ts","line":28,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rules.ts#L28"}],"signatures":[{"id":447,"name":"unset","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Removes rules from a target."}]},"parameters":[{"id":448,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]}],"groups":[{"title":"Constructors","children":[452]},{"title":"Properties","children":[441]},{"title":"Methods","children":[449,442,446]}],"sources":[{"fileName":"src/implementation/rules.ts","line":6,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rules.ts#L6"}]},{"id":454,"name":"StandardValidator","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates.\r\nResponsible for validating objects and properties."}]},"children":[{"id":456,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":20,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L20"}],"signatures":[{"id":457,"name":"new StandardValidator","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":458,"name":"messageProvider","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":500,"name":"ValidationMessageProvider"}},{"id":459,"name":"resources","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"ViewResources","qualifiedName":"ViewResources","package":"aurelia-templating"}}],"type":{"type":"reference","id":454,"name":"StandardValidator"},"overwrites":{"type":"reference","id":402,"name":"Validator.constructor"}}],"overwrites":{"type":"reference","id":401,"name":"Validator.constructor"}},{"id":462,"name":"getDisplayName","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":18,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L18"}],"type":{"type":"reflection","declaration":{"id":463,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":18,"character":26,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L18"}],"signatures":[{"id":464,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":465,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}}]}}},{"id":461,"name":"lookupFunctions","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":17,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L17"}],"type":{"type":"reference","name":"LookupFunctions","qualifiedName":"LookupFunctions","package":"aurelia-binding"}},{"id":460,"name":"messageProvider","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":16,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L16"}],"type":{"type":"reference","id":500,"name":"ValidationMessageProvider"}},{"id":455,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":14,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L14"}],"type":{"type":"array","elementType":{"type":"union","types":[{"type":"query","queryType":{"type":"reference","name":"ViewResources","qualifiedName":"ViewResources","package":"aurelia-templating"}},{"type":"query","queryType":{"type":"reference","id":500,"name":"ValidationMessageProvider"}}]}},"defaultValue":"..."},{"id":479,"name":"getMessage","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":63,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L63"}],"signatures":[{"id":480,"name":"getMessage","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":481,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}},{"id":482,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":483,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"string"}}]},{"id":475,"name":"ruleExists","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":53,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L53"}],"signatures":[{"id":476,"name":"ruleExists","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Determines whether a rule exists in a set of rules."}],"blockTags":[{"tag":"@parem","content":[{"kind":"text","text":"rule The rule to find."}]}]},"parameters":[{"id":477,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rules to search."}]},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}},{"id":478,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}],"type":{"type":"intrinsic","name":"boolean"},"overwrites":{"type":"reference","id":413,"name":"Validator.ruleExists"}}],"overwrites":{"type":"reference","id":412,"name":"Validator.ruleExists"}},{"id":491,"name":"validate","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":138,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L138"}],"signatures":[{"id":492,"name":"validate","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":493,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":494,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":495,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}]}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}]},{"id":471,"name":"validateObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":44,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L44"}],"signatures":[{"id":472,"name":"validateObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates all rules for specified object and it's properties."}]},"parameters":[{"id":473,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object to validate."}]},"type":{"type":"intrinsic","name":"any"}},{"id":474,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. If unspecified, the rules will be looked up using the metadata\r\nfor the object created by ValidationRules....on(class/object)"}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"},"overwrites":{"type":"reference","id":409,"name":"Validator.validateObject"}}],"overwrites":{"type":"reference","id":408,"name":"Validator.validateObject"}},{"id":466,"name":"validateProperty","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":34,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L34"}],"signatures":[{"id":467,"name":"validateProperty","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates the specified property."}]},"parameters":[{"id":468,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object to validate."}]},"type":{"type":"intrinsic","name":"any"}},{"id":469,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the property to validate."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":470,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. If unspecified, the rules will be looked up using the metadata\r\nfor the object created by ValidationRules....on(class/object)"}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"},"overwrites":{"type":"reference","id":404,"name":"Validator.validateProperty"}}],"overwrites":{"type":"reference","id":403,"name":"Validator.validateProperty"}},{"id":484,"name":"validateRuleSequence","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/standard-validator.ts","line":85,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L85"}],"signatures":[{"id":485,"name":"validateRuleSequence","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":486,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":487,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":488,"name":"ruleSequence","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}},{"id":489,"name":"sequence","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"number"}},{"id":490,"name":"results","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}]}],"groups":[{"title":"Constructors","children":[456]},{"title":"Properties","children":[462,461,460,455]},{"title":"Methods","children":[479,475,491,471,466,484]}],"sources":[{"fileName":"src/implementation/standard-validator.ts","line":13,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/standard-validator.ts#L13"}],"extendedTypes":[{"type":"reference","id":400,"name":"Validator"}]},{"id":70,"name":"ValidateBindingBehavior","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Binding behavior. Indicates the bound property should be validated\r\nwhen the validate trigger specified by the associated controller's\r\nvalidateTrigger property occurs."}]},"children":[{"id":72,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":73,"name":"new ValidateBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":74,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":70,"name":"ValidateBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":71,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":14,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L14"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":78,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":79,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":80,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":81,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":82,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":83,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":75,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":16,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L16"}],"signatures":[{"id":76,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":77,"name":"controller","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":224,"name":"ValidationController"}}],"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":84,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":85,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":86,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[72]},{"title":"Properties","children":[71]},{"title":"Methods","children":[78,75,84]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":13,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L13"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":183,"name":"ValidateEvent","kind":128,"kindString":"Class","flags":{},"children":[{"id":184,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-event.ts","line":6,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L6"}],"signatures":[{"id":185,"name":"new ValidateEvent","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":186,"name":"type","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The type of validate event. Either \"validate\" or \"reset\"."}]},"type":{"type":"union","types":[{"type":"literal","value":"reset"},{"type":"literal","value":"validate"}]}},{"id":187,"name":"errors","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The controller's current array of errors. For an array containing both\r\nfailed rules and passed rules, use the \"results\" property."}]},"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":188,"name":"results","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The controller's current array of validate results. This\r\nincludes both passed rules and failed rules. For an array of only failed rules,\r\nuse the \"errors\" property."}]},"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":189,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\nthe controller's validate/reset method was called with no instruction argument."}]},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":196,"name":"ValidateInstruction"}]}},{"id":190,"name":"controllerValidateResult","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"In events with type === \"validate\", this property will contain the result\r\nof validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\nto access the validate results specific to the call to \"validate\"\r\n(as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\nset of results/errors)."}]},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":35,"name":"ControllerValidateResult"}]}}],"type":{"type":"reference","id":183,"name":"ValidateEvent"}}]},{"id":195,"name":"controllerValidateResult","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isReadonly":true},"comment":{"summary":[{"kind":"text","text":"In events with type === \"validate\", this property will contain the result\r\nof validating the instruction (see \"instruction\" property). Use the controllerValidateResult\r\nto access the validate results specific to the call to \"validate\"\r\n(as opposed to using the \"results\" and \"errors\" properties to access the controller's entire\r\nset of results/errors)."}]},"sources":[{"fileName":"src/validate-event.ts","line":38,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L38"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":35,"name":"ControllerValidateResult"}]}},{"id":192,"name":"errors","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isReadonly":true},"comment":{"summary":[{"kind":"text","text":"The controller's current array of errors. For an array containing both\r\nfailed rules and passed rules, use the \"results\" property."}]},"sources":[{"fileName":"src/validate-event.ts","line":16,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L16"}],"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":194,"name":"instruction","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isReadonly":true},"comment":{"summary":[{"kind":"text","text":"The instruction passed to the \"validate\" or \"reset\" event. Will be null when\r\nthe controller's validate/reset method was called with no instruction argument."}]},"sources":[{"fileName":"src/validate-event.ts","line":29,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L29"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":196,"name":"ValidateInstruction"}]}},{"id":193,"name":"results","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isReadonly":true},"comment":{"summary":[{"kind":"text","text":"The controller's current array of validate results. This\r\nincludes both passed rules and failed rules. For an array of only failed rules,\r\nuse the \"errors\" property."}]},"sources":[{"fileName":"src/validate-event.ts","line":23,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L23"}],"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":191,"name":"type","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isReadonly":true},"comment":{"summary":[{"kind":"text","text":"The type of validate event. Either \"validate\" or \"reset\"."}]},"sources":[{"fileName":"src/validate-event.ts","line":10,"character":20,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L10"}],"type":{"type":"union","types":[{"type":"literal","value":"reset"},{"type":"literal","value":"validate"}]}}],"groups":[{"title":"Constructors","children":[184]},{"title":"Properties","children":[195,192,194,193,191]}],"sources":[{"fileName":"src/validate-event.ts","line":5,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-event.ts#L5"}]},{"id":87,"name":"ValidateManuallyBindingBehavior","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Binding behavior. Indicates the bound property will be validated\r\nmanually, by calling controller.validate(). No automatic validation\r\ntriggered by data-entry or blur will occur."}]},"children":[{"id":89,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":90,"name":"new ValidateManuallyBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":91,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":87,"name":"ValidateManuallyBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":88,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":28,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L28"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":94,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":95,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":96,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":97,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":98,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":99,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":92,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":30,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L30"}],"signatures":[{"id":93,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":100,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":101,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":102,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[89]},{"title":"Properties","children":[88]},{"title":"Methods","children":[94,92,100]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":27,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L27"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":103,"name":"ValidateOnBlurBindingBehavior","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Binding behavior. Indicates the bound property should be validated\r\nwhen the associated element blurs."}]},"children":[{"id":105,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":106,"name":"new ValidateOnBlurBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":107,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":103,"name":"ValidateOnBlurBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":104,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":41,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L41"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":110,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":111,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":112,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":113,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":114,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":115,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":108,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":43,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L43"}],"signatures":[{"id":109,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":116,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":117,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":118,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[105]},{"title":"Properties","children":[104]},{"title":"Methods","children":[110,108,116]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":40,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L40"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":119,"name":"ValidateOnChangeBindingBehavior","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Binding behavior. Indicates the bound property should be validated\r\nwhen the associated element is changed by the user, causing a change\r\nto the model."}]},"children":[{"id":121,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":122,"name":"new ValidateOnChangeBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":123,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":119,"name":"ValidateOnChangeBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":120,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":55,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L55"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":126,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":127,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":128,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":129,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":130,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":131,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":124,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":57,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L57"}],"signatures":[{"id":125,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":132,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":133,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":134,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[121]},{"title":"Properties","children":[120]},{"title":"Methods","children":[126,124,132]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":54,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L54"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":135,"name":"ValidateOnChangeOrBlurBindingBehavior","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Binding behavior. Indicates the bound property should be validated\r\nwhen the associated element blurs or is changed by the user, causing\r\na change to the model."}]},"children":[{"id":137,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":138,"name":"new ValidateOnChangeOrBlurBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":139,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":135,"name":"ValidateOnChangeOrBlurBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":136,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":69,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L69"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":142,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":143,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":144,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":145,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":146,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":147,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":140,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":71,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L71"}],"signatures":[{"id":141,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":148,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":149,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":150,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[137]},{"title":"Properties","children":[136]},{"title":"Methods","children":[142,140,148]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":68,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L68"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":167,"name":"ValidateOnChangeOrFocusoutBindingBehavior","kind":128,"kindString":"Class","flags":{},"children":[{"id":169,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":170,"name":"new ValidateOnChangeOrFocusoutBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":171,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":167,"name":"ValidateOnChangeOrFocusoutBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":168,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":87,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L87"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":174,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":175,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":176,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":177,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":178,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":179,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":172,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":89,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L89"}],"signatures":[{"id":173,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":180,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":181,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":182,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[169]},{"title":"Properties","children":[168]},{"title":"Methods","children":[174,172,180]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":86,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L86"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":151,"name":"ValidateOnFocusoutBindingBehavior","kind":128,"kindString":"Class","flags":{},"children":[{"id":153,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":14,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L14"}],"signatures":[{"id":154,"name":"new ValidateOnFocusoutBindingBehavior","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":155,"name":"taskQueue","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}],"type":{"type":"reference","id":151,"name":"ValidateOnFocusoutBindingBehavior"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.constructor"}},{"id":152,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":78,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L78"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"TaskQueue","qualifiedName":"TaskQueue","package":"aurelia-task-queue"}}},"defaultValue":"..."},{"id":158,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":18,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L18"}],"signatures":[{"id":159,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":160,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":161,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":162,"name":"rulesOrController","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":163,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.bind"}},{"id":156,"name":"getValidateTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior.ts","line":80,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L80"}],"signatures":[{"id":157,"name":"getValidateTrigger","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":217,"name":"validateTrigger"},"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}}],"overwrites":{"type":"reference","name":"ValidateBindingBehaviorBase.getValidateTrigger"}},{"id":164,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-binding-behavior-base.ts","line":95,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior-base.ts#L95"}],"signatures":[{"id":165,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":166,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"},"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"inheritedFrom":{"type":"reference","name":"ValidateBindingBehaviorBase.unbind"}}],"groups":[{"title":"Constructors","children":[153]},{"title":"Properties","children":[152]},{"title":"Methods","children":[158,156,164]}],"sources":[{"fileName":"src/validate-binding-behavior.ts","line":77,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-binding-behavior.ts#L77"}],"extendedTypes":[{"type":"reference","name":"ValidateBindingBehaviorBase"}]},{"id":200,"name":"ValidateResult","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"The result of validating an individual validation rule."}]},"children":[{"id":202,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validate-result.ts","line":18,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L18"}],"signatures":[{"id":203,"name":"new ValidateResult","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":204,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rule associated with the result. Validator implementation specific."}]},"type":{"type":"intrinsic","name":"any"}},{"id":205,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object that was validated."}]},"type":{"type":"intrinsic","name":"any"}},{"id":206,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the property that was validated."}]},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":207,"name":"valid","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"boolean"}},{"id":208,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]},"defaultValue":"null"}],"type":{"type":"reference","id":200,"name":"ValidateResult"}}]},{"id":209,"name":"id","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"A number that uniquely identifies the result instance."}]},"sources":[{"fileName":"src/validate-result.ts","line":10,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L10"}],"type":{"type":"intrinsic","name":"number"}},{"id":214,"name":"message","kind":1024,"kindString":"Property","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-result.ts","line":23,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L23"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]},"defaultValue":"null"},{"id":211,"name":"object","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"The object that was validated."}]},"sources":[{"fileName":"src/validate-result.ts","line":20,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L20"}],"type":{"type":"intrinsic","name":"any"}},{"id":212,"name":"propertyName","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"The name of the property that was validated."}]},"sources":[{"fileName":"src/validate-result.ts","line":21,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L21"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":210,"name":"rule","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"The rule associated with the result. Validator implementation specific."}]},"sources":[{"fileName":"src/validate-result.ts","line":19,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L19"}],"type":{"type":"intrinsic","name":"any"}},{"id":213,"name":"valid","kind":1024,"kindString":"Property","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-result.ts","line":22,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L22"}],"type":{"type":"intrinsic","name":"boolean"}},{"id":201,"name":"nextId","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isStatic":true},"sources":[{"fileName":"src/validate-result.ts","line":5,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L5"}],"type":{"type":"intrinsic","name":"number"},"defaultValue":"0"},{"id":215,"name":"toString","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validate-result.ts","line":28,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L28"}],"signatures":[{"id":216,"name":"toString","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"}]}}]}],"groups":[{"title":"Constructors","children":[202]},{"title":"Properties","children":[209,214,211,212,210,213,201]},{"title":"Methods","children":[215]}],"sources":[{"fileName":"src/validate-result.ts","line":4,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-result.ts#L4"}]},{"id":224,"name":"ValidationController","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Orchestrates validation.\r\nManages a set of bindings, renderers and objects.\r\nExposes the current list of validation results for binding purposes."}]},"children":[{"id":226,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":58,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L58"}],"signatures":[{"id":227,"name":"new ValidationController","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":228,"name":"validator","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":400,"name":"Validator"}},{"id":229,"name":"propertyParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":59,"name":"PropertyAccessorParser"}},{"id":230,"name":"config","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}}],"type":{"type":"reference","id":224,"name":"ValidationController"}}]},{"id":231,"name":"bindings","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":22,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L22"}],"type":{"type":"reference","typeArguments":[{"type":"reference","name":"Binding","qualifiedName":"Binding","package":"aurelia-binding"},{"type":"reference","id":321,"name":"BindingInfo"}],"name":"Map","qualifiedName":"Map","package":"typescript"},"defaultValue":"..."},{"id":236,"name":"elements","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":43,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L43"}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":200,"name":"ValidateResult"},{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}],"name":"Map","qualifiedName":"Map","package":"typescript"},"defaultValue":"..."},{"id":234,"name":"errors","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"Validation errors that have been rendered by the controller."}]},"sources":[{"fileName":"src/validation-controller.ts","line":35,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L35"}],"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}},"defaultValue":"[]"},{"id":240,"name":"eventCallbacks","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":56,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L56"}],"type":{"type":"array","elementType":{"type":"reflection","declaration":{"id":241,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":56,"character":27,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L56"}],"signatures":[{"id":242,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":243,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":183,"name":"ValidateEvent"}}],"type":{"type":"intrinsic","name":"void"}}]}}},"defaultValue":"[]"},{"id":239,"name":"finishValidating","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":54,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L54"}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"any"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"},"defaultValue":"..."},{"id":237,"name":"objects","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":46,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L46"}],"type":{"type":"reference","typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Map","qualifiedName":"Map","package":"typescript"},"defaultValue":"..."},{"id":245,"name":"propertyParser","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":60,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L60"}],"type":{"type":"reference","id":59,"name":"PropertyAccessorParser"}},{"id":232,"name":"renderers","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":25,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L25"}],"type":{"type":"array","elementType":{"type":"reference","id":396,"name":"ValidationRenderer"}},"defaultValue":"[]"},{"id":233,"name":"results","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"comment":{"summary":[{"kind":"text","text":"Validation results that have been rendered by the controller."}]},"sources":[{"fileName":"src/validation-controller.ts","line":30,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L30"}],"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}},"defaultValue":"[]"},{"id":238,"name":"validateTrigger","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"The trigger that will invoke automatic validation of a property used in a binding."}]},"sources":[{"fileName":"src/validation-controller.ts","line":51,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L51"}],"type":{"type":"reference","id":217,"name":"validateTrigger"}},{"id":235,"name":"validating","kind":1024,"kindString":"Property","flags":{"isPublic":true},"comment":{"summary":[{"kind":"text","text":"Whether the controller is currently validating."}]},"sources":[{"fileName":"src/validation-controller.ts","line":40,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L40"}],"type":{"type":"intrinsic","name":"boolean"},"defaultValue":"false"},{"id":244,"name":"validator","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":59,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L59"}],"type":{"type":"reference","id":400,"name":"Validator"}},{"id":225,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validation-controller.ts","line":19,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L19"}],"type":{"type":"array","elementType":{"type":"union","types":[{"type":"query","queryType":{"type":"reference","id":400,"name":"Validator"}},{"type":"query","queryType":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}},{"type":"query","queryType":{"type":"reference","id":59,"name":"PropertyAccessorParser"}}]}},"defaultValue":"..."},{"id":263,"name":"addError","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":110,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L110"}],"signatures":[{"id":264,"name":"addError","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Adds and renders an error."}]},"typeParameter":[{"id":265,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":266,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}},{"id":267,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":265,"name":"TObject"}},{"id":268,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"reference","id":53,"typeArguments":[{"type":"reference","id":265,"name":"TObject"},{"type":"intrinsic","name":"string"}],"name":"PropertyAccessor"}]},"defaultValue":"null"}],"type":{"type":"reference","id":200,"name":"ValidateResult"}}]},{"id":256,"name":"addObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":91,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L91"}],"signatures":[{"id":257,"name":"addObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Adds an object to the set of objects that should be validated when validate is called."}]},"parameters":[{"id":258,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object."}]},"type":{"type":"intrinsic","name":"any"}},{"id":259,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. The rules. If rules aren't supplied the Validator implementation will lookup the rules."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":272,"name":"addRenderer","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":139,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L139"}],"signatures":[{"id":273,"name":"addRenderer","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Adds a renderer."}]},"parameters":[{"id":274,"name":"renderer","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The renderer."}]},"type":{"type":"reference","id":396,"name":"ValidationRenderer"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":312,"name":"changeTrigger","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":418,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L418"}],"signatures":[{"id":313,"name":"changeTrigger","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Changes the controller's validateTrigger."}]},"parameters":[{"id":314,"name":"newTrigger","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The new validateTrigger"}]},"type":{"type":"reference","id":217,"name":"validateTrigger"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":298,"name":"getAssociatedElements","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":288,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L288"}],"signatures":[{"id":299,"name":"getAssociatedElements","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Gets the elements associated with an object and propertyName (if any)."}]},"parameters":[{"id":300,"name":"__namedParameters","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":200,"name":"ValidateResult"}}],"type":{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}}]},{"id":286,"name":"getInstructionPredicate","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":184,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L184"}],"signatures":[{"id":287,"name":"getInstructionPredicate","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Interprets the instruction and returns a predicate that will identify\r\nrelevant results in the list of rendered validation results."}]},"parameters":[{"id":288,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":196,"name":"ValidateInstruction"}}],"type":{"type":"reflection","declaration":{"id":289,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":184,"character":70,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L184"}],"signatures":[{"id":290,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Interprets the instruction and returns a predicate that will identify\r\nrelevant results in the list of rendered validation results."}]},"parameters":[{"id":291,"name":"result","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":200,"name":"ValidateResult"}}],"type":{"type":"intrinsic","name":"boolean"}}]}}}]},{"id":317,"name":"invokeCallbacks","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":441,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L441"}],"signatures":[{"id":318,"name":"invokeCallbacks","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":319,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"intrinsic","name":"undefined"},{"type":"reference","id":196,"name":"ValidateInstruction"}]}},{"id":320,"name":"result","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":35,"name":"ControllerValidateResult"}]}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":301,"name":"processResultDelta","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller.ts","line":299,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L299"}],"signatures":[{"id":302,"name":"processResultDelta","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":303,"name":"kind","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"union","types":[{"type":"literal","value":"reset"},{"type":"literal","value":"validate"}]}},{"id":304,"name":"oldResults","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":305,"name":"newResults","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":278,"name":"registerBinding","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":167,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L167"}],"signatures":[{"id":279,"name":"registerBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Registers a binding with the controller."}]},"parameters":[{"id":280,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The binding instance."}]},"type":{"type":"reference","name":"Binding","qualifiedName":"Binding","package":"aurelia-binding"}},{"id":281,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The DOM element."}]},"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}},{"id":282,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"(optional) rules associated with the binding. Validator implementation specific."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":269,"name":"removeError","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":129,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L129"}],"signatures":[{"id":270,"name":"removeError","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Removes and unrenders an error."}]},"parameters":[{"id":271,"name":"result","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":200,"name":"ValidateResult"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":260,"name":"removeObject","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":99,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L99"}],"signatures":[{"id":261,"name":"removeObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Removes an object from the set of objects that should be validated when validate is called."}]},"parameters":[{"id":262,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":275,"name":"removeRenderer","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":152,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L152"}],"signatures":[{"id":276,"name":"removeRenderer","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Removes a renderer."}]},"parameters":[{"id":277,"name":"renderer","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The renderer."}]},"type":{"type":"reference","id":396,"name":"ValidationRenderer"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":295,"name":"reset","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":278,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L278"}],"signatures":[{"id":296,"name":"reset","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Resets any rendered validation results (unrenders)."}]},"parameters":[{"id":297,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. Instructions on what to reset. If unspecified all rendered results\r\nwill be unrendered."}]},"type":{"type":"reference","id":196,"name":"ValidateInstruction"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":309,"name":"resetBinding","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":398,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L398"}],"signatures":[{"id":310,"name":"resetBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Resets the results for a property associated with a binding."}]},"parameters":[{"id":311,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binding","qualifiedName":"Binding","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":315,"name":"revalidateErrors","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":431,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L431"}],"signatures":[{"id":316,"name":"revalidateErrors","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Revalidates the controller's current set of errors."}]},"type":{"type":"intrinsic","name":"void"}}]},{"id":246,"name":"subscribe","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":73,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L73"}],"signatures":[{"id":247,"name":"subscribe","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Subscribe to controller validate and reset events. These events occur when the\r\ncontroller's \"validate\"\" and \"reset\" methods are called."}]},"parameters":[{"id":248,"name":"callback","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The callback to be invoked when the controller validates or resets."}]},"type":{"type":"reflection","declaration":{"id":249,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":73,"character":29,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L73"}],"signatures":[{"id":250,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":251,"name":"event","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":183,"name":"ValidateEvent"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"reflection","declaration":{"id":252,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":253,"name":"dispose","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":76,"character":6,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L76"}],"type":{"type":"reflection","declaration":{"id":254,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":76,"character":15,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L76"}],"signatures":[{"id":255,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]}},"defaultValue":"..."}],"groups":[{"title":"Properties","children":[253]}],"sources":[{"fileName":"src/validation-controller.ts","line":75,"character":11,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L75"}]}}}]},{"id":283,"name":"unregisterBinding","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":175,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L175"}],"signatures":[{"id":284,"name":"unregisterBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Unregisters a binding with the controller."}]},"parameters":[{"id":285,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The binding instance."}]},"type":{"type":"reference","name":"Binding","qualifiedName":"Binding","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":292,"name":"validate","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":207,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L207"}],"signatures":[{"id":293,"name":"validate","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates and renders results."}]},"parameters":[{"id":294,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. Instructions on what to validate. If undefined, all\r\nobjects and bindings will be validated."}]},"type":{"type":"reference","id":196,"name":"ValidateInstruction"}}],"type":{"type":"reference","typeArguments":[{"type":"reference","id":35,"name":"ControllerValidateResult"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}]},{"id":306,"name":"validateBinding","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller.ts","line":377,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L377"}],"signatures":[{"id":307,"name":"validateBinding","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates the property associated with a binding."}]},"parameters":[{"id":308,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Binding","qualifiedName":"Binding","package":"aurelia-binding"}}],"type":{"type":"intrinsic","name":"void"}}]}],"groups":[{"title":"Constructors","children":[226]},{"title":"Properties","children":[231,236,234,240,239,237,245,232,233,238,235,244,225]},{"title":"Methods","children":[263,256,272,312,298,286,317,301,278,269,260,275,295,309,315,246,283,292,306]}],"sources":[{"fileName":"src/validation-controller.ts","line":18,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L18"}]},{"id":328,"name":"ValidationControllerFactory","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Creates ValidationController instances."}]},"children":[{"id":332,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validation-controller-factory.ts","line":15,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L15"}],"signatures":[{"id":333,"name":"new ValidationControllerFactory","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":334,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container","qualifiedName":"Container","package":"aurelia-dependency-injection"}}],"type":{"type":"reference","id":328,"name":"ValidationControllerFactory"}}]},{"id":335,"name":"container","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-controller-factory.ts","line":15,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L15"}],"type":{"type":"reference","name":"Container","qualifiedName":"Container","package":"aurelia-dependency-injection"}},{"id":336,"name":"create","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller-factory.ts","line":20,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L20"}],"signatures":[{"id":337,"name":"create","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Creates a new controller instance."}]},"parameters":[{"id":338,"name":"validator","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":400,"name":"Validator"}}],"type":{"type":"reference","id":224,"name":"ValidationController"}}]},{"id":339,"name":"createForCurrentScope","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-controller-factory.ts","line":33,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L33"}],"signatures":[{"id":340,"name":"createForCurrentScope","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Creates a new controller and registers it in the current element's container so that it's\r\navailable to the validate binding behavior and renderers."}]},"parameters":[{"id":341,"name":"validator","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":400,"name":"Validator"}}],"type":{"type":"reference","id":224,"name":"ValidationController"}}]},{"id":329,"name":"get","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validation-controller-factory.ts","line":11,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L11"}],"signatures":[{"id":330,"name":"get","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":331,"name":"container","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Container","qualifiedName":"Container","package":"aurelia-dependency-injection"}}],"type":{"type":"reference","id":328,"name":"ValidationControllerFactory"}}]}],"groups":[{"title":"Constructors","children":[332]},{"title":"Properties","children":[335]},{"title":"Methods","children":[336,339,329]}],"sources":[{"fileName":"src/validation-controller-factory.ts","line":10,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller-factory.ts#L10"}]},{"id":345,"name":"ValidationErrorsCustomAttribute","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Renders validation results."}]},"children":[{"id":350,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":29,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L29"}],"signatures":[{"id":351,"name":"new ValidationErrorsCustomAttribute","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":352,"name":"boundaryElement","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}},{"id":353,"name":"controllerAccessor","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":354,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":29,"character":76,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L29"}],"signatures":[{"id":355,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":224,"name":"ValidationController"}}]}}}],"type":{"type":"reference","id":345,"name":"ValidationErrorsCustomAttribute"}}]},{"id":359,"name":"boundaryElement","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":29,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L29"}],"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}},{"id":356,"name":"controller","kind":1024,"kindString":"Property","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":22,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L22"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","id":224,"name":"ValidationController"}]},"defaultValue":"null"},{"id":360,"name":"controllerAccessor","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":29,"character":56,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L29"}],"type":{"type":"reflection","declaration":{"id":361,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":29,"character":76,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L29"}],"signatures":[{"id":362,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"reference","id":224,"name":"ValidationController"}}]}}},{"id":357,"name":"errors","kind":1024,"kindString":"Property","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":25,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L25"}],"type":{"type":"array","elementType":{"type":"reference","id":342,"name":"RenderedError"}},"defaultValue":"[]"},{"id":358,"name":"errorsInternal","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":27,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L27"}],"type":{"type":"array","elementType":{"type":"reference","id":342,"name":"RenderedError"}},"defaultValue":"[]"},{"id":371,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":68,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L68"}],"signatures":[{"id":372,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]},{"id":365,"name":"interestingElements","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":42,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L42"}],"signatures":[{"id":366,"name":"interestingElements","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":367,"name":"elements","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}}],"type":{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}}]},{"id":368,"name":"render","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":46,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L46"}],"signatures":[{"id":369,"name":"render","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Render the validation results."}]},"parameters":[{"id":370,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The render instruction. Defines which results to render and which\r\nresults to unrender."}]},"type":{"type":"reference","id":392,"name":"RenderInstruction"}}],"type":{"type":"intrinsic","name":"void"},"implementationOf":{"type":"reference","id":398,"name":"ValidationRenderer.render"}}],"implementationOf":{"type":"reference","id":397,"name":"ValidationRenderer.render"}},{"id":363,"name":"sort","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":32,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L32"}],"signatures":[{"id":364,"name":"sort","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]},{"id":373,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":76,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L76"}],"signatures":[{"id":374,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]},{"id":346,"name":"inject","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":17,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L17"}],"signatures":[{"id":347,"name":"inject","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"tuple","elements":[{"type":"reflection","declaration":{"id":348,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"node_modules/typescript/lib/lib.dom.d.ts","line":5121,"character":21}],"signatures":[{"id":349,"name":"new inject","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}]}},{"type":"reference","typeArguments":[{"type":"reference","id":224,"name":"ValidationController"},{"type":"intrinsic","name":"any"},{"type":"array","elementType":{"type":"intrinsic","name":"any"}}],"name":"Lazy","qualifiedName":"Lazy","package":"aurelia-dependency-injection"}]}}]}],"groups":[{"title":"Constructors","children":[350]},{"title":"Properties","children":[359,356,360,357,358]},{"title":"Methods","children":[371,365,368,363,373,346]}],"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":15,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L15"}],"implementedTypes":[{"type":"reference","id":396,"name":"ValidationRenderer"}]},{"id":515,"name":"ValidationMessageParser","kind":128,"kindString":"Class","flags":{},"children":[{"id":517,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":22,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L22"}],"signatures":[{"id":518,"name":"new ValidationMessageParser","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":519,"name":"bindinqLanguage","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"BindingLanguage","qualifiedName":"BindingLanguage","package":"aurelia-templating"}}],"type":{"type":"reference","id":515,"name":"ValidationMessageParser"}}]},{"id":527,"name":"bindinqLanguage","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":22,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L22"}],"type":{"type":"reference","name":"BindingLanguage","qualifiedName":"BindingLanguage","package":"aurelia-templating"}},{"id":523,"name":"cache","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":20,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L20"}],"type":{"type":"reflection","declaration":{"id":524,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":20,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L20"}],"indexSignature":{"id":525,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":526,"name":"message","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}}}},"defaultValue":"{}"},{"id":520,"name":"emptyStringExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":17,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L17"}],"type":{"type":"reference","name":"LiteralString","qualifiedName":"LiteralString","package":"aurelia-binding"},"defaultValue":"..."},{"id":521,"name":"nullExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":18,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L18"}],"type":{"type":"reference","name":"LiteralPrimitive","qualifiedName":"LiteralPrimitive","package":"aurelia-binding"},"defaultValue":"..."},{"id":522,"name":"undefinedExpression","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":19,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L19"}],"type":{"type":"reference","name":"LiteralPrimitive","qualifiedName":"LiteralPrimitive","package":"aurelia-binding"},"defaultValue":"..."},{"id":516,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":15,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L15"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","name":"BindingLanguage","qualifiedName":"BindingLanguage","package":"aurelia-templating"}}},"defaultValue":"..."},{"id":531,"name":"coalesce","kind":2048,"kindString":"Method","flags":{"isPrivate":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":53,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L53"}],"signatures":[{"id":532,"name":"coalesce","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":533,"name":"part","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}}],"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}}]},{"id":528,"name":"parse","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":24,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L24"}],"signatures":[{"id":529,"name":"parse","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":530,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}}]}],"groups":[{"title":"Constructors","children":[517]},{"title":"Properties","children":[527,523,520,521,522,516]},{"title":"Methods","children":[531,528]}],"sources":[{"fileName":"src/implementation/validation-message-parser.ts","line":14,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-message-parser.ts#L14"}]},{"id":500,"name":"ValidationMessageProvider","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Retrieves validation messages and property display names."}]},"children":[{"id":502,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":36,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L36"}],"signatures":[{"id":503,"name":"new ValidationMessageProvider","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":504,"name":"parser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":515,"name":"ValidationMessageParser"}}],"type":{"type":"reference","id":500,"name":"ValidationMessageProvider"}}]},{"id":505,"name":"parser","kind":1024,"kindString":"Property","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":36,"character":21,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L36"}],"type":{"type":"reference","id":515,"name":"ValidationMessageParser"}},{"id":501,"name":"inject","kind":1024,"kindString":"Property","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":34,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L34"}],"type":{"type":"array","elementType":{"type":"query","queryType":{"type":"reference","id":515,"name":"ValidationMessageParser"}}},"defaultValue":"..."},{"id":509,"name":"getDisplayName","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":58,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L58"}],"signatures":[{"id":510,"name":"getDisplayName","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Formulates a property display name using the property name and the configured\r\ndisplayName (if provided).\r\nOverride this with your own custom logic."}]},"parameters":[{"id":511,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The property name."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}},{"id":512,"name":"displayName","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"reflection","declaration":{"id":513,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":58,"character":86,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L58"}],"signatures":[{"id":514,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"string"}}]}}]}}],"type":{"type":"intrinsic","name":"string"}}]},{"id":506,"name":"getMessage","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":42,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L42"}],"signatures":[{"id":507,"name":"getMessage","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Returns a message binding expression that corresponds to the key."}]},"parameters":[{"id":508,"name":"key","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The message key."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}}]}],"groups":[{"title":"Constructors","children":[502]},{"title":"Properties","children":[505,501]},{"title":"Methods","children":[509,506]}],"sources":[{"fileName":"src/implementation/validation-messages.ts","line":33,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L33"}]},{"id":375,"name":"ValidationRendererCustomAttribute","kind":128,"kindString":"Class","flags":{},"children":[{"id":376,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":377,"name":"new ValidationRendererCustomAttribute","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","id":375,"name":"ValidationRendererCustomAttribute"}}]},{"id":378,"name":"container","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":8,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L8"}],"type":{"type":"intrinsic","name":"any"}},{"id":379,"name":"controller","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":9,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L9"}],"type":{"type":"reference","id":224,"name":"ValidationController"}},{"id":381,"name":"renderer","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":11,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L11"}],"type":{"type":"reference","id":396,"name":"ValidationRenderer"}},{"id":380,"name":"value","kind":1024,"kindString":"Property","flags":{"isPrivate":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":10,"character":10,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L10"}],"type":{"type":"intrinsic","name":"string"}},{"id":385,"name":"bind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":17,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L17"}],"signatures":[{"id":386,"name":"bind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]},{"id":382,"name":"created","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":13,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L13"}],"signatures":[{"id":383,"name":"created","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":384,"name":"view","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":387,"name":"unbind","kind":2048,"kindString":"Method","flags":{"isPublic":true},"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":23,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L23"}],"signatures":[{"id":388,"name":"unbind","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"void"}}]}],"groups":[{"title":"Constructors","children":[376]},{"title":"Properties","children":[378,379,381,380]},{"title":"Methods","children":[385,382,387]}],"sources":[{"fileName":"src/validation-renderer-custom-attribute.ts","line":6,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer-custom-attribute.ts#L6"}]},{"id":803,"name":"ValidationRules","kind":128,"kindString":"Class","flags":{},"comment":{"summary":[{"kind":"text","text":"Fluent rule definition API."}]},"children":[{"id":841,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":842,"name":"new ValidationRules","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","id":803,"name":"ValidationRules"}}]},{"id":804,"name":"parsers","kind":1024,"kindString":"Property","flags":{"isPrivate":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":510,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L510"}],"type":{"type":"reference","id":843,"name":"Parsers"}},{"id":817,"name":"customRule","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":542,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L542"}],"signatures":[{"id":818,"name":"customRule","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Defines a custom rule."}]},"parameters":[{"id":819,"name":"name","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the custom rule. Also serves as the message key."}]},"type":{"type":"intrinsic","name":"string"}},{"id":820,"name":"condition","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rule function."}]},"type":{"type":"reflection","declaration":{"id":821,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":544,"character":15,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L544"}],"signatures":[{"id":822,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":823,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":824,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"intrinsic","name":"any"}},{"id":825,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}},{"id":826,"name":"message","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The message expression"}]},"type":{"type":"intrinsic","name":"string"}},{"id":827,"name":"argsToConfig","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"A function that maps the rule's arguments to a \"config\"\r\nobject that can be used when evaluating the message expression."}]},"type":{"type":"reflection","declaration":{"id":828,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":546,"character":19,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L546"}],"signatures":[{"id":829,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":830,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":809,"name":"ensure","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":523,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L523"}],"signatures":[{"id":810,"name":"ensure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Target a property with validation rules."}]},"typeParameter":[{"id":811,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":812,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"parameters":[{"id":813,"name":"property","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The property to target. Can be the property name or a property accessor function."}]},"type":{"type":"union","types":[{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"},{"type":"reference","id":53,"typeArguments":[{"type":"reference","id":811,"name":"TObject"},{"type":"reference","id":812,"name":"TValue"}],"name":"PropertyAccessor"}]}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":811,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":814,"name":"ensureObject","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":530,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L530"}],"signatures":[{"id":815,"name":"ensureObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Targets an object with validation rules."}]},"typeParameter":[{"id":816,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}}],"type":{"type":"reference","id":697,"typeArguments":[{"type":"reference","id":816,"name":"TObject"},{"type":"intrinsic","name":"any"}],"name":"FluentRules"}}]},{"id":805,"name":"initialize","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":512,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L512"}],"signatures":[{"id":806,"name":"initialize","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":807,"name":"messageParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":515,"name":"ValidationMessageParser"}},{"id":808,"name":"propertyParser","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":59,"name":"PropertyAccessorParser"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":838,"name":"off","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":573,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L573"}],"signatures":[{"id":839,"name":"off","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Removes the rules from a class or object."}]},"parameters":[{"id":840,"name":"target","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"A class or object."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":831,"name":"taggedRules","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":557,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L557"}],"signatures":[{"id":832,"name":"taggedRules","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Returns rules with the matching tag."}]},"parameters":[{"id":833,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rules to search."}]},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}},{"id":834,"name":"tag","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The tag to search for."}]},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}}]},{"id":835,"name":"untaggedRules","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isStatic":true},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":565,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L565"}],"signatures":[{"id":836,"name":"untaggedRules","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Returns rules that have no tag."}]},"parameters":[{"id":837,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rules to search."}]},"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}}],"type":{"type":"array","elementType":{"type":"array","elementType":{"type":"reference","id":422,"typeArguments":[{"type":"intrinsic","name":"any"},{"type":"intrinsic","name":"any"}],"name":"Rule"}}}}]}],"groups":[{"title":"Constructors","children":[841]},{"title":"Properties","children":[804]},{"title":"Methods","children":[817,809,814,805,838,831,835]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":509,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L509"}]},{"id":400,"name":"Validator","kind":128,"kindString":"Class","flags":{"isAbstract":true},"comment":{"summary":[{"kind":"text","text":"Validates objects and properties."}]},"children":[{"id":401,"name":"constructor","kind":512,"kindString":"Constructor","flags":{},"signatures":[{"id":402,"name":"new Validator","kind":16384,"kindString":"Constructor signature","flags":{},"type":{"type":"reference","id":400,"name":"Validator"}}]},{"id":412,"name":"ruleExists","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isAbstract":true},"sources":[{"fileName":"src/validator.ts","line":29,"character":18,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validator.ts#L29"}],"signatures":[{"id":413,"name":"ruleExists","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Determines whether a rule exists in a set of rules."}],"blockTags":[{"tag":"@parem","content":[{"kind":"text","text":"rule The rule to find."}]}]},"parameters":[{"id":414,"name":"rules","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The rules to search."}]},"type":{"type":"intrinsic","name":"any"}},{"id":415,"name":"rule","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"intrinsic","name":"boolean"}}]},{"id":408,"name":"validateObject","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isAbstract":true},"sources":[{"fileName":"src/validator.ts","line":22,"character":18,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validator.ts#L22"}],"signatures":[{"id":409,"name":"validateObject","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates all rules for specified object and it's properties."}]},"parameters":[{"id":410,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object to validate."}]},"type":{"type":"intrinsic","name":"any"}},{"id":411,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. If unspecified, the implementation should lookup the rules for the\r\nspecified object. This may not be possible for all implementations of this interface."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}]},{"id":403,"name":"validateProperty","kind":2048,"kindString":"Method","flags":{"isPublic":true,"isAbstract":true},"sources":[{"fileName":"src/validator.ts","line":14,"character":18,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validator.ts#L14"}],"signatures":[{"id":404,"name":"validateProperty","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Validates the specified property."}]},"parameters":[{"id":405,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The object to validate."}]},"type":{"type":"intrinsic","name":"any"}},{"id":406,"name":"propertyName","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The name of the property to validate."}]},"type":{"type":"intrinsic","name":"string"}},{"id":407,"name":"rules","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"Optional. If unspecified, the implementation should lookup the rules for the\r\nspecified object. This may not be possible for all implementations of this interface."}]},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","typeArguments":[{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}}]}],"groups":[{"title":"Constructors","children":[401]},{"title":"Methods","children":[412,408,403]}],"sources":[{"fileName":"src/validator.ts","line":6,"character":22,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validator.ts#L6"}],"extendedBy":[{"type":"reference","id":454,"name":"StandardValidator"}]},{"id":321,"name":"BindingInfo","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Information related to an \"& validate\" decorated binding."}]},"children":[{"id":324,"name":"propertyInfo","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The object and property associated with the binding."}]},"sources":[{"fileName":"src/validation-controller.ts","line":474,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L474"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reflection","declaration":{"id":325,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":326,"name":"object","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":474,"character":18,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L474"}],"type":{"type":"intrinsic","name":"any"}},{"id":327,"name":"propertyName","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/validation-controller.ts","line":474,"character":31,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L474"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[326,327]}],"sources":[{"fileName":"src/validation-controller.ts","line":474,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L474"}]}}]}},{"id":323,"name":"rules","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The rules associated with the binding via the validate binding behavior's rules parameter."}]},"sources":[{"fileName":"src/validation-controller.ts","line":469,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L469"}],"type":{"type":"intrinsic","name":"any"}},{"id":322,"name":"target","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The DOM element associated with the binding."}]},"sources":[{"fileName":"src/validation-controller.ts","line":464,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L464"}],"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}],"groups":[{"title":"Properties","children":[324,323,322]}],"sources":[{"fileName":"src/validation-controller.ts","line":460,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-controller.ts#L460"}]},{"id":35,"name":"ControllerValidateResult","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"The result of a call to the validation controller's validate method."}]},"children":[{"id":38,"name":"instruction","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The instruction passed to the controller's validate method."}]},"sources":[{"fileName":"src/controller-validate-result.ts","line":21,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/controller-validate-result.ts#L21"}],"type":{"type":"reference","id":196,"name":"ValidateInstruction"}},{"id":37,"name":"results","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The validation result of every rule that was evaluated."}]},"sources":[{"fileName":"src/controller-validate-result.ts","line":16,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/controller-validate-result.ts#L16"}],"type":{"type":"array","elementType":{"type":"reference","id":200,"name":"ValidateResult"}}},{"id":36,"name":"valid","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"Whether validation passed."}]},"sources":[{"fileName":"src/controller-validate-result.ts","line":11,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/controller-validate-result.ts#L11"}],"type":{"type":"intrinsic","name":"boolean"}}],"groups":[{"title":"Properties","children":[38,37,36]}],"sources":[{"fileName":"src/controller-validate-result.ts","line":7,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/controller-validate-result.ts#L7"}]},{"id":843,"name":"Parsers","kind":256,"kindString":"Interface","flags":{},"children":[{"id":844,"name":"message","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":579,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L579"}],"type":{"type":"reference","id":515,"name":"ValidationMessageParser"}},{"id":845,"name":"property","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/validation-rules.ts","line":580,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L580"}],"type":{"type":"reference","id":59,"name":"PropertyAccessorParser"}}],"groups":[{"title":"Properties","children":[844,845]}],"sources":[{"fileName":"src/implementation/validation-rules.ts","line":578,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-rules.ts#L578"}]},{"id":392,"name":"RenderInstruction","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Defines which validation results to render and which validation results to unrender."}]},"children":[{"id":393,"name":"kind","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The \"kind\" of render instruction. Either 'validate' or 'reset'."}]},"sources":[{"fileName":"src/validation-renderer.ts","line":25,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L25"}],"type":{"type":"union","types":[{"type":"literal","value":"reset"},{"type":"literal","value":"validate"}]}},{"id":394,"name":"render","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The results to render."}]},"sources":[{"fileName":"src/validation-renderer.ts","line":30,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L30"}],"type":{"type":"array","elementType":{"type":"reference","id":389,"name":"ResultInstruction"}}},{"id":395,"name":"unrender","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The results to unrender."}]},"sources":[{"fileName":"src/validation-renderer.ts","line":35,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L35"}],"type":{"type":"array","elementType":{"type":"reference","id":389,"name":"ResultInstruction"}}}],"groups":[{"title":"Properties","children":[393,394,395]}],"sources":[{"fileName":"src/validation-renderer.ts","line":21,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L21"}]},{"id":342,"name":"RenderedError","kind":256,"kindString":"Interface","flags":{},"children":[{"id":343,"name":"error","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":10,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L10"}],"type":{"type":"reference","id":200,"name":"ValidateResult"}},{"id":344,"name":"targets","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":11,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L11"}],"type":{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}}],"groups":[{"title":"Properties","children":[343,344]}],"sources":[{"fileName":"src/validation-errors-custom-attribute.ts","line":9,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-errors-custom-attribute.ts#L9"}]},{"id":389,"name":"ResultInstruction","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"A result to render (or unrender) and the associated elements (if any)"}]},"children":[{"id":391,"name":"elements","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The associated elements (if any)."}]},"sources":[{"fileName":"src/validation-renderer.ts","line":15,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L15"}],"type":{"type":"array","elementType":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}},{"id":390,"name":"result","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The validation result."}]},"sources":[{"fileName":"src/validation-renderer.ts","line":10,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L10"}],"type":{"type":"reference","id":200,"name":"ValidateResult"}}],"groups":[{"title":"Properties","children":[391,390]}],"sources":[{"fileName":"src/validation-renderer.ts","line":6,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L6"}]},{"id":422,"name":"Rule","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"A rule definition. Associations a rule with a property or object."}]},"children":[{"id":424,"name":"condition","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":25,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L25"}],"type":{"type":"reflection","declaration":{"id":425,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":25,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L25"}],"signatures":[{"id":426,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":427,"name":"value","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":439,"name":"TValue"}},{"id":428,"name":"object","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reference","id":438,"name":"TObject"}}],"type":{"type":"union","types":[{"type":"intrinsic","name":"boolean"},{"type":"reference","typeArguments":[{"type":"intrinsic","name":"boolean"}],"name":"Promise","qualifiedName":"Promise","package":"typescript"}]}}]}}},{"id":429,"name":"config","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":26,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L26"}],"type":{"type":"intrinsic","name":"object"}},{"id":435,"name":"message","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":29,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L29"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}]}},{"id":434,"name":"messageKey","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":28,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L28"}],"type":{"type":"intrinsic","name":"string"}},{"id":423,"name":"property","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":24,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L24"}],"type":{"type":"reference","id":419,"name":"RuleProperty"}},{"id":436,"name":"sequence","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":30,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L30"}],"type":{"type":"intrinsic","name":"number"}},{"id":437,"name":"tag","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"src/implementation/rule.ts","line":31,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L31"}],"type":{"type":"intrinsic","name":"string"}},{"id":430,"name":"when","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":27,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L27"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"reflection","declaration":{"id":431,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":27,"character":9,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L27"}],"signatures":[{"id":432,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":433,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":438,"name":"TObject"}}],"type":{"type":"intrinsic","name":"boolean"}}]}}]}}],"groups":[{"title":"Properties","children":[424,429,435,434,423,436,437,430]}],"sources":[{"fileName":"src/implementation/rule.ts","line":23,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L23"}],"typeParameters":[{"id":438,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":439,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}]},{"id":419,"name":"RuleProperty","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Information related to a property that is the subject of validation."}]},"children":[{"id":421,"name":"displayName","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The displayName of the property (or object)."}]},"sources":[{"fileName":"src/implementation/rule.ts","line":17,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L17"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"reference","id":416,"name":"ValidationDisplayNameAccessor"}]}},{"id":420,"name":"name","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The property name. null indicates the rule targets the object itself."}]},"sources":[{"fileName":"src/implementation/rule.ts","line":12,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L12"}],"type":{"type":"union","types":[{"type":"literal","value":null},{"type":"intrinsic","name":"string"},{"type":"intrinsic","name":"number"}]}}],"groups":[{"title":"Properties","children":[421,420]}],"sources":[{"fileName":"src/implementation/rule.ts","line":8,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L8"}]},{"id":196,"name":"ValidateInstruction","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Instructions for the validation controller's validate method."}]},"children":[{"id":197,"name":"object","kind":1024,"kindString":"Property","flags":{},"comment":{"summary":[{"kind":"text","text":"The object to validate."}]},"sources":[{"fileName":"src/validate-instruction.ts","line":8,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-instruction.ts#L8"}],"type":{"type":"intrinsic","name":"any"}},{"id":198,"name":"propertyName","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The property to validate. Optional."}]},"sources":[{"fileName":"src/validate-instruction.ts","line":13,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-instruction.ts#L13"}],"type":{"type":"intrinsic","name":"any"}},{"id":199,"name":"rules","kind":1024,"kindString":"Property","flags":{"isOptional":true},"comment":{"summary":[{"kind":"text","text":"The rules to validate. Optional."}]},"sources":[{"fileName":"src/validate-instruction.ts","line":18,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-instruction.ts#L18"}],"type":{"type":"intrinsic","name":"any"}}],"groups":[{"title":"Properties","children":[197,198,199]}],"sources":[{"fileName":"src/validate-instruction.ts","line":4,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validate-instruction.ts#L4"}]},{"id":496,"name":"ValidationMessages","kind":256,"kindString":"Interface","flags":{},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":4,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L4"}],"indexSignature":{"id":497,"name":"__index","kind":8192,"kindString":"Index signature","flags":{},"parameters":[{"id":498,"name":"key","kind":32768,"flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}}},{"id":396,"name":"ValidationRenderer","kind":256,"kindString":"Interface","flags":{},"comment":{"summary":[{"kind":"text","text":"Renders validation results."}]},"children":[{"id":397,"name":"render","kind":2048,"kindString":"Method","flags":{},"sources":[{"fileName":"src/validation-renderer.ts","line":47,"character":2,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L47"}],"signatures":[{"id":398,"name":"render","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Render the validation results."}]},"parameters":[{"id":399,"name":"instruction","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The render instruction. Defines which results to render and which\r\nresults to unrender."}]},"type":{"type":"reference","id":392,"name":"RenderInstruction"}}],"type":{"type":"intrinsic","name":"void"}}]}],"groups":[{"title":"Methods","children":[397]}],"sources":[{"fileName":"src/validation-renderer.ts","line":41,"character":17,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/validation-renderer.ts#L41"}],"implementedBy":[{"type":"reference","id":345,"name":"ValidationErrorsCustomAttribute"}]},{"id":53,"name":"PropertyAccessor","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"src/property-accessor-parser.ts","line":8,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L8"}],"typeParameters":[{"id":57,"name":"TObject","kind":131072,"kindString":"Type parameter","flags":{}},{"id":58,"name":"TValue","kind":131072,"kindString":"Type parameter","flags":{}}],"type":{"type":"reflection","declaration":{"id":54,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/property-accessor-parser.ts","line":8,"character":48,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L8"}],"signatures":[{"id":55,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":56,"name":"object","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":57,"name":"TObject"}}],"type":{"type":"reference","id":58,"name":"TValue"}}]}}},{"id":416,"name":"ValidationDisplayNameAccessor","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":3,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L3"}],"type":{"type":"reflection","declaration":{"id":417,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/implementation/rule.ts","line":3,"character":44,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/rule.ts#L3"}],"signatures":[{"id":418,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"type":{"type":"intrinsic","name":"string"}}]}}},{"id":14,"name":"ValidatorCtor","kind":4194304,"kindString":"Type alias","flags":{},"sources":[{"fileName":"src/config.ts","line":6,"character":12,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L6"}],"type":{"type":"reflection","declaration":{"id":15,"name":"__type","kind":512,"kindString":"Constructor","flags":{},"sources":[{"fileName":"src/config.ts","line":6,"character":28,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/config.ts#L6"}],"signatures":[{"id":16,"name":"__type","kind":16384,"kindString":"Constructor signature","flags":{},"parameters":[{"id":17,"name":"args","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"reference","id":400,"name":"Validator"}}]}}},{"id":499,"name":"validationMessages","kind":32,"kindString":"Variable","flags":{"isConst":true},"comment":{"summary":[{"kind":"text","text":"Dictionary of validation messages. [messageKey]: messageExpression"}]},"sources":[{"fileName":"src/implementation/validation-messages.ts","line":11,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/implementation/validation-messages.ts#L11"}],"type":{"type":"reference","id":496,"name":"ValidationMessages"},"defaultValue":"..."},{"id":1,"name":"configure","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"src/aurelia-validation.ts","line":49,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L49"}],"signatures":[{"id":2,"name":"configure","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Configures the plugin."}]},"parameters":[{"id":3,"name":"frameworkConfig","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reflection","declaration":{"id":4,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":5,"name":"container","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/aurelia-validation.ts","line":51,"character":21,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L51"}],"type":{"type":"reference","name":"Container","qualifiedName":"Container","package":"aurelia-dependency-injection"}},{"id":6,"name":"globalResources","kind":1024,"kindString":"Property","flags":{"isOptional":true},"sources":[{"fileName":"src/aurelia-validation.ts","line":51,"character":43,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L51"}],"type":{"type":"reflection","declaration":{"id":7,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/aurelia-validation.ts","line":51,"character":61,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L51"}],"signatures":[{"id":8,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":9,"name":"resources","kind":32768,"kindString":"Parameter","flags":{"isRest":true},"type":{"type":"array","elementType":{"type":"intrinsic","name":"any"}}}],"type":{"type":"intrinsic","name":"any"}}]}}}],"groups":[{"title":"Properties","children":[5,6]}],"sources":[{"fileName":"src/aurelia-validation.ts","line":51,"character":19,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L51"}]}}},{"id":10,"name":"callback","kind":32768,"kindString":"Parameter","flags":{"isOptional":true},"type":{"type":"reflection","declaration":{"id":11,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"sources":[{"fileName":"src/aurelia-validation.ts","line":52,"character":13,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L52"}],"signatures":[{"id":12,"name":"__type","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":13,"name":"config","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"reference","id":18,"name":"GlobalValidationConfiguration"}}],"type":{"type":"intrinsic","name":"void"}}]}}}],"type":{"type":"intrinsic","name":"void"}}]},{"id":50,"name":"getAccessorExpression","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"src/property-accessor-parser.ts","line":29,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-accessor-parser.ts#L29"}],"signatures":[{"id":51,"name":"getAccessorExpression","kind":4096,"kindString":"Call signature","flags":{},"parameters":[{"id":52,"name":"fn","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"string"}}],"type":{"type":"intrinsic","name":"string"}}]},{"id":43,"name":"getPropertyInfo","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"src/property-info.ts","line":26,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-info.ts#L26"}],"signatures":[{"id":44,"name":"getPropertyInfo","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Retrieves the object and property name for the specified expression."}]},"parameters":[{"id":45,"name":"expression","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The expression"}]},"type":{"type":"reference","name":"Expression","qualifiedName":"Expression","package":"aurelia-binding"}},{"id":46,"name":"source","kind":32768,"kindString":"Parameter","flags":{},"comment":{"summary":[{"kind":"text","text":"The scope"}]},"type":{"type":"reference","name":"Scope","qualifiedName":"Scope","package":"aurelia-binding"}}],"type":{"type":"union","types":[{"type":"reflection","declaration":{"id":47,"name":"__type","kind":65536,"kindString":"Type literal","flags":{},"children":[{"id":48,"name":"object","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/property-info.ts","line":29,"character":5,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-info.ts#L29"}],"type":{"type":"intrinsic","name":"object"}},{"id":49,"name":"propertyName","kind":1024,"kindString":"Property","flags":{},"sources":[{"fileName":"src/property-info.ts","line":29,"character":21,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-info.ts#L29"}],"type":{"type":"intrinsic","name":"string"}}],"groups":[{"title":"Properties","children":[48,49]}],"sources":[{"fileName":"src/property-info.ts","line":29,"character":3,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/property-info.ts#L29"}]}},{"type":"literal","value":null}]}}]},{"id":39,"name":"getTargetDOMElement","kind":64,"kindString":"Function","flags":{},"sources":[{"fileName":"src/get-target-dom-element.ts","line":9,"character":16,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/get-target-dom-element.ts#L9"}],"signatures":[{"id":40,"name":"getTargetDOMElement","kind":4096,"kindString":"Call signature","flags":{},"comment":{"summary":[{"kind":"text","text":"Gets the DOM element associated with the data-binding. Most of the time it's\r\nthe binding.target but sometimes binding.target is an aurelia custom element,\r\nor custom attribute which is a javascript \"class\" instance, so we need to use\r\nthe controller's container to retrieve the actual DOM element."}]},"parameters":[{"id":41,"name":"binding","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}},{"id":42,"name":"view","kind":32768,"kindString":"Parameter","flags":{},"type":{"type":"intrinsic","name":"any"}}],"type":{"type":"reference","name":"Element","qualifiedName":"Element","package":"typescript"}}]}],"groups":[{"title":"Enumerations","children":[217]},{"title":"Classes","children":[777,597,697,18,534,59,440,454,70,183,87,103,119,135,167,151,200,224,328,345,515,500,375,803,400]},{"title":"Interfaces","children":[321,35,843,392,342,389,422,419,196,496,396]},{"title":"Type Aliases","children":[53,416,14]},{"title":"Variables","children":[499]},{"title":"Functions","children":[1,50,43,39]}],"sources":[{"fileName":"src/aurelia-validation.ts","line":3,"character":0,"url":"https://github.com/aurelia/validation/blob/b9ee21c/src/aurelia-validation.ts#L3"}]} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 910c612f..c73eda7d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "aurelia-validation", - "version": "2.0.0-rc2", + "version": "2.0.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "aurelia-validation", - "version": "2.0.0-rc2", + "version": "2.0.0", "license": "MIT", "dependencies": { "aurelia-binding": "^2.5.2", diff --git a/package.json b/package.json index 97b3bf8d..2869a9db 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aurelia-validation", - "version": "2.0.0-rc2", + "version": "2.0.0", "description": "Validation for Aurelia applications", "keywords": [ "aurelia", diff --git a/rollup.config.js b/rollup.config.js index 696194c9..1127807b 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -54,7 +54,8 @@ export default [{ compilerOptions: { module: 'es2015', target: 'es2017', - declaration: false + declaration: false, + sourceMap: true }, include: ['src'], exclude: undefined @@ -91,7 +92,8 @@ export default [{ compilerOptions: { module: 'es2015', target: 'es5', - declaration: false + declaration: false, + sourceMap: true, }, include: ['src'], exclude: undefined