@messaia/cdk 17.1.0-rc15 → 17.1.0-rc16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/form-validators/abstract/typed-form.mjs +10 -1
- package/esm2022/lib/form-validators/algorithm/luhn-algorithm.mjs +25 -7
- package/esm2022/lib/form-validators/const/app-validators.const.mjs +2 -2
- package/esm2022/lib/form-validators/const/app.const.mjs +49 -1
- package/esm2022/lib/form-validators/const/config-names.const.mjs +25 -1
- package/esm2022/lib/form-validators/const/config-required-fields.const.mjs +26 -2
- package/esm2022/lib/form-validators/const/events.const.mjs +40 -1
- package/esm2022/lib/form-validators/const/html-elements.const.mjs +19 -1
- package/esm2022/lib/form-validators/const/validator.const.mjs +22 -1
- package/esm2022/lib/form-validators/core/{validator.static.mjs → annotation-types.mjs} +1 -1
- package/esm2022/lib/form-validators/core/default-container.mjs +493 -0
- package/esm2022/lib/form-validators/decorators/allOf.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/alpha.decorator.mjs +3 -3
- package/esm2022/lib/form-validators/decorators/alphaNumeric.decorator.mjs +3 -3
- package/esm2022/lib/form-validators/decorators/and.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/ascii.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/async.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/base-decorator.function.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/choice.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/compare.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/compose.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/contains.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/credit-card.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/cusip.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/custom.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/dataUri.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/date.decorator.mjs +3 -3
- package/esm2022/lib/form-validators/decorators/different.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/digit.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/email.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/endsWith.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/even.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/extension.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/factor.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/file.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/fileSize.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/greater-than-equal-to.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/greater-than.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/grid.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/hexColor.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/image.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/json.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/latLong.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/latitude.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/leapYear.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/less-than-equal-to.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/less-than.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/longitude.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/lowercase.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/mac.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/mask.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/maxDate.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/maxLength.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/maxNumber.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/maxTime.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/minDate.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/minLength.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/minNumber.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/minTime.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/model.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/non-validation-decorators/disable.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/non-validation-decorators/error.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/non-validation-decorators/update-on.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/noneOf.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/not.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/notEmpty.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/numeric.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/odd.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/oneOf.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/or.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/password.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/pattern.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/port.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/primeNumber.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/prop-array.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/prop-object.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/prop.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/range.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/required.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/requiredTrue.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/rule.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/blacklist.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/escape.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/ltrim.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/prefix.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/rtrim.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/sanitize.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/stripLow.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/suffix.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toBoolean.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toDate.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toDouble.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toFloat.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toInt.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/toString.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/trim.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/sanitize/whitelist.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/startsWith.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/time.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/unique.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/uppercase.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/decorators/url.decorator.mjs +2 -2
- package/esm2022/lib/form-validators/directives/base-directive.mjs +34 -3
- package/esm2022/lib/form-validators/directives/control-host.directive.mjs +18 -1
- package/esm2022/lib/form-validators/directives/html-control-template.directive.mjs +15 -1
- package/esm2022/lib/form-validators/directives/rx-form.directive.mjs +108 -14
- package/esm2022/lib/form-validators/directives/template-validations/async-validation.directive.mjs +2 -4
- package/esm2022/lib/form-validators/directives/template-validations/base-validator.directive.mjs +17 -7
- package/esm2022/lib/form-validators/directives/template-validations/control-expression-process.mjs +22 -8
- package/esm2022/lib/form-validators/domain/disable-provider.mjs +107 -4
- package/esm2022/lib/form-validators/domain/element-processor/decimal.provider.mjs +67 -7
- package/esm2022/lib/form-validators/domain/element-processor/mask.provider.mjs +4 -3
- package/esm2022/lib/form-validators/domain/form-data.mjs +53 -7
- package/esm2022/lib/form-validators/models/control-info.mjs +2 -0
- package/esm2022/lib/form-validators/models/data-sanitizer.mjs +2 -0
- package/esm2022/lib/form-validators/models/decorator-configuration.mjs +2 -0
- package/esm2022/lib/form-validators/models/form-builder-configuration.mjs +35 -13
- package/esm2022/lib/form-validators/models/instance-container.mjs +2 -0
- package/esm2022/lib/form-validators/models/password-validation.model.mjs +1 -1
- package/esm2022/lib/form-validators/models/prop-validation-config.mjs +1 -1
- package/esm2022/lib/form-validators/models/property-info.mjs +2 -0
- package/esm2022/lib/form-validators/reactive-form-validators/allOf.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/alpha.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/alphaNumeric.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/and.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/ascii.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/choice.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/compare.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/compose.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/contains.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/cusip.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/dataUri.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/date.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/different.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/digit.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/email.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/even.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/extension.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/factor.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/file.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/greater-than.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/grid.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/hexcolor.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/iban.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/image.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/ip.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/json.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/latLong.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/latitude.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/less-than.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/longitude.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/mac.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/mask.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/maxDate.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/maxTime.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/minDate.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/minLength.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/minTime.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/not.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/numeric.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/odd.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/or.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/password.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/port.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/range.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/required.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/time.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/unique.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +2 -2
- package/esm2022/lib/form-validators/reactive-form-validators/url.validator.mjs +2 -2
- package/esm2022/lib/form-validators/services/base-form-builder.mjs +105 -6
- package/esm2022/lib/form-validators/services/form-control.mjs +2 -2
- package/esm2022/lib/form-validators/services/reactive-form.module.mjs +2 -2
- package/esm2022/lib/form-validators/services/rx-form-builder.mjs +479 -39
- package/esm2022/lib/form-validators/services/rx-form-group.mjs +197 -52
- package/esm2022/lib/form-validators/util/date-checker.function.mjs +2 -2
- package/esm2022/lib/form-validators/util/instance-provider.function.mjs +2 -2
- package/esm2022/lib/form-validators/util/relational-checker.function.mjs +2 -2
- package/esm2022/lib/form-validators/util/time-checker.function.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/allOf-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/alpha-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/alphaNumeric-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/and-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/ascii-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/base-validator.function.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/choice-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/compare-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/compose-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/contains-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/credit-card-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/cusip-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/custom-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/dataUri-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/date-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/different-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/digit-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/email-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/endsWith-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/even-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/extension-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/factor-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/file-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/fileSize-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/greater-than-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/grid-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/hexcolor-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/iban-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/image-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/ip-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/json-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/latLong-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/latitude-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/leapYear-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/less-than-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/longitude-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/lowercase-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/mac-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/mask-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/maxDate-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/maxLength-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/maxNumber-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/maxTime-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/minDate-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/minLength-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/minNumber-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/minTime-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/noneOf-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/not-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/notEmpty-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/numeric-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/odd-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/oneOf-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/or-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/password-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/pattern-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/port-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/primeNumber-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/range-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/required-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/requiredTrue-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/startsWith-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/time-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-extension/unique-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/uppercase-validator.extension.mjs +2 -2
- package/esm2022/lib/form-validators/validators-extension/url-validator.extension.mjs +4 -4
- package/esm2022/lib/form-validators/validators-function/alpha-validation.function.mjs +28 -1
- package/esm2022/lib/form-validators/validators-function/regex-validation.function.mjs +17 -1
- package/fesm2022/messaia-cdk.mjs +1777 -203
- package/fesm2022/messaia-cdk.mjs.map +1 -1
- package/lib/form-validators/abstract/typed-form.d.ts +9 -0
- package/lib/form-validators/algorithm/luhn-algorithm.d.ts +7 -0
- package/lib/form-validators/const/app.const.d.ts +48 -0
- package/lib/form-validators/const/config-names.const.d.ts +24 -0
- package/lib/form-validators/const/config-required-fields.const.d.ts +3 -0
- package/lib/form-validators/const/events.const.d.ts +39 -0
- package/lib/form-validators/const/html-elements.const.d.ts +18 -0
- package/lib/form-validators/const/validator.const.d.ts +21 -0
- package/lib/form-validators/core/default-container.d.ts +153 -0
- package/lib/form-validators/directives/base-directive.d.ts +17 -0
- package/lib/form-validators/directives/control-host.directive.d.ts +17 -0
- package/lib/form-validators/directives/html-control-template.directive.d.ts +13 -0
- package/lib/form-validators/directives/rx-form.directive.d.ts +34 -3
- package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +1 -3
- package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +15 -5
- package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +19 -8
- package/lib/form-validators/domain/disable-provider.d.ts +54 -0
- package/lib/form-validators/domain/element-processor/decimal.provider.d.ts +36 -1
- package/lib/form-validators/domain/form-data.d.ts +21 -0
- package/lib/form-validators/models/control-info.d.ts +25 -0
- package/lib/form-validators/models/data-sanitizer.d.ts +13 -0
- package/lib/form-validators/models/decorator-configuration.d.ts +37 -0
- package/lib/form-validators/models/form-builder-configuration.d.ts +33 -0
- package/lib/form-validators/models/instance-container.d.ts +47 -0
- package/lib/form-validators/models/password-validation.model.d.ts +54 -0
- package/lib/form-validators/models/prop-validation-config.d.ts +156 -0
- package/lib/form-validators/models/property-info.d.ts +49 -0
- package/lib/form-validators/services/base-form-builder.d.ts +59 -2
- package/lib/form-validators/services/form-control.d.ts +1 -1
- package/lib/form-validators/services/rx-form-builder.d.ts +197 -1
- package/lib/form-validators/services/rx-form-group.d.ts +121 -0
- package/lib/form-validators/util/instance-provider.function.d.ts +1 -1
- package/lib/form-validators/validators-extension/allOf-validator.extension.d.ts +1 -1
- package/lib/form-validators/validators-extension/alpha-validator.extension.d.ts +1 -1
- package/lib/form-validators/validators-extension/iban-validator.extension.d.ts +1 -1
- package/lib/form-validators/validators-extension/maxLength-validator.extension.d.ts +1 -1
- package/lib/form-validators/validators-function/alpha-validation.function.d.ts +7 -0
- package/lib/form-validators/validators-function/regex-validation.function.d.ts +16 -0
- package/package.json +1 -1
- package/esm2022/lib/form-validators/core/defaultContainer.mjs +0 -257
- package/esm2022/lib/form-validators/core/validator.interface.mjs +0 -2
- package/lib/form-validators/core/defaultContainer.d.ts +0 -18
- package/lib/form-validators/core/validator.interface.d.ts +0 -62
- /package/lib/form-validators/core/{validator.static.d.ts → annotation-types.d.ts} +0 -0
|
@@ -1,128 +1,222 @@
|
|
|
1
1
|
import { Directive, Input } from "@angular/core";
|
|
2
2
|
import { FormArray, FormGroup, NgForm } from "@angular/forms";
|
|
3
3
|
import { CONDITIONAL_VALIDATOR, MODEL } from '../const/app.const';
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { AnnotationTypes } from "../core/annotation-types";
|
|
5
|
+
import { defaultContainer } from "../core/default-container";
|
|
6
6
|
import { conditionalChangeValidator } from '../reactive-form-validators/conditional-change.validator';
|
|
7
7
|
import { Linq } from "../util/linq";
|
|
8
8
|
import { BaseDirective } from "./base-directive";
|
|
9
9
|
import * as i0 from "@angular/core";
|
|
10
|
+
/**
|
|
11
|
+
* This directive provides functionality for integrating RxWebForms with Angular forms.
|
|
12
|
+
*/
|
|
10
13
|
export class RxwebFormDirective extends BaseDirective {
|
|
14
|
+
/**
|
|
15
|
+
* Timeout ID for clearing the timeout
|
|
16
|
+
*/
|
|
11
17
|
clearTimeoutNumber = 0;
|
|
18
|
+
/**
|
|
19
|
+
* Object to store validation rules
|
|
20
|
+
*/
|
|
12
21
|
validationRule = {};
|
|
22
|
+
/**
|
|
23
|
+
* The formGroup input property for binding the form group to the directive.
|
|
24
|
+
*/
|
|
13
25
|
formGroup;
|
|
26
|
+
/**
|
|
27
|
+
* The ngForm input property for binding the NgForm to the directive.
|
|
28
|
+
*/
|
|
14
29
|
ngForm;
|
|
30
|
+
/**
|
|
31
|
+
* After the content is initialized, this method configures model validations based on the formGroup or ngForm.
|
|
32
|
+
*/
|
|
15
33
|
ngAfterContentInit() {
|
|
34
|
+
/* If the formGroup exists, doesn't have the MODEL property, and has no parent (i.e., it's a top-level form) */
|
|
16
35
|
if (this.formGroup && !this.formGroup[MODEL] && this.formGroup.parent == null) {
|
|
36
|
+
/* Process expressions for configuring model validations */
|
|
17
37
|
this.expressionProcessor(this.formGroup.controls);
|
|
38
|
+
/* Set conditional validators based on the validation rule */
|
|
18
39
|
this.setConditionalValidator(this.formGroup.controls);
|
|
19
40
|
}
|
|
41
|
+
/* If the formGroup exists, doesn't have the MODEL property, and its parent is an instance of FormArray */
|
|
20
42
|
else if (this.formGroup && !this.formGroup[MODEL] && this.formGroup.parent instanceof FormArray) {
|
|
43
|
+
/* Process expressions for configuring model validations */
|
|
21
44
|
this.expressionProcessor(this.formGroup.controls);
|
|
45
|
+
/* Set conditional validators based on the validation rule */
|
|
22
46
|
this.setConditionalValidator(this.formGroup.controls);
|
|
23
47
|
}
|
|
48
|
+
/* If ngForm is present */
|
|
24
49
|
else if (this.ngForm) {
|
|
50
|
+
/* Configure model validations */
|
|
25
51
|
this.configureModelValidations();
|
|
26
52
|
}
|
|
27
53
|
}
|
|
54
|
+
/**
|
|
55
|
+
* Configures model validations based on the ngForm if present.
|
|
56
|
+
*/
|
|
28
57
|
configureModelValidations() {
|
|
58
|
+
/* If ngForm is present */
|
|
29
59
|
if (this.ngForm) {
|
|
60
|
+
/* Set a timeout to apply validations after a delay */
|
|
30
61
|
this.clearTimeoutNumber = setTimeout(() => {
|
|
62
|
+
/* Clear the timeout to prevent multiple calls */
|
|
31
63
|
clearTimeout(this.clearTimeoutNumber);
|
|
64
|
+
/* Apply validations to the form controls */
|
|
32
65
|
this.applyValidations(this.ngForm.form.controls);
|
|
66
|
+
/* Process expressions for configuring model validations */
|
|
33
67
|
this.expressionProcessor(this.ngForm.form.controls);
|
|
68
|
+
/* Set conditional validators based on the validation rule */
|
|
34
69
|
this.setConditionalValidator(this.ngForm.form.controls);
|
|
70
|
+
/* Update the value and validity of the form controls */
|
|
35
71
|
this.updateValueAndValidity(this.ngForm.form.controls);
|
|
36
72
|
}, 500);
|
|
37
73
|
}
|
|
38
74
|
}
|
|
75
|
+
/**
|
|
76
|
+
* Updates the value and validity of the form controls.
|
|
77
|
+
*/
|
|
39
78
|
updateValueAndValidity(controls) {
|
|
79
|
+
/* Iterate over the keys of the controls object */
|
|
40
80
|
Object.keys(controls).forEach(key => {
|
|
41
|
-
if
|
|
81
|
+
/* Check if the control is an instance of FormGroup */
|
|
82
|
+
if (controls[key] instanceof FormGroup) {
|
|
83
|
+
/* Recursively update value and validity for controls within the FormGroup */
|
|
42
84
|
this.updateValueAndValidity(controls[key].controls);
|
|
43
|
-
|
|
85
|
+
}
|
|
86
|
+
/* Check if the control is an instance of FormArray */
|
|
87
|
+
else if (controls[key] instanceof FormArray) {
|
|
88
|
+
/* Recursively update value and validity for controls within the FormArray */
|
|
44
89
|
this.updateValueAndValidity(controls[key].controls);
|
|
45
|
-
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
/* Update value and validity for the control */
|
|
46
93
|
controls[key].updateValueAndValidity();
|
|
94
|
+
}
|
|
47
95
|
});
|
|
48
96
|
}
|
|
97
|
+
/**
|
|
98
|
+
* Processes the expressions for configuring model validations.
|
|
99
|
+
* @param controls - The form controls to process.
|
|
100
|
+
* @param rootFieldName - The root field name for nested controls.
|
|
101
|
+
*/
|
|
49
102
|
expressionProcessor(controls, rootFieldName = "") {
|
|
103
|
+
/* Iterate over the keys of the controls object */
|
|
50
104
|
Object.keys(controls).forEach(fieldName => {
|
|
105
|
+
/* Get the control corresponding to the current field name */
|
|
51
106
|
let formControl = controls[fieldName];
|
|
107
|
+
/* Check if the control has validatorConfig */
|
|
52
108
|
if (formControl.validatorConfig) {
|
|
109
|
+
/* Iterate over the keys of AnnotationTypes */
|
|
53
110
|
Object.keys(AnnotationTypes).forEach(validatorName => {
|
|
111
|
+
/* Check if the current validator exists in the validatorConfig and has disableExpression */
|
|
54
112
|
if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].disableExpression) {
|
|
113
|
+
/* Set the disableExpression property for the formControl */
|
|
55
114
|
formControl["disableExpression"] = formControl.validatorConfig[validatorName].disableExpression;
|
|
115
|
+
/* Extract columns from the disableExpression and set conditional value properties */
|
|
56
116
|
let columns = Linq.expressionColumns(formControl.validatorConfig[validatorName].disableExpression);
|
|
57
117
|
columns.forEach(t => {
|
|
58
118
|
defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);
|
|
59
119
|
});
|
|
60
120
|
}
|
|
121
|
+
/* Check if the current validator exists in the validatorConfig and has conditionalExpression */
|
|
61
122
|
if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].conditionalExpression) {
|
|
123
|
+
/* Extract columns from the conditionalExpression and set conditional value properties */
|
|
62
124
|
let columns = Linq.expressionColumns(formControl.validatorConfig[validatorName].conditionalExpression);
|
|
63
125
|
columns.forEach(t => {
|
|
64
126
|
defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);
|
|
65
127
|
});
|
|
66
128
|
}
|
|
129
|
+
/* Check if the current validator exists in the validatorConfig and has dynamicConfig */
|
|
67
130
|
if (formControl.validatorConfig[validatorName] && formControl.validatorConfig[validatorName].dynamicConfig) {
|
|
131
|
+
/* Parse dynamicConfig, extract columns, and set conditional value properties */
|
|
68
132
|
let columns = Linq.dynamicConfigParser(formControl.validatorConfig[validatorName].dynamicConfig, fieldName);
|
|
69
133
|
columns.forEach(t => {
|
|
70
134
|
defaultContainer.setConditionalValueProp(this.validationRule, rootFieldName + t.propName, fieldName);
|
|
71
135
|
});
|
|
72
136
|
}
|
|
137
|
+
/* Check if the current validator exists in the validatorConfig and is a logical validator */
|
|
73
138
|
if (formControl.validatorConfig[validatorName] && (validatorName == AnnotationTypes.and || validatorName == AnnotationTypes.or || validatorName == AnnotationTypes.not)) {
|
|
139
|
+
/* Iterate over the validation rules, set logical conditionals */
|
|
74
140
|
Object.keys(formControl.validatorConfig[validatorName].validation).forEach(t => {
|
|
75
|
-
if (typeof formControl.validatorConfig[validatorName].validation[t] !== "boolean")
|
|
141
|
+
if (typeof formControl.validatorConfig[validatorName].validation[t] !== "boolean") {
|
|
76
142
|
defaultContainer.setLogicalConditional(this.validationRule, t, formControl.validatorConfig[validatorName].validation[t].fieldName, fieldName);
|
|
143
|
+
}
|
|
77
144
|
});
|
|
78
145
|
}
|
|
146
|
+
/* Check if the current validator exists in the validatorConfig and is a comparison or range validator */
|
|
79
147
|
else if (formControl.validatorConfig[validatorName] && ((validatorName == AnnotationTypes.compare || validatorName == AnnotationTypes.greaterThan || validatorName == AnnotationTypes.greaterThanEqualTo || validatorName == AnnotationTypes.lessThan || validatorName == AnnotationTypes.lessThanEqualTo || validatorName == AnnotationTypes.different || validatorName == AnnotationTypes.factor || validatorName == AnnotationTypes.minTime || validatorName == AnnotationTypes.maxTime) || (validatorName == AnnotationTypes.creditCard && formControl.validatorConfig[validatorName].fieldName) || ((validatorName == AnnotationTypes.minDate || validatorName == AnnotationTypes.maxDate) && formControl.validatorConfig[validatorName].fieldName))) {
|
|
148
|
+
/* Set conditional value properties */
|
|
80
149
|
defaultContainer.setConditionalValueProp(this.validationRule, formControl.validatorConfig[validatorName].fieldName, fieldName);
|
|
81
150
|
}
|
|
82
151
|
});
|
|
83
152
|
}
|
|
153
|
+
/* Check if the control is an instance of FormGroup */
|
|
84
154
|
else if (formControl instanceof FormGroup) {
|
|
155
|
+
/* Recursively process controls within the FormGroup */
|
|
85
156
|
this.expressionProcessor(formControl.controls, `${fieldName}.`);
|
|
86
157
|
}
|
|
158
|
+
/* Check if the control is an instance of FormArray */
|
|
87
159
|
else if (formControl instanceof FormArray) {
|
|
88
|
-
|
|
160
|
+
/* Process each control within the FormArray */
|
|
161
|
+
if (formControl.controls) {
|
|
89
162
|
formControl.controls.forEach((t, i) => {
|
|
90
|
-
if (t.controls)
|
|
163
|
+
if (t.controls) {
|
|
91
164
|
this.expressionProcessor(t.controls, `${fieldName}[]`);
|
|
165
|
+
}
|
|
92
166
|
});
|
|
167
|
+
}
|
|
93
168
|
}
|
|
94
169
|
});
|
|
95
170
|
}
|
|
171
|
+
/**
|
|
172
|
+
* Sets conditional validators based on the validation rule.
|
|
173
|
+
*/
|
|
96
174
|
setConditionalValidator(controls) {
|
|
175
|
+
/* Iterates through the form controls and sets conditional validators based on validation rules */
|
|
97
176
|
Object.keys(controls).forEach(fieldName => {
|
|
177
|
+
/* If conditional validation properties are defined for the field, set the conditional validator */
|
|
98
178
|
if (this.validationRule.conditionalValidationProps && this.validationRule.conditionalValidationProps[fieldName]) {
|
|
99
179
|
controls[fieldName][CONDITIONAL_VALIDATOR] = conditionalChangeValidator(this.validationRule.conditionalValidationProps[fieldName]);
|
|
100
180
|
}
|
|
181
|
+
/* If the field is a FormGroup and conditional object properties are defined, set conditional validators for nested fields */
|
|
101
182
|
else if (controls[fieldName] instanceof FormGroup && this.validationRule.conditionalObjectProps) {
|
|
183
|
+
/* Filter conditional object properties based on the current field name */
|
|
102
184
|
var fields = this.validationRule.conditionalObjectProps.filter((t) => t.objectPropName == fieldName);
|
|
185
|
+
/* Access the nested FormGroup corresponding to the current field */
|
|
103
186
|
let nestedFormGroup = controls[fieldName];
|
|
187
|
+
/* Initialize an object to store conditional controls grouped by property name */
|
|
104
188
|
let propWiseConditionalControls = {};
|
|
189
|
+
/* Iterate through the filtered fields and group conditional controls by property name */
|
|
105
190
|
fields.forEach((x) => {
|
|
106
|
-
|
|
191
|
+
/* If the property name doesn't exist in the grouping object, initialize it */
|
|
192
|
+
if (!propWiseConditionalControls[x.propName]) {
|
|
107
193
|
propWiseConditionalControls[x.propName] = [];
|
|
194
|
+
}
|
|
195
|
+
/* Push the reference property name to the array corresponding to the property name */
|
|
108
196
|
propWiseConditionalControls[x.propName].push(x.referencePropName);
|
|
109
197
|
});
|
|
198
|
+
/* Set conditional validators for nested form controls */
|
|
110
199
|
Object.keys(propWiseConditionalControls).forEach(key => {
|
|
111
200
|
nestedFormGroup.controls[key][CONDITIONAL_VALIDATOR] = conditionalChangeValidator(propWiseConditionalControls[key]);
|
|
112
201
|
});
|
|
113
202
|
}
|
|
203
|
+
/* If the field is a FormArray, recursively set conditional validators for its controls */
|
|
114
204
|
else if (controls[fieldName] instanceof FormArray) {
|
|
205
|
+
/* Iterate through the controls of the current FormArray */
|
|
115
206
|
controls[fieldName].controls.forEach((t, i) => {
|
|
116
|
-
|
|
207
|
+
/* If the control doesn't have child controls (i.e., it's not a FormGroup or FormArray) */
|
|
208
|
+
if (t.controls == undefined) {
|
|
209
|
+
/* Set conditional validator for the individual control */
|
|
117
210
|
this.setConditionalValidator({ [i]: t });
|
|
118
|
-
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
/* Set conditional validator for the child controls */
|
|
119
214
|
this.setConditionalValidator(t.controls);
|
|
215
|
+
}
|
|
120
216
|
});
|
|
121
217
|
}
|
|
122
218
|
});
|
|
123
219
|
}
|
|
124
|
-
ngOnDestroy() {
|
|
125
|
-
}
|
|
126
220
|
/** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: RxwebFormDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
127
221
|
/** @nocollapse */ static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: RxwebFormDirective, selector: "[formGroup],[rxwebForm]", inputs: { formGroup: "formGroup", ngForm: ["rxwebForm", "ngForm"] }, usesInheritance: true, ngImport: i0 });
|
|
128
222
|
}
|
|
@@ -137,4 +231,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
137
231
|
type: Input,
|
|
138
232
|
args: ['rxwebForm']
|
|
139
233
|
}] } });
|
|
140
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvZGlyZWN0aXZlcy9yeC1mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQWEsTUFBTSxlQUFlLENBQUM7QUFDOUUsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBS2pELE1BQU0sT0FBTyxrQkFBbUIsU0FBUSxhQUFhO0lBQ3pDLGtCQUFrQixHQUFRLENBQUMsQ0FBQztJQUM1QixjQUFjLEdBQVEsRUFBRSxDQUFDO0lBRTFCLFNBQVMsQ0FBYTtJQUd0QixNQUFNLENBQVU7SUFFdkIsa0JBQWtCO1FBQ2QsSUFBSSxJQUFJLENBQUMsU0FBUyxJQUFJLENBQUUsSUFBSSxDQUFDLFNBQWlCLENBQUMsS0FBSyxDQUFDLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxNQUFNLElBQUksSUFBSSxFQUFFO1lBQ3BGLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ2xELElBQUksQ0FBQyx1QkFBdUIs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LElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTO3dCQUN2QixJQUFJLENBQUMsdUJBQXVCLENBQU0sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O3dCQUU5QyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUNqRCxDQUFDLENBQUMsQ0FBQzthQUNOO1FBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDUCxDQUFDO0lBRUQsV0FBVztJQUVYLENBQUM7MEhBN0hRLGtCQUFrQjs4R0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7aUJBQ3RDOzhCQUtVLFNBQVM7c0JBRGYsS0FBSztnQkFJQyxNQUFNO3NCQURaLEtBQUs7dUJBQUMsV0FBVyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFmdGVyQ29udGVudEluaXQsIERpcmVjdGl2ZSwgSW5wdXQsIE9uRGVzdHJveSB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUFycmF5LCBGb3JtR3JvdXAsIE5nRm9ybSB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiO1xyXG5pbXBvcnQgeyBDT05ESVRJT05BTF9WQUxJREFUT1IsIE1PREVMIH0gZnJvbSAnLi4vY29uc3QvYXBwLmNvbnN0JztcclxuaW1wb3J0IHsgZGVmYXVsdENvbnRhaW5lciB9IGZyb20gXCIuLi9jb3JlL2RlZmF1bHRDb250YWluZXJcIjtcclxuaW1wb3J0IHsgQW5ub3RhdGlvblR5cGVzIH0gZnJvbSBcIi4uL2NvcmUvdmFsaWRhdG9yLnN0YXRpY1wiO1xyXG5pbXBvcnQgeyBjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yJztcclxuaW1wb3J0IHsgTGlucSB9IGZyb20gXCIuLi91dGlsL2xpbnFcIjtcclxuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gXCIuL2Jhc2UtZGlyZWN0aXZlXCI7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2Zvcm1Hcm91cF0sW3J4d2ViRm9ybV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnh3ZWJGb3JtRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQsIE9uRGVzdHJveSB7XHJcbiAgICBwcml2YXRlIGNsZWFyVGltZW91dE51bWJlcjogYW55ID0gMDtcclxuICAgIHByaXZhdGUgdmFsaWRhdGlvblJ1bGU6IGFueSA9IHt9O1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBmb3JtR3JvdXA/OiBGb3JtR3JvdXA7XHJcblxyXG4gICAgQElucHV0KCdyeHdlYkZvcm0nKVxyXG4gICAgcHVibGljIG5nRm9ybT86IE5nRm9ybTtcclxuXHJcbiAgICBuZ0FmdGVyQ29udGVudEluaXQoKTogdm9pZCB7XHJcbiAgICAgICAgaWYgKHRoaXMuZm9ybUdyb3VwICYmICEodGhpcy5mb3JtR3JvdXAgYXMgYW55KVtNT0RFTF0gJiYgdGhpcy5mb3JtR3JvdXAucGFyZW50ID09IG51bGwpIHtcclxuICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uUHJvY2Vzc29yKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgdGhpcy5zZXRDb25kaXRpb25hbFZhbGlkYXRvcih0aGlzLmZvcm1Hcm91cC5jb250cm9scylcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGVsc2UgaWYgKHRoaXMuZm9ybUdyb3VwICYmICEodGhpcy5mb3JtR3JvdXAgYXMgYW55KVtNT0RFTF0gJiYgdGhpcy5mb3JtR3JvdXAucGFyZW50IGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblByb2Nlc3Nvcih0aGlzLmZvcm1Hcm91cC5jb250cm9scyk7XHJcbiAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWxpZGF0b3IodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpXHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBlbHNlIGlmICh0aGlzLm5nRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmNvbmZpZ3VyZU1vZGVsVmFsaWRhdGlvbnMoKTtcclxuICAgICAgICB9XHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBjb25maWd1cmVNb2RlbFZhbGlkYXRpb25zKCkge1xyXG4gICAgICAgIGlmICh0aGlzLm5nRm9ybSkge1xyXG4gICAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dE51bWJlciA9IHNldFRpbWVvdXQoKCkgPT4ge1xyXG4gICAgICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuY2xlYXJUaW1lb3V0TnVtYmVyKTtcclxuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlWYWxpZGF0aW9ucyh0aGlzLm5nRm9ybSEuZm9ybS5jb250cm9scyk7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25Qcm9jZXNzb3IodGhpcy5uZ0Zvcm0hLmZvcm0uY29udHJvbHMpO1xyXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRDb25kaXRpb25hbFZhbGlkYXRvcih0aGlzLm5nRm9ybSEuZm9ybS5jb250cm9scylcclxuICAgICAgICAgICAgICAgIHRoaXMudXBkYXRlVmFsdWVBbmRWYWxpZGl0eSh0aGlzLm5nRm9ybSEuZm9ybS5jb250cm9scyk7XHJcbiAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG5cclxuICAgIHByaXZhdGUgdXBkYXRlVmFsdWVBbmRWYWxpZGl0eShjb250cm9sczogYW55KSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgaWYgKGNvbnRyb2xzW2tleV0gaW5zdGFuY2VvZiBGb3JtR3JvdXApXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoY29udHJvbHNba2V5XS5jb250cm9scyk7XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKGNvbnRyb2xzW2tleV0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoY29udHJvbHNba2V5XS5jb250cm9scyk7XHJcbiAgICAgICAgICAgIGVsc2VcclxuICAgICAgICAgICAgICAgIGNvbnRyb2xzW2tleV0udXBkYXRlVmFsdWVBbmRWYWxpZGl0eSgpO1xyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBleHByZXNzaW9uUHJvY2Vzc29yKGNvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCByb290RmllbGROYW1lOiBzdHJpbmcgPSBcIlwiKSB7XHJcbiAgICAgICAgT2JqZWN0LmtleXMoY29udHJvbHMpLmZvckVhY2goZmllbGROYW1lID0+IHtcclxuICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sOiBhbnkgPSBjb250cm9sc1tmaWVsZE5hbWVdO1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhBbm5vdGF0aW9uVHlwZXMpLmZvckVhY2godmFsaWRhdG9yTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXSAmJiBmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uZGlzYWJsZUV4cHJlc3Npb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xbXCJkaXNhYmxlRXhwcmVzc2lvblwiXSA9IGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5kaXNhYmxlRXhwcmVzc2lvbjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBMaW5xLmV4cHJlc3Npb25Db2x1bW5zKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5kaXNhYmxlRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AodGhpcy52YWxpZGF0aW9uUnVsZSwgcm9vdEZpZWxkTmFtZSArIHQucHJvcE5hbWUsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0gJiYgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AodGhpcy52YWxpZGF0aW9uUnVsZSwgcm9vdEZpZWxkTmFtZSArIHQucHJvcE5hbWUsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0gJiYgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmR5bmFtaWNDb25maWcpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBMaW5xLmR5bmFtaWNDb25maWdQYXJzZXIoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmR5bmFtaWNDb25maWcsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AodGhpcy52YWxpZGF0aW9uUnVsZSwgcm9vdEZpZWxkTmFtZSArIHQucHJvcE5hbWUsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdICYmICh2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5hbmQgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMub3IgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubm90KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0udmFsaWRhdGlvbikuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLnZhbGlkYXRpb25bdF0gIT09IFwiYm9vbGVhblwiKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0TG9naWNhbENvbmRpdGlvbmFsKHRoaXMudmFsaWRhdGlvblJ1bGUsIHQsIGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS52YWxpZGF0aW9uW3RdLmZpZWxkTmFtZSwgZmllbGROYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdICYmICgodmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMuY29tcGFyZSB8fCB2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5ncmVhdGVyVGhhbiB8fCB2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5ncmVhdGVyVGhhbkVxdWFsVG8gfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubGVzc1RoYW4gfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubGVzc1RoYW5FcXVhbFRvIHx8IHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLmRpZmZlcmVudCB8fCB2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5mYWN0b3IgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubWluVGltZSB8fCB2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5tYXhUaW1lKSB8fCAodmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMuY3JlZGl0Q2FyZCAmJiBmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uZmllbGROYW1lKSB8fCAoKHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLm1pbkRhdGUgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubWF4RGF0ZSkgJiYgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmZpZWxkTmFtZSkpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AodGhpcy52YWxpZGF0aW9uUnVsZSwgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmZpZWxkTmFtZSwgZmllbGROYW1lKVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH0pXHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtR3JvdXApIHtcclxuICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblByb2Nlc3Nvcihmb3JtQ29udHJvbC5jb250cm9scywgYCR7ZmllbGROYW1lfS5gKTtcclxuICAgICAgICAgICAgfSBlbHNlIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLmNvbnRyb2xzKVxyXG4gICAgICAgICAgICAgICAgICAgIGZvcm1Db250cm9sLmNvbnRyb2xzLmZvckVhY2goKHQ6IGFueSwgaSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5jb250cm9scylcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblByb2Nlc3Nvcih0LmNvbnRyb2xzLCBgJHtmaWVsZE5hbWV9W11gKTtcclxuICAgICAgICAgICAgICAgICAgICB9KVxyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH0pXHJcbiAgICB9XHJcblxyXG4gICAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbFZhbGlkYXRvcihjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7IH0pIHtcclxuICAgICAgICBPYmplY3Qua2V5cyhjb250cm9scykuZm9yRWFjaChmaWVsZE5hbWUgPT4ge1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uUnVsZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLnZhbGlkYXRpb25SdWxlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW2ZpZWxkTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIChjb250cm9scyBhcyBhbnkpW2ZpZWxkTmFtZV1bQ09ORElUSU9OQUxfVkFMSURBVE9SXSA9IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yKHRoaXMudmFsaWRhdGlvblJ1bGUuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbZmllbGROYW1lXSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoKGNvbnRyb2xzIGFzIGFueSlbZmllbGROYW1lXSBpbnN0YW5jZW9mIEZvcm1Hcm91cCAmJiB0aGlzLnZhbGlkYXRpb25SdWxlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpIHtcclxuICAgICAgICAgICAgICAgIHZhciBmaWVsZHMgPSB0aGlzLnZhbGlkYXRpb25SdWxlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKCh0OiBhbnkpID0+IHQub2JqZWN0UHJvcE5hbWUgPT0gZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgIGxldCBuZXN0ZWRGb3JtR3JvdXAgPSAoY29udHJvbHMgYXMgYW55KVtmaWVsZE5hbWVdIGFzIEZvcm1Hcm91cDtcclxuICAgICAgICAgICAgICAgIGxldCBwcm9wV2lzZUNvbmRpdGlvbmFsQ29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogc3RyaW5nW10gfSA9IHt9O1xyXG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcFdpc2VDb25kaXRpb25hbENvbnRyb2xzW3gucHJvcE5hbWVdKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wV2lzZUNvbmRpdGlvbmFsQ29udHJvbHNbeC5wcm9wTmFtZV0gPSBbXTtcclxuICAgICAgICAgICAgICAgICAgICBwcm9wV2lzZUNvbmRpdGlvbmFsQ29udHJvbHNbeC5wcm9wTmFtZV0ucHVzaCh4LnJlZmVyZW5jZVByb3BOYW1lKTtcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgT2JqZWN0LmtleXMocHJvcFdpc2VDb25kaXRpb25hbENvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgKG5lc3RlZEZvcm1Hcm91cC5jb250cm9scyBhcyBhbnkpW2tleV1bQ09ORElUSU9OQUxfVkFMSURBVE9SXSA9IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yKHByb3BXaXNlQ29uZGl0aW9uYWxDb250cm9sc1trZXldKTtcclxuICAgICAgICAgICAgICAgIH0pXHJcblxyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKChjb250cm9scyBhcyBhbnkpW2ZpZWxkTmFtZV0gaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIChjb250cm9scyBhcyBhbnkpW2ZpZWxkTmFtZV0uY29udHJvbHMuZm9yRWFjaCgodDogYW55LCBpOiBudW1iZXIpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAodC5jb250cm9scyA9PSB1bmRlZmluZWQpXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWxpZGF0b3IoPGFueT57IFtpXTogdCB9KTtcclxuICAgICAgICAgICAgICAgICAgICBlbHNlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWxpZGF0b3IodC5jb250cm9scyk7XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG5cclxuICAgIG5nT25EZXN0cm95KCkge1xyXG5cclxuICAgIH1cclxufVxyXG4iXX0=
|
|
234
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvZGlyZWN0aXZlcy9yeC1mb3JtLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQW9CLFNBQVMsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDbkUsT0FBTyxFQUFtQixTQUFTLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQy9FLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxLQUFLLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUNsRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDM0QsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDN0QsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sMERBQTBELENBQUM7QUFDdEcsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNwQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBRWpEOztHQUVHO0FBSUgsTUFBTSxPQUFPLGtCQUFtQixTQUFRLGFBQWE7SUFDakQ7O09BRUc7SUFDSyxrQkFBa0IsR0FBUSxDQUFDLENBQUM7SUFFcEM7O09BRUc7SUFDSyxjQUFjLEdBQVEsRUFBRSxDQUFDO0lBRWpDOztPQUVHO0lBRUksU0FBUyxDQUFhO0lBRTdCOztPQUVHO0lBRUksTUFBTSxDQUFVO0lBRXZCOztPQUVHO0lBQ0gsa0JBQWtCO1FBQ2QsK0dBQStHO1FBQy9HLElBQUksSUFBSSxDQUFDLFNBQVMsSUFBSSxDQUFFLElBQUksQ0FBQyxTQUFpQixDQUFDLEtBQUssQ0FBQyxJQUFJLElBQUksQ0FBQyxTQUFTLENBQUMsTUFBTSxJQUFJLElBQUksRUFBRTtZQUNwRiwy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b0JBQzFGLElBQUksQ0FBQyxDQUFDLFFBQVEsSUFBSSxTQUFTLEVBQUU7d0JBQ3pCLDBEQUEwRDt3QkFDMUQsSUFBSSxDQUFDLHVCQUF1QixDQUFNLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3FCQUNqRDt5QkFBTTt3QkFDSCxzREFBc0Q7d0JBQ3RELElBQUksQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLENBQUMsUUFBUSxDQUFDLENBQUM7cUJBQzVDO2dCQUNMLENBQUMsQ0FBQyxDQUFDO2FBQ047UUFDTCxDQUFDLENBQUMsQ0FBQztJQUNQLENBQUM7MEhBalBRLGtCQUFrQjs4R0FBbEIsa0JBQWtCOzsyRkFBbEIsa0JBQWtCO2tCQUg5QixTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSx5QkFBeUI7aUJBQ3RDOzhCQWdCVSxTQUFTO3NCQURmLEtBQUs7Z0JBT0MsTUFBTTtzQkFEWixLQUFLO3VCQUFDLFdBQVciLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBZnRlckNvbnRlbnRJbml0LCBEaXJlY3RpdmUsIElucHV0IH0gZnJvbSBcIkBhbmd1bGFyL2NvcmVcIjtcclxuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQXJyYXksIEZvcm1Hcm91cCwgTmdGb3JtIH0gZnJvbSBcIkBhbmd1bGFyL2Zvcm1zXCI7XHJcbmltcG9ydCB7IENPTkRJVElPTkFMX1ZBTElEQVRPUiwgTU9ERUwgfSBmcm9tICcuLi9jb25zdC9hcHAuY29uc3QnO1xyXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS9hbm5vdGF0aW9uLXR5cGVzXCI7XHJcbmltcG9ydCB7IGRlZmF1bHRDb250YWluZXIgfSBmcm9tIFwiLi4vY29yZS9kZWZhdWx0LWNvbnRhaW5lclwiO1xyXG5pbXBvcnQgeyBjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9jb25kaXRpb25hbC1jaGFuZ2UudmFsaWRhdG9yJztcclxuaW1wb3J0IHsgTGlucSB9IGZyb20gXCIuLi91dGlsL2xpbnFcIjtcclxuaW1wb3J0IHsgQmFzZURpcmVjdGl2ZSB9IGZyb20gXCIuL2Jhc2UtZGlyZWN0aXZlXCI7XHJcblxyXG4vKipcclxuICogVGhpcyBkaXJlY3RpdmUgcHJvdmlkZXMgZnVuY3Rpb25hbGl0eSBmb3IgaW50ZWdyYXRpbmcgUnhXZWJGb3JtcyB3aXRoIEFuZ3VsYXIgZm9ybXMuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW2Zvcm1Hcm91cF0sW3J4d2ViRm9ybV0nLFxyXG59KVxyXG5leHBvcnQgY2xhc3MgUnh3ZWJGb3JtRGlyZWN0aXZlIGV4dGVuZHMgQmFzZURpcmVjdGl2ZSBpbXBsZW1lbnRzIEFmdGVyQ29udGVudEluaXQge1xyXG4gICAgLyoqXHJcbiAgICAgKiBUaW1lb3V0IElEIGZvciBjbGVhcmluZyB0aGUgdGltZW91dFxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNsZWFyVGltZW91dE51bWJlcjogYW55ID0gMDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE9iamVjdCB0byBzdG9yZSB2YWxpZGF0aW9uIHJ1bGVzXHJcbiAgICAgKi9cclxuICAgIHByaXZhdGUgdmFsaWRhdGlvblJ1bGU6IGFueSA9IHt9O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogVGhlIGZvcm1Hcm91cCBpbnB1dCBwcm9wZXJ0eSBmb3IgYmluZGluZyB0aGUgZm9ybSBncm91cCB0byB0aGUgZGlyZWN0aXZlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZvcm1Hcm91cD86IEZvcm1Hcm91cDtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFRoZSBuZ0Zvcm0gaW5wdXQgcHJvcGVydHkgZm9yIGJpbmRpbmcgdGhlIE5nRm9ybSB0byB0aGUgZGlyZWN0aXZlLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoJ3J4d2ViRm9ybScpXHJcbiAgICBwdWJsaWMgbmdGb3JtPzogTmdGb3JtO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQWZ0ZXIgdGhlIGNvbnRlbnQgaXMgaW5pdGlhbGl6ZWQsIHRoaXMgbWV0aG9kIGNvbmZpZ3VyZXMgbW9kZWwgdmFsaWRhdGlvbnMgYmFzZWQgb24gdGhlIGZvcm1Hcm91cCBvciBuZ0Zvcm0uXHJcbiAgICAgKi9cclxuICAgIG5nQWZ0ZXJDb250ZW50SW5pdCgpOiB2b2lkIHtcclxuICAgICAgICAvKiBJZiB0aGUgZm9ybUdyb3VwIGV4aXN0cywgZG9lc24ndCBoYXZlIHRoZSBNT0RFTCBwcm9wZXJ0eSwgYW5kIGhhcyBubyBwYXJlbnQgKGkuZS4sIGl0J3MgYSB0b3AtbGV2ZWwgZm9ybSkgKi9cclxuICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXAgJiYgISh0aGlzLmZvcm1Hcm91cCBhcyBhbnkpW01PREVMXSAmJiB0aGlzLmZvcm1Hcm91cC5wYXJlbnQgPT0gbnVsbCkge1xyXG4gICAgICAgICAgICAvKiBQcm9jZXNzIGV4cHJlc3Npb25zIGZvciBjb25maWd1cmluZyBtb2RlbCB2YWxpZGF0aW9ucyAqL1xyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25Qcm9jZXNzb3IodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpO1xyXG5cclxuICAgICAgICAgICAgLyogU2V0IGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgYmFzZWQgb24gdGhlIHZhbGlkYXRpb24gcnVsZSAqL1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsVmFsaWRhdG9yKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIElmIHRoZSBmb3JtR3JvdXAgZXhpc3RzLCBkb2Vzbid0IGhhdmUgdGhlIE1PREVMIHByb3BlcnR5LCBhbmQgaXRzIHBhcmVudCBpcyBhbiBpbnN0YW5jZSBvZiBGb3JtQXJyYXkgKi9cclxuICAgICAgICBlbHNlIGlmICh0aGlzLmZvcm1Hcm91cCAmJiAhKHRoaXMuZm9ybUdyb3VwIGFzIGFueSlbTU9ERUxdICYmIHRoaXMuZm9ybUdyb3VwLnBhcmVudCBpbnN0YW5jZW9mIEZvcm1BcnJheSkge1xyXG4gICAgICAgICAgICAvKiBQcm9jZXNzIGV4cHJlc3Npb25zIGZvciBjb25maWd1cmluZyBtb2RlbCB2YWxpZGF0aW9ucyAqL1xyXG4gICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25Qcm9jZXNzb3IodGhpcy5mb3JtR3JvdXAuY29udHJvbHMpO1xyXG5cclxuICAgICAgICAgICAgLyogU2V0IGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgYmFzZWQgb24gdGhlIHZhbGlkYXRpb24gcnVsZSAqL1xyXG4gICAgICAgICAgICB0aGlzLnNldENvbmRpdGlvbmFsVmFsaWRhdG9yKHRoaXMuZm9ybUdyb3VwLmNvbnRyb2xzKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8qIElmIG5nRm9ybSBpcyBwcmVzZW50ICovXHJcbiAgICAgICAgZWxzZSBpZiAodGhpcy5uZ0Zvcm0pIHtcclxuICAgICAgICAgICAgLyogQ29uZmlndXJlIG1vZGVsIHZhbGlkYXRpb25zICovXHJcbiAgICAgICAgICAgIHRoaXMuY29uZmlndXJlTW9kZWxWYWxpZGF0aW9ucygpO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbmZpZ3VyZXMgbW9kZWwgdmFsaWRhdGlvbnMgYmFzZWQgb24gdGhlIG5nRm9ybSBpZiBwcmVzZW50LlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGNvbmZpZ3VyZU1vZGVsVmFsaWRhdGlvbnMoKSB7XHJcbiAgICAgICAgLyogSWYgbmdGb3JtIGlzIHByZXNlbnQgKi9cclxuICAgICAgICBpZiAodGhpcy5uZ0Zvcm0pIHtcclxuICAgICAgICAgICAgLyogU2V0IGEgdGltZW91dCB0byBhcHBseSB2YWxpZGF0aW9ucyBhZnRlciBhIGRlbGF5ICovXHJcbiAgICAgICAgICAgIHRoaXMuY2xlYXJUaW1lb3V0TnVtYmVyID0gc2V0VGltZW91dCgoKSA9PiB7XHJcbiAgICAgICAgICAgICAgICAvKiBDbGVhciB0aGUgdGltZW91dCB0byBwcmV2ZW50IG11bHRpcGxlIGNhbGxzICovXHJcbiAgICAgICAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jbGVhclRpbWVvdXROdW1iZXIpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIEFwcGx5IHZhbGlkYXRpb25zIHRvIHRoZSBmb3JtIGNvbnRyb2xzICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5VmFsaWRhdGlvbnModGhpcy5uZ0Zvcm0hLmZvcm0uY29udHJvbHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZXhwcmVzc2lvbnMgZm9yIGNvbmZpZ3VyaW5nIG1vZGVsIHZhbGlkYXRpb25zICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLmV4cHJlc3Npb25Qcm9jZXNzb3IodGhpcy5uZ0Zvcm0hLmZvcm0uY29udHJvbHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIFNldCBjb25kaXRpb25hbCB2YWxpZGF0b3JzIGJhc2VkIG9uIHRoZSB2YWxpZGF0aW9uIHJ1bGUgKi9cclxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWxpZGF0b3IodGhpcy5uZ0Zvcm0hLmZvcm0uY29udHJvbHMpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB0aGUgdmFsdWUgYW5kIHZhbGlkaXR5IG9mIHRoZSBmb3JtIGNvbnRyb2xzICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkodGhpcy5uZ0Zvcm0hLmZvcm0uY29udHJvbHMpO1xyXG4gICAgICAgICAgICB9LCA1MDApO1xyXG4gICAgICAgIH1cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFVwZGF0ZXMgdGhlIHZhbHVlIGFuZCB2YWxpZGl0eSBvZiB0aGUgZm9ybSBjb250cm9scy5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSB1cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGNvbnRyb2xzOiBhbnkpIHtcclxuICAgICAgICAvKiBJdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRyb2xzIG9iamVjdCAqL1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGtleSA9PiB7XHJcbiAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGFuIGluc3RhbmNlIG9mIEZvcm1Hcm91cCAqL1xyXG4gICAgICAgICAgICBpZiAoY29udHJvbHNba2V5XSBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIFJlY3Vyc2l2ZWx5IHVwZGF0ZSB2YWx1ZSBhbmQgdmFsaWRpdHkgZm9yIGNvbnRyb2xzIHdpdGhpbiB0aGUgRm9ybUdyb3VwICovXHJcbiAgICAgICAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoY29udHJvbHNba2V5XS5jb250cm9scyk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGFuIGluc3RhbmNlIG9mIEZvcm1BcnJheSAqL1xyXG4gICAgICAgICAgICBlbHNlIGlmIChjb250cm9sc1trZXldIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAvKiBSZWN1cnNpdmVseSB1cGRhdGUgdmFsdWUgYW5kIHZhbGlkaXR5IGZvciBjb250cm9scyB3aXRoaW4gdGhlIEZvcm1BcnJheSAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KGNvbnRyb2xzW2tleV0uY29udHJvbHMpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIC8qIFVwZGF0ZSB2YWx1ZSBhbmQgdmFsaWRpdHkgZm9yIHRoZSBjb250cm9sICovXHJcbiAgICAgICAgICAgICAgICBjb250cm9sc1trZXldLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgIH1cclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb2Nlc3NlcyB0aGUgZXhwcmVzc2lvbnMgZm9yIGNvbmZpZ3VyaW5nIG1vZGVsIHZhbGlkYXRpb25zLlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2xzIC0gVGhlIGZvcm0gY29udHJvbHMgdG8gcHJvY2Vzcy5cclxuICAgICAqIEBwYXJhbSByb290RmllbGROYW1lIC0gVGhlIHJvb3QgZmllbGQgbmFtZSBmb3IgbmVzdGVkIGNvbnRyb2xzLlxyXG4gICAgICovXHJcbiAgICBwcml2YXRlIGV4cHJlc3Npb25Qcm9jZXNzb3IoY29udHJvbHM6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHJvb3RGaWVsZE5hbWU6IHN0cmluZyA9IFwiXCIpIHtcclxuICAgICAgICAvKiBJdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgdGhlIGNvbnRyb2xzIG9iamVjdCAqL1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIC8qIEdldCB0aGUgY29udHJvbCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IGZpZWxkIG5hbWUgKi9cclxuICAgICAgICAgICAgbGV0IGZvcm1Db250cm9sOiBhbnkgPSBjb250cm9sc1tmaWVsZE5hbWVdO1xyXG5cclxuICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGNvbnRyb2wgaGFzIHZhbGlkYXRvckNvbmZpZyAqL1xyXG4gICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIgdGhlIGtleXMgb2YgQW5ub3RhdGlvblR5cGVzICovXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhBbm5vdGF0aW9uVHlwZXMpLmZvckVhY2godmFsaWRhdG9yTmFtZSA9PiB7XHJcbiAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdmFsaWRhdG9yIGV4aXN0cyBpbiB0aGUgdmFsaWRhdG9yQ29uZmlnIGFuZCBoYXMgZGlzYWJsZUV4cHJlc3Npb24gKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdICYmIGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5kaXNhYmxlRXhwcmVzc2lvbikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgdGhlIGRpc2FibGVFeHByZXNzaW9uIHByb3BlcnR5IGZvciB0aGUgZm9ybUNvbnRyb2wgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUNvbnRyb2xbXCJkaXNhYmxlRXhwcmVzc2lvblwiXSA9IGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5kaXNhYmxlRXhwcmVzc2lvbjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dHJhY3QgY29sdW1ucyBmcm9tIHRoZSBkaXNhYmxlRXhwcmVzc2lvbiBhbmQgc2V0IGNvbmRpdGlvbmFsIHZhbHVlIHByb3BlcnRpZXMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBMaW5xLmV4cHJlc3Npb25Db2x1bW5zKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5kaXNhYmxlRXhwcmVzc2lvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbnMuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuc2V0Q29uZGl0aW9uYWxWYWx1ZVByb3AodGhpcy52YWxpZGF0aW9uUnVsZSwgcm9vdEZpZWxkTmFtZSArIHQucHJvcE5hbWUsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLyogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgdmFsaWRhdG9yIGV4aXN0cyBpbiB0aGUgdmFsaWRhdG9yQ29uZmlnIGFuZCBoYXMgY29uZGl0aW9uYWxFeHByZXNzaW9uICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXSAmJiBmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8qIEV4dHJhY3QgY29sdW1ucyBmcm9tIHRoZSBjb25kaXRpb25hbEV4cHJlc3Npb24gYW5kIHNldCBjb25kaXRpb25hbCB2YWx1ZSBwcm9wZXJ0aWVzICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2x1bW5zID0gTGlucS5leHByZXNzaW9uQ29sdW1ucyhmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uY29uZGl0aW9uYWxFeHByZXNzaW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5zZXRDb25kaXRpb25hbFZhbHVlUHJvcCh0aGlzLnZhbGlkYXRpb25SdWxlLCByb290RmllbGROYW1lICsgdC5wcm9wTmFtZSwgZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY3VycmVudCB2YWxpZGF0b3IgZXhpc3RzIGluIHRoZSB2YWxpZGF0b3JDb25maWcgYW5kIGhhcyBkeW5hbWljQ29uZmlnICovXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXSAmJiBmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uZHluYW1pY0NvbmZpZykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBQYXJzZSBkeW5hbWljQ29uZmlnLCBleHRyYWN0IGNvbHVtbnMsIGFuZCBzZXQgY29uZGl0aW9uYWwgdmFsdWUgcHJvcGVydGllcyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZHluYW1pY0NvbmZpZ1BhcnNlcihmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0uZHluYW1pY0NvbmZpZywgZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5mb3JFYWNoKHQgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5zZXRDb25kaXRpb25hbFZhbHVlUHJvcCh0aGlzLnZhbGlkYXRpb25SdWxlLCByb290RmllbGROYW1lICsgdC5wcm9wTmFtZSwgZmllbGROYW1lKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY3VycmVudCB2YWxpZGF0b3IgZXhpc3RzIGluIHRoZSB2YWxpZGF0b3JDb25maWcgYW5kIGlzIGEgbG9naWNhbCB2YWxpZGF0b3IgKi9cclxuICAgICAgICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdICYmICh2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5hbmQgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMub3IgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubm90KSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBJdGVyYXRlIG92ZXIgdGhlIHZhbGlkYXRpb24gcnVsZXMsIHNldCBsb2dpY2FsIGNvbmRpdGlvbmFscyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhmb3JtQ29udHJvbC52YWxpZGF0b3JDb25maWdbdmFsaWRhdG9yTmFtZV0udmFsaWRhdGlvbikuZm9yRWFjaCh0ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLnZhbGlkYXRpb25bdF0gIT09IFwiYm9vbGVhblwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdENvbnRhaW5lci5zZXRMb2dpY2FsQ29uZGl0aW9uYWwodGhpcy52YWxpZGF0aW9uUnVsZSwgdCwgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLnZhbGlkYXRpb25bdF0uZmllbGROYW1lLCBmaWVsZE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBjdXJyZW50IHZhbGlkYXRvciBleGlzdHMgaW4gdGhlIHZhbGlkYXRvckNvbmZpZyBhbmQgaXMgYSBjb21wYXJpc29uIG9yIHJhbmdlIHZhbGlkYXRvciAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXSAmJiAoKHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLmNvbXBhcmUgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMuZ3JlYXRlclRoYW4gfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMuZ3JlYXRlclRoYW5FcXVhbFRvIHx8IHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLmxlc3NUaGFuIHx8IHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLmxlc3NUaGFuRXF1YWxUbyB8fCB2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5kaWZmZXJlbnQgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMuZmFjdG9yIHx8IHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLm1pblRpbWUgfHwgdmFsaWRhdG9yTmFtZSA9PSBBbm5vdGF0aW9uVHlwZXMubWF4VGltZSkgfHwgKHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLmNyZWRpdENhcmQgJiYgZm9ybUNvbnRyb2wudmFsaWRhdG9yQ29uZmlnW3ZhbGlkYXRvck5hbWVdLmZpZWxkTmFtZSkgfHwgKCh2YWxpZGF0b3JOYW1lID09IEFubm90YXRpb25UeXBlcy5taW5EYXRlIHx8IHZhbGlkYXRvck5hbWUgPT0gQW5ub3RhdGlvblR5cGVzLm1heERhdGUpICYmIGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5maWVsZE5hbWUpKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uZGl0aW9uYWwgdmFsdWUgcHJvcGVydGllcyAqL1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLnNldENvbmRpdGlvbmFsVmFsdWVQcm9wKHRoaXMudmFsaWRhdGlvblJ1bGUsIGZvcm1Db250cm9sLnZhbGlkYXRvckNvbmZpZ1t2YWxpZGF0b3JOYW1lXS5maWVsZE5hbWUsIGZpZWxkTmFtZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIENoZWNrIGlmIHRoZSBjb250cm9sIGlzIGFuIGluc3RhbmNlIG9mIEZvcm1Hcm91cCAqL1xyXG4gICAgICAgICAgICBlbHNlIGlmIChmb3JtQ29udHJvbCBpbnN0YW5jZW9mIEZvcm1Hcm91cCkge1xyXG4gICAgICAgICAgICAgICAgLyogUmVjdXJzaXZlbHkgcHJvY2VzcyBjb250cm9scyB3aXRoaW4gdGhlIEZvcm1Hcm91cCAqL1xyXG4gICAgICAgICAgICAgICAgdGhpcy5leHByZXNzaW9uUHJvY2Vzc29yKGZvcm1Db250cm9sLmNvbnRyb2xzLCBgJHtmaWVsZE5hbWV9LmApO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAvKiBDaGVjayBpZiB0aGUgY29udHJvbCBpcyBhbiBpbnN0YW5jZSBvZiBGb3JtQXJyYXkgKi9cclxuICAgICAgICAgICAgZWxzZSBpZiAoZm9ybUNvbnRyb2wgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgIC8qIFByb2Nlc3MgZWFjaCBjb250cm9sIHdpdGhpbiB0aGUgRm9ybUFycmF5ICovXHJcbiAgICAgICAgICAgICAgICBpZiAoZm9ybUNvbnRyb2wuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3JtQ29udHJvbC5jb250cm9scy5mb3JFYWNoKCh0OiBhbnksIGkpID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHQuY29udHJvbHMpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZXhwcmVzc2lvblByb2Nlc3Nvcih0LmNvbnRyb2xzLCBgJHtmaWVsZE5hbWV9W11gKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgYmFzZWQgb24gdGhlIHZhbGlkYXRpb24gcnVsZS5cclxuICAgICAqL1xyXG4gICAgcHJpdmF0ZSBzZXRDb25kaXRpb25hbFZhbGlkYXRvcihjb250cm9sczogeyBba2V5OiBzdHJpbmddOiBBYnN0cmFjdENvbnRyb2w7IH0pIHtcclxuICAgICAgICAvKiBJdGVyYXRlcyB0aHJvdWdoIHRoZSBmb3JtIGNvbnRyb2xzIGFuZCBzZXRzIGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgYmFzZWQgb24gdmFsaWRhdGlvbiBydWxlcyAqL1xyXG4gICAgICAgIE9iamVjdC5rZXlzKGNvbnRyb2xzKS5mb3JFYWNoKGZpZWxkTmFtZSA9PiB7XHJcbiAgICAgICAgICAgIC8qIElmIGNvbmRpdGlvbmFsIHZhbGlkYXRpb24gcHJvcGVydGllcyBhcmUgZGVmaW5lZCBmb3IgdGhlIGZpZWxkLCBzZXQgdGhlIGNvbmRpdGlvbmFsIHZhbGlkYXRvciAqL1xyXG4gICAgICAgICAgICBpZiAodGhpcy52YWxpZGF0aW9uUnVsZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wcyAmJiB0aGlzLnZhbGlkYXRpb25SdWxlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW2ZpZWxkTmFtZV0pIHtcclxuICAgICAgICAgICAgICAgIChjb250cm9scyBhcyBhbnkpW2ZpZWxkTmFtZV1bQ09ORElUSU9OQUxfVkFMSURBVE9SXSA9IGNvbmRpdGlvbmFsQ2hhbmdlVmFsaWRhdG9yKHRoaXMudmFsaWRhdGlvblJ1bGUuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbZmllbGROYW1lXSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIElmIHRoZSBmaWVsZCBpcyBhIEZvcm1Hcm91cCBhbmQgY29uZGl0aW9uYWwgb2JqZWN0IHByb3BlcnRpZXMgYXJlIGRlZmluZWQsIHNldCBjb25kaXRpb25hbCB2YWxpZGF0b3JzIGZvciBuZXN0ZWQgZmllbGRzICovXHJcbiAgICAgICAgICAgIGVsc2UgaWYgKChjb250cm9scyBhcyBhbnkpW2ZpZWxkTmFtZV0gaW5zdGFuY2VvZiBGb3JtR3JvdXAgJiYgdGhpcy52YWxpZGF0aW9uUnVsZS5jb25kaXRpb25hbE9iamVjdFByb3BzKSB7XHJcbiAgICAgICAgICAgICAgICAvKiBGaWx0ZXIgY29uZGl0aW9uYWwgb2JqZWN0IHByb3BlcnRpZXMgYmFzZWQgb24gdGhlIGN1cnJlbnQgZmllbGQgbmFtZSAqL1xyXG4gICAgICAgICAgICAgICAgdmFyIGZpZWxkcyA9IHRoaXMudmFsaWRhdGlvblJ1bGUuY29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIoKHQ6IGFueSkgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBmaWVsZE5hbWUpO1xyXG5cclxuICAgICAgICAgICAgICAgIC8qIEFjY2VzcyB0aGUgbmVzdGVkIEZvcm1Hcm91cCBjb3JyZXNwb25kaW5nIHRvIHRoZSBjdXJyZW50IGZpZWxkICovXHJcbiAgICAgICAgICAgICAgICBsZXQgbmVzdGVkRm9ybUdyb3VwID0gKGNvbnRyb2xzIGFzIGFueSlbZmllbGROYW1lXSBhcyBGb3JtR3JvdXA7XHJcblxyXG4gICAgICAgICAgICAgICAgLyogSW5pdGlhbGl6ZSBhbiBvYmplY3QgdG8gc3RvcmUgY29uZGl0aW9uYWwgY29udHJvbHMgZ3JvdXBlZCBieSBwcm9wZXJ0eSBuYW1lICovXHJcbiAgICAgICAgICAgICAgICBsZXQgcHJvcFdpc2VDb25kaXRpb25hbENvbnRyb2xzOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZ1tdIH0gPSB7fTtcclxuXHJcbiAgICAgICAgICAgICAgICAvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGZpbHRlcmVkIGZpZWxkcyBhbmQgZ3JvdXAgY29uZGl0aW9uYWwgY29udHJvbHMgYnkgcHJvcGVydHkgbmFtZSAqL1xyXG4gICAgICAgICAgICAgICAgZmllbGRzLmZvckVhY2goKHg6IGFueSkgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBwcm9wZXJ0eSBuYW1lIGRvZXNuJ3QgZXhpc3QgaW4gdGhlIGdyb3VwaW5nIG9iamVjdCwgaW5pdGlhbGl6ZSBpdCAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICghcHJvcFdpc2VDb25kaXRpb25hbENvbnRyb2xzW3gucHJvcE5hbWVdKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BXaXNlQ29uZGl0aW9uYWxDb250cm9sc1t4LnByb3BOYW1lXSA9IFtdO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvKiBQdXNoIHRoZSByZWZlcmVuY2UgcHJvcGVydHkgbmFtZSB0byB0aGUgYXJyYXkgY29ycmVzcG9uZGluZyB0byB0aGUgcHJvcGVydHkgbmFtZSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIHByb3BXaXNlQ29uZGl0aW9uYWxDb250cm9sc1t4LnByb3BOYW1lXS5wdXNoKHgucmVmZXJlbmNlUHJvcE5hbWUpO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgLyogU2V0IGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgZm9yIG5lc3RlZCBmb3JtIGNvbnRyb2xzICovXHJcbiAgICAgICAgICAgICAgICBPYmplY3Qua2V5cyhwcm9wV2lzZUNvbmRpdGlvbmFsQ29udHJvbHMpLmZvckVhY2goa2V5ID0+IHtcclxuICAgICAgICAgICAgICAgICAgICAobmVzdGVkRm9ybUdyb3VwLmNvbnRyb2xzIGFzIGFueSlba2V5XVtDT05ESVRJT05BTF9WQUxJREFUT1JdID0gY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IocHJvcFdpc2VDb25kaXRpb25hbENvbnRyb2xzW2tleV0pO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIC8qIElmIHRoZSBmaWVsZCBpcyBhIEZvcm1BcnJheSwgcmVjdXJzaXZlbHkgc2V0IGNvbmRpdGlvbmFsIHZhbGlkYXRvcnMgZm9yIGl0cyBjb250cm9scyAqL1xyXG4gICAgICAgICAgICBlbHNlIGlmICgoY29udHJvbHMgYXMgYW55KVtmaWVsZE5hbWVdIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAvKiBJdGVyYXRlIHRocm91Z2ggdGhlIGNvbnRyb2xzIG9mIHRoZSBjdXJyZW50IEZvcm1BcnJheSAqL1xyXG4gICAgICAgICAgICAgICAgKGNvbnRyb2xzIGFzIGFueSlbZmllbGROYW1lXS5jb250cm9scy5mb3JFYWNoKCh0OiBhbnksIGk6IG51bWJlcikgPT4ge1xyXG4gICAgICAgICAgICAgICAgICAgIC8qIElmIHRoZSBjb250cm9sIGRvZXNuJ3QgaGF2ZSBjaGlsZCBjb250cm9scyAoaS5lLiwgaXQncyBub3QgYSBGb3JtR3JvdXAgb3IgRm9ybUFycmF5KSAqL1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0LmNvbnRyb2xzID09IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uZGl0aW9uYWwgdmFsaWRhdG9yIGZvciB0aGUgaW5kaXZpZHVhbCBjb250cm9sICovXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0Q29uZGl0aW9uYWxWYWxpZGF0b3IoPGFueT57IFtpXTogdCB9KTtcclxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXQgY29uZGl0aW9uYWwgdmFsaWRhdG9yIGZvciB0aGUgY2hpbGQgY29udHJvbHMgKi9cclxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRDb25kaXRpb25hbFZhbGlkYXRvcih0LmNvbnRyb2xzKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59Il19
|
package/esm2022/lib/form-validators/directives/template-validations/async-validation.directive.mjs
CHANGED
|
@@ -4,15 +4,13 @@ import { of } from 'rxjs';
|
|
|
4
4
|
import * as i0 from "@angular/core";
|
|
5
5
|
export class AsyncValidationDirective {
|
|
6
6
|
/**
|
|
7
|
-
*
|
|
7
|
+
* The async validation function.
|
|
8
8
|
*/
|
|
9
9
|
async;
|
|
10
10
|
/**
|
|
11
|
-
* @description
|
|
12
11
|
* Method that performs async validation against the provided control.
|
|
13
12
|
*
|
|
14
13
|
* @param control The control to validate against.
|
|
15
|
-
*
|
|
16
14
|
* @returns A promise or observable that resolves a map of validation errors
|
|
17
15
|
* if validation fails, otherwise null.
|
|
18
16
|
*/
|
|
@@ -39,4 +37,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
39
37
|
}], propDecorators: { async: [{
|
|
40
38
|
type: Input
|
|
41
39
|
}] } });
|
|
42
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bmMtdmFsaWRhdGlvbi5kaXJlY3RpdmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvZGlyZWN0aXZlcy90ZW1wbGF0ZS12YWxpZGF0aW9ucy9hc3luYy12YWxpZGF0aW9uLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxLQUFLLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0QsT0FBTyxFQUFtQyxtQkFBbUIsRUFBb0IsTUFBTSxnQkFBZ0IsQ0FBQztBQUN4RyxPQUFPLEVBQWMsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFDOztBQVV0QyxNQUFNLE9BQU8sd0JBQXdCO0lBQ2pDOztPQUVHO0lBRUksS0FBSyxDQUFNO0lBRWxCOzs7Ozs7T0FNRztJQUNJLFFBQVEsQ0FBQyxPQUF3QjtRQUNwQyxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUN2RCxDQUFDOzBIQWhCUSx3QkFBd0I7OEdBQXhCLHdCQUF3QixnR0FOdEIsQ0FBQztnQkFDUixPQUFPLEVBQUUsbUJBQW1CO2dCQUM1QixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSxDQUFDLHdCQUF3QixFQUFDO2dCQUN2RCxLQUFLLEVBQUUsSUFBSTthQUNkLENBQUM7OzJGQUVPLHdCQUF3QjtrQkFScEMsU0FBUzttQkFBQztvQkFDUCxRQUFRLEVBQUUsMkNBQTJDO29CQUNyRCxTQUFTLEVBQUUsQ0FBQzs0QkFDUixPQUFPLEVBQUUsbUJBQW1COzRCQUM1QixXQUFXLEVBQUUsVUFBVSxFQUFDLEdBQUcsRUFBRSx5QkFBeUIsRUFBQzs0QkFDdkQsS0FBSyxFQUFFLElBQUk7eUJBQ2QsQ0FBQztpQkFDTDs4QkFNVSxLQUFLO3NCQURYLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBEaXJlY3RpdmUsIGZvcndhcmRSZWYsIElucHV0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgQXN5bmNWYWxpZGF0b3IsIE5HX0FTWU5DX1ZBTElEQVRPUlMsIFZhbGlkYXRpb25FcnJvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IE9ic2VydmFibGUsIG9mIH0gZnJvbSAncnhqcyc7XHJcblxyXG5ARGlyZWN0aXZlKHtcclxuICAgIHNlbGVjdG9yOiAnW25nTW9kZWxdLFtmb3JtQ29udHJvbE5hbWVdLFtmb3JtQ29udHJvbF0nLFxyXG4gICAgcHJvdmlkZXJzOiBbe1xyXG4gICAgICAgIHByb3ZpZGU6IE5HX0FTWU5DX1ZBTElEQVRPUlMsXHJcbiAgICAgICAgdXNlRXhpc3Rpbmc6IGZvcndhcmRSZWYoKCkgPT4gQXN5bmNWYWxpZGF0aW9uRGlyZWN0aXZlKSxcclxuICAgICAgICBtdWx0aTogdHJ1ZVxyXG4gICAgfV1cclxufSlcclxuZXhwb3J0IGNsYXNzIEFzeW5jVmFsaWRhdGlvbkRpcmVjdGl2ZSBpbXBsZW1lbnRzIEFzeW5jVmFsaWRhdG9yIHtcclxuICAgIC8qKlxyXG4gICAgICogVGhlIGFzeW5jIHZhbGlkYXRpb24gZnVuY3Rpb24uXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgYXN5bmM6IGFueTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIE1ldGhvZCB0aGF0IHBlcmZvcm1zIGFzeW5jIHZhbGlkYXRpb24gYWdhaW5zdCB0aGUgcHJvdmlkZWQgY29udHJvbC5cclxuICAgICAqIFxyXG4gICAgICogQHBhcmFtIGNvbnRyb2wgVGhlIGNvbnRyb2wgdG8gdmFsaWRhdGUgYWdhaW5zdC5cclxuICAgICAqIEByZXR1cm5zIEEgcHJvbWlzZSBvciBvYnNlcnZhYmxlIHRoYXQgcmVzb2x2ZXMgYSBtYXAgb2YgdmFsaWRhdGlvbiBlcnJvcnNcclxuICAgICAqIGlmIHZhbGlkYXRpb24gZmFpbHMsIG90aGVyd2lzZSBudWxsLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgdmFsaWRhdGUoY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogUHJvbWlzZTxWYWxpZGF0aW9uRXJyb3JzIHwgbnVsbD4gfCBPYnNlcnZhYmxlPFZhbGlkYXRpb25FcnJvcnMgfCBudWxsPiB7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuYXN5bmMgPyB0aGlzLmFzeW5jKGNvbnRyb2wpIDogb2YobnVsbCk7XHJcbiAgICB9XHJcbn0iXX0=
|
package/esm2022/lib/form-validators/directives/template-validations/base-validator.directive.mjs
CHANGED
|
@@ -7,15 +7,25 @@ import * as i0 from "@angular/core";
|
|
|
7
7
|
* It extends ControlExpressionProcess to handle control expressions.
|
|
8
8
|
*/
|
|
9
9
|
export class BaseValidator extends ControlExpressionProcess {
|
|
10
|
-
/**
|
|
10
|
+
/**
|
|
11
|
+
* Input property for the form control associated with the validator.
|
|
12
|
+
*/
|
|
11
13
|
formControl;
|
|
12
|
-
/**
|
|
14
|
+
/**
|
|
15
|
+
* Array to store the validator functions.
|
|
16
|
+
*/
|
|
13
17
|
validators = [];
|
|
14
|
-
/**
|
|
18
|
+
/**
|
|
19
|
+
* Reference to the HTML element associated with the validator.
|
|
20
|
+
*/
|
|
15
21
|
element;
|
|
16
|
-
/**
|
|
22
|
+
/**
|
|
23
|
+
* Name of the event triggering the validation.
|
|
24
|
+
*/
|
|
17
25
|
eventName;
|
|
18
|
-
/**
|
|
26
|
+
/**
|
|
27
|
+
* Provider for handling masks in validation.
|
|
28
|
+
*/
|
|
19
29
|
maskProvider;
|
|
20
30
|
/**
|
|
21
31
|
* Performs validation on the provided control using the defined validators and mask provider.
|
|
@@ -43,7 +53,7 @@ export class BaseValidator extends ControlExpressionProcess {
|
|
|
43
53
|
*/
|
|
44
54
|
setEventName() {
|
|
45
55
|
var eventName = '';
|
|
46
|
-
|
|
56
|
+
/* Determine event based on HTML element type */
|
|
47
57
|
switch (this.element.tagName) {
|
|
48
58
|
case INPUT:
|
|
49
59
|
case TEXTAREA:
|
|
@@ -63,4 +73,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
63
73
|
}], propDecorators: { formControl: [{
|
|
64
74
|
type: Input
|
|
65
75
|
}] } });
|
|
66
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS12YWxpZGF0b3IuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL2RpcmVjdGl2ZXMvdGVtcGxhdGUtdmFsaWRhdGlvbnMvYmFzZS12YWxpZGF0b3IuZGlyZWN0aXZlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRWpELE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFHckYsT0FBTyxFQUFFLHdCQUF3QixFQUFFLE1BQU0sOEJBQThCLENBQUM7O0FBRXhFOzs7R0FHRztBQUVILE1BQU0sT0FBTyxhQUFjLFNBQVEsd0JBQXdCO0lBQ3ZEOztPQUVHO0lBRUksV0FBVyxDQUFpQztJQUVuRDs7T0FFRztJQUNPLFVBQVUsR0FBa0IsRUFBRSxDQUFDO0lBRXpDOztPQUVHO0lBQ08sT0FBTyxDQUFNO0lBRXZCOztPQUVHO0lBQ08sU0FBUyxDQUFVO0lBRTdCOztPQUVHO0lBQ08sWUFBWSxDQUFnQjtJQUV0Qzs7OztPQUlHO0lBQ0ksVUFBVSxDQUFDLE9BQXdCO1FBQ3RDLElBQUksTUFBTSxHQUFHLElBQUksQ0FBQztRQUVsQiwyRUFBMkU7UUFDM0UsS0FBSyxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFO1lBQ25DLE1BQU0sR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDNUIsSUFBSSxNQUFNLEVBQUU7Z0JBQ1IsTUFBTTthQUNUO1NBQ0o7UUFFRCx1RkFBdUY7UUFDdkYsSUFBSSxDQUFDLE1BQU0sSUFBSSxJQUFJLENBQUMsWUFBWSxFQUFFO1lBQzlCLE1BQU0sR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxDQUFDO1NBQ3pDO1FBRUQsT0FBTyxNQUFNLENBQUM7SUFDbEIsQ0FBQztJQUVEOzs7T0FHRztJQUNPLFlBQVk7UUFDbEIsSUFBSSxTQUFTLEdBQVcsRUFBRSxDQUFDO1FBRTNCLGdEQUFnRDtRQUNoRCxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxFQUFFO1lBQzFCLEtBQUssS0FBSyxDQUFDO1lBQ1gsS0FBSyxRQUFRO2dCQUNULFNBQVMsR0FBRyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxLQUFLLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO2dCQUN4SCxNQUFNO1lBRVYsS0FBSyxNQUFNO2dCQUNQLFNBQVMsR0FBRyxNQUFNLENBQUM7Z0JBQ25CLE1BQU07U0FDYjtRQUVELElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQzdDLENBQUM7MEhBdkVRLGFBQWE7OEdBQWIsYUFBYTs7MkZBQWIsYUFBYTtrQkFEekIsU0FBUzs4QkFNQyxXQUFXO3NCQURqQixLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBJbnB1dCB9IGZyb20gXCJAYW5ndWxhci9jb3JlXCI7XHJcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5pbXBvcnQgeyBDSEFOR0UsIENIRUNLQk9YLCBGSUxFLCBJTlBVVCwgUkFESU8sIFNFTEVDVCwgVEVYVEFSRUEgfSBmcm9tIFwiLi4vLi4vY29uc3RcIjtcclxuXHJcbmltcG9ydCB7IE1hc2tQcm92aWRlciB9IGZyb20gJy4uLy4uL2RvbWFpbi9lbGVtZW50LXByb2Nlc3Nvci9tYXNrLnByb3ZpZGVyJztcclxuaW1wb3J0IHsgQ29udHJvbEV4cHJlc3Npb25Qcm9jZXNzIH0gZnJvbSAnLi9jb250cm9sLWV4cHJlc3Npb24tcHJvY2Vzcyc7XHJcblxyXG4vKipcclxuICogQmFzZVZhbGlkYXRvciBpcyBhIGJhc2UgY2xhc3MgZm9yIGltcGxlbWVudGluZyBjdXN0b20gdmFsaWRhdG9ycyBpbiBBbmd1bGFyLlxyXG4gKiBJdCBleHRlbmRzIENvbnRyb2xFeHByZXNzaW9uUHJvY2VzcyB0byBoYW5kbGUgY29udHJvbCBleHByZXNzaW9ucy5cclxuICovXHJcbkBEaXJlY3RpdmUoKVxyXG5leHBvcnQgY2xhc3MgQmFzZVZhbGlkYXRvciBleHRlbmRzIENvbnRyb2xFeHByZXNzaW9uUHJvY2VzcyB7XHJcbiAgICAvKipcclxuICAgICAqIElucHV0IHByb3BlcnR5IGZvciB0aGUgZm9ybSBjb250cm9sIGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsaWRhdG9yLlxyXG4gICAgICovXHJcbiAgICBASW5wdXQoKVxyXG4gICAgcHVibGljIGZvcm1Db250cm9sPzogRm9ybUNvbnRyb2wgfCBBYnN0cmFjdENvbnRyb2w7XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBBcnJheSB0byBzdG9yZSB0aGUgdmFsaWRhdG9yIGZ1bmN0aW9ucy5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHZhbGlkYXRvcnM6IFZhbGlkYXRvckZuW10gPSBbXTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFJlZmVyZW5jZSB0byB0aGUgSFRNTCBlbGVtZW50IGFzc29jaWF0ZWQgd2l0aCB0aGUgdmFsaWRhdG9yLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgZWxlbWVudDogYW55O1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogTmFtZSBvZiB0aGUgZXZlbnQgdHJpZ2dlcmluZyB0aGUgdmFsaWRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGV2ZW50TmFtZT86IHN0cmluZztcclxuXHJcbiAgICAvKipcclxuICAgICAqIFByb3ZpZGVyIGZvciBoYW5kbGluZyBtYXNrcyBpbiB2YWxpZGF0aW9uLlxyXG4gICAgICovXHJcbiAgICBwcm90ZWN0ZWQgbWFza1Byb3ZpZGVyPzogTWFza1Byb3ZpZGVyO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogUGVyZm9ybXMgdmFsaWRhdGlvbiBvbiB0aGUgcHJvdmlkZWQgY29udHJvbCB1c2luZyB0aGUgZGVmaW5lZCB2YWxpZGF0b3JzIGFuZCBtYXNrIHByb3ZpZGVyLlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2wgVGhlIGFic3RyYWN0IGNvbnRyb2wgdG8gYmUgdmFsaWRhdGVkLlxyXG4gICAgICogQHJldHVybnMgQSB2YWxpZGF0aW9uIHJlc3VsdCwgb3IgbnVsbCBpZiB2YWxpZGF0aW9uIHBhc3Nlcy5cclxuICAgICAqL1xyXG4gICAgcHVibGljIHZhbGlkYXRpb24oY29udHJvbDogQWJzdHJhY3RDb250cm9sKTogeyBba2V5OiBzdHJpbmddOiBhbnkgfSB7XHJcbiAgICAgICAgbGV0IHJlc3VsdCA9IG51bGw7XHJcblxyXG4gICAgICAgIC8qIEl0ZXJhdGUgdGhyb3VnaCB2YWxpZGF0b3JzIGFuZCBicmVhayBvbiB0aGUgZmlyc3QgdmFsaWRhdGlvbiBmYWlsdXJlLiAqL1xyXG4gICAgICAgIGZvciAobGV0IHZhbGlkYXRvciBvZiB0aGlzLnZhbGlkYXRvcnMpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdmFsaWRhdG9yKGNvbnRyb2wpO1xyXG4gICAgICAgICAgICBpZiAocmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLyogSWYgbm8gdmFsaWRhdGlvbiBmYWlsdXJlIGFuZCBhIG1hc2sgcHJvdmlkZXIgaXMgZGVmaW5lZCwgdmFsaWRhdGUgdXNpbmcgdGhlIG1hc2suICovXHJcbiAgICAgICAgaWYgKCFyZXN1bHQgJiYgdGhpcy5tYXNrUHJvdmlkZXIpIHtcclxuICAgICAgICAgICAgcmVzdWx0ID0gdGhpcy5tYXNrUHJvdmlkZXIudmFsaWRhdGUoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiByZXN1bHQ7XHJcbiAgICB9XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBTZXRzIHRoZSBldmVudCBuYW1lIGJhc2VkIG9uIHRoZSB0eXBlIG9mIEhUTUwgZWxlbWVudCBhc3NvY2lhdGVkIHdpdGggdGhlIHZhbGlkYXRvci5cclxuICAgICAqIFRoaXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgdGhlIGV2ZW50IHRoYXQgdHJpZ2dlcnMgdmFsaWRhdGlvbi5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIHNldEV2ZW50TmFtZSgpIHtcclxuICAgICAgICB2YXIgZXZlbnROYW1lOiBzdHJpbmcgPSAnJztcclxuXHJcbiAgICAgICAgLyogRGV0ZXJtaW5lIGV2ZW50IGJhc2VkIG9uIEhUTUwgZWxlbWVudCB0eXBlICovXHJcbiAgICAgICAgc3dpdGNoICh0aGlzLmVsZW1lbnQudGFnTmFtZSkge1xyXG4gICAgICAgICAgICBjYXNlIElOUFVUOlxyXG4gICAgICAgICAgICBjYXNlIFRFWFRBUkVBOlxyXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gKHRoaXMuZWxlbWVudC50eXBlID09IENIRUNLQk9YIHx8IHRoaXMuZWxlbWVudC50eXBlID09IFJBRElPIHx8IHRoaXMuZWxlbWVudC50eXBlID09IEZJTEUpID8gQ0hBTkdFIDogSU5QVVQ7XHJcbiAgICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgU0VMRUNUOlxyXG4gICAgICAgICAgICAgICAgZXZlbnROYW1lID0gQ0hBTkdFO1xyXG4gICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICB0aGlzLmV2ZW50TmFtZSA9IGV2ZW50TmFtZS50b0xvd2VyQ2FzZSgpO1xyXG4gICAgfVxyXG59XHJcbiJdfQ==
|
package/esm2022/lib/form-validators/directives/template-validations/control-expression-process.mjs
CHANGED
|
@@ -5,19 +5,33 @@ import * as i0 from "@angular/core";
|
|
|
5
5
|
* Abstract class providing common functionality for processing control expressions in Angular directives.
|
|
6
6
|
*/
|
|
7
7
|
export class ControlExpressionProcess {
|
|
8
|
-
/**
|
|
8
|
+
/**
|
|
9
|
+
* Validator function for the control.
|
|
10
|
+
*/
|
|
9
11
|
validator;
|
|
10
|
-
/**
|
|
12
|
+
/**
|
|
13
|
+
* Conditional validator function for the control.
|
|
14
|
+
*/
|
|
11
15
|
conditionalValidator;
|
|
12
|
-
/**
|
|
16
|
+
/**
|
|
17
|
+
* Configuration for the control.
|
|
18
|
+
*/
|
|
13
19
|
controlConfig = {};
|
|
14
|
-
/**
|
|
20
|
+
/**
|
|
21
|
+
* Optional name for the control.
|
|
22
|
+
*/
|
|
15
23
|
name;
|
|
16
|
-
/**
|
|
24
|
+
/**
|
|
25
|
+
* Optional form control name.
|
|
26
|
+
*/
|
|
17
27
|
formControlName;
|
|
18
|
-
|
|
28
|
+
/*
|
|
29
|
+
* Flag indicating whether control processing has occurred.
|
|
30
|
+
*/
|
|
19
31
|
isProcessed = false;
|
|
20
|
-
/**
|
|
32
|
+
/**
|
|
33
|
+
* Collection of form controls associated with the directive.
|
|
34
|
+
*/
|
|
21
35
|
controls;
|
|
22
36
|
/**
|
|
23
37
|
* Sets the configuration for the control model.
|
|
@@ -43,4 +57,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImpor
|
|
|
43
57
|
}], formControlName: [{
|
|
44
58
|
type: Input
|
|
45
59
|
}] } });
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
60
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udHJvbC1leHByZXNzaW9uLXByb2Nlc3MuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jZGsvc3JjL2xpYi9mb3JtLXZhbGlkYXRvcnMvZGlyZWN0aXZlcy90ZW1wbGF0ZS12YWxpZGF0aW9ucy9jb250cm9sLWV4cHJlc3Npb24tcHJvY2Vzcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVqRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQzs7QUFFekQ7O0dBRUc7QUFFSCxNQUFNLE9BQWdCLHdCQUF3QjtJQUMxQzs7T0FFRztJQUNPLFNBQVMsQ0FBZTtJQUVsQzs7T0FFRztJQUNPLG9CQUFvQixDQUFlO0lBRTdDOztPQUVHO0lBQ08sYUFBYSxHQUF1QyxFQUFFLENBQUM7SUFFakU7O09BRUc7SUFFSSxJQUFJLENBQVU7SUFFckI7O09BRUc7SUFFSSxlQUFlLENBQVU7SUFFaEM7O09BRUc7SUFDSSxXQUFXLEdBQVksS0FBSyxDQUFDO0lBRXBDOztPQUVHO0lBQ08sUUFBUSxDQUFtQztJQUVyRDs7OztPQUlHO0lBQ0ksY0FBYyxDQUFDLE9BQXdCO1FBQzFDLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO1FBRXhCLHNFQUFzRTtRQUN0RSxJQUFJLElBQUksQ0FBQyxhQUFhLElBQUksSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLEVBQUU7WUFDekQsT0FBZSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxlQUFlLENBQUM7WUFFeEUsc0NBQXNDO1lBQ3RDLElBQUksQ0FBQyxhQUFhLEdBQUcsU0FBUyxDQUFDO1NBQ2xDO0lBQ0wsQ0FBQzswSEFyRGlCLHdCQUF3Qjs4R0FBeEIsd0JBQXdCOzsyRkFBeEIsd0JBQXdCO2tCQUQ3QyxTQUFTOzhCQXFCQyxJQUFJO3NCQURWLEtBQUs7Z0JBT0MsZUFBZTtzQkFEckIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSwgSW5wdXQgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiO1xyXG5pbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIEZvcm1Db250cm9sLCBWYWxpZGF0b3JGbiB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuaW1wb3J0IHsgVkFMSURBVE9SX0NPTkZJRyB9IGZyb20gXCIuLi8uLi9jb25zdC9hcHAuY29uc3RcIjtcclxuXHJcbi8qKlxyXG4gKiBBYnN0cmFjdCBjbGFzcyBwcm92aWRpbmcgY29tbW9uIGZ1bmN0aW9uYWxpdHkgZm9yIHByb2Nlc3NpbmcgY29udHJvbCBleHByZXNzaW9ucyBpbiBBbmd1bGFyIGRpcmVjdGl2ZXMuXHJcbiAqL1xyXG5ARGlyZWN0aXZlKClcclxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIENvbnRyb2xFeHByZXNzaW9uUHJvY2VzcyB7XHJcbiAgICAvKipcclxuICAgICAqIFZhbGlkYXRvciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCB2YWxpZGF0b3I/OiBWYWxpZGF0b3JGbjtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbmRpdGlvbmFsIHZhbGlkYXRvciBmdW5jdGlvbiBmb3IgdGhlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjb25kaXRpb25hbFZhbGlkYXRvcj86IFZhbGlkYXRvckZuO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogQ29uZmlndXJhdGlvbiBmb3IgdGhlIGNvbnRyb2wuXHJcbiAgICAgKi9cclxuICAgIHByb3RlY3RlZCBjb250cm9sQ29uZmlnOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgdW5kZWZpbmVkID0ge307XHJcblxyXG4gICAgLyoqXHJcbiAgICAgKiBPcHRpb25hbCBuYW1lIGZvciB0aGUgY29udHJvbC5cclxuICAgICAqL1xyXG4gICAgQElucHV0KClcclxuICAgIHB1YmxpYyBuYW1lPzogc3RyaW5nO1xyXG5cclxuICAgIC8qKlxyXG4gICAgICogT3B0aW9uYWwgZm9ybSBjb250cm9sIG5hbWUuXHJcbiAgICAgKi9cclxuICAgIEBJbnB1dCgpXHJcbiAgICBwdWJsaWMgZm9ybUNvbnRyb2xOYW1lPzogc3RyaW5nO1xyXG5cclxuICAgIC8qXHJcbiAgICAgKiBGbGFnIGluZGljYXRpbmcgd2hldGhlciBjb250cm9sIHByb2Nlc3NpbmcgaGFzIG9jY3VycmVkLlxyXG4gICAgICovXHJcbiAgICBwdWJsaWMgaXNQcm9jZXNzZWQ6IGJvb2xlYW4gPSBmYWxzZTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIENvbGxlY3Rpb24gb2YgZm9ybSBjb250cm9scyBhc3NvY2lhdGVkIHdpdGggdGhlIGRpcmVjdGl2ZS5cclxuICAgICAqL1xyXG4gICAgcHJvdGVjdGVkIGNvbnRyb2xzPzogeyBbbmFtZTogc3RyaW5nXTogRm9ybUNvbnRyb2wgfTtcclxuXHJcbiAgICAvKipcclxuICAgICAqIFNldHMgdGhlIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBjb250cm9sIG1vZGVsLlxyXG4gICAgICogTWFya3MgdGhlIHByb2Nlc3NpbmcgYXMgY29tcGxldGVkIGFuZCBhc3NpZ25zIHRoZSB2YWxpZGF0b3IgY29uZmlndXJhdGlvbiB0byB0aGUgY29udHJvbCBpZiBwcmVzZW50LlxyXG4gICAgICogQHBhcmFtIGNvbnRyb2wgVGhlIGFic3RyYWN0IGNvbnRyb2wgYXNzb2NpYXRlZCB3aXRoIHRoZSBkaXJlY3RpdmUuXHJcbiAgICAgKi9cclxuICAgIHB1YmxpYyBzZXRNb2RlbENvbmZpZyhjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpIHtcclxuICAgICAgICB0aGlzLmlzUHJvY2Vzc2VkID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgLyogSWYgdGhlcmUgaXMgYSB2YWxpZGF0b3IgY29uZmlndXJhdGlvbiwgYXNzaWduIGl0IHRvIHRoZSBjb250cm9sLiAqL1xyXG4gICAgICAgIGlmICh0aGlzLmNvbnRyb2xDb25maWcgJiYgdGhpcy5jb250cm9sQ29uZmlnLnZhbGlkYXRvckNvbmZpZykge1xyXG4gICAgICAgICAgICAoY29udHJvbCBhcyBhbnkpW1ZBTElEQVRPUl9DT05GSUddID0gdGhpcy5jb250cm9sQ29uZmlnLnZhbGlkYXRvckNvbmZpZztcclxuXHJcbiAgICAgICAgICAgIC8qIENsZWFyIHRoZSBjb250cm9sIGNvbmZpZ3VyYXRpb24uICovXHJcbiAgICAgICAgICAgIHRoaXMuY29udHJvbENvbmZpZyA9IHVuZGVmaW5lZDtcclxuICAgICAgICB9XHJcbiAgICB9XHJcbn1cclxuIl19
|