@messaia/cdk 12.3.5-rc21 → 13.0.0-rc02
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/esm2020/lib/base/base.module.mjs +64 -0
- package/esm2020/lib/base/components/base.component.mjs +436 -0
- package/esm2020/lib/base/components/generic-form.component.mjs +482 -0
- package/esm2020/lib/base/components/generic-list.component.mjs +461 -0
- package/{esm2015/lib/base/constants/common.js → esm2020/lib/base/constants/common.mjs} +0 -0
- package/{esm2015/lib/base/enums/message-type.js → esm2020/lib/base/enums/message-type.mjs} +0 -0
- package/{esm2015/lib/base/helpers/auth-helper.js → esm2020/lib/base/helpers/auth-helper.mjs} +0 -0
- package/esm2020/lib/base/interceptors/base.interceptor.mjs +138 -0
- package/esm2020/lib/base/interceptors/caching-interceptor.mjs +68 -0
- package/esm2020/lib/base/interceptors/loading.interceptor.mjs +63 -0
- package/{esm2015/lib/base/models/auth-user.js → esm2020/lib/base/models/auth-user.mjs} +0 -0
- package/{esm2015/lib/base/public_api.js → esm2020/lib/base/public_api.mjs} +0 -0
- package/esm2020/lib/base/services/file.service.mjs +18 -0
- package/esm2020/lib/base/services/loading-screen.service.mjs +47 -0
- package/esm2020/lib/base/services/print.service.mjs +40 -0
- package/esm2020/lib/chips/chips.module.mjs +63 -0
- package/esm2020/lib/chips/components/chips.component.mjs +419 -0
- package/esm2020/lib/chips/public_api.mjs +3 -0
- package/{esm2015/lib/common/animations/collapse/collapse.animation.js → esm2020/lib/common/animations/collapse/collapse.animation.mjs} +0 -0
- package/{esm2015/lib/common/animations/common/interfaces.js → esm2020/lib/common/animations/common/interfaces.mjs} +0 -0
- package/{esm2015/lib/common/behaviors/constructor.js → esm2020/lib/common/behaviors/constructor.mjs} +0 -0
- package/esm2020/lib/common/behaviors/control-value-accesor.mixin.mjs +39 -0
- package/{esm2015/lib/common/behaviors/disabled.mixin.js → esm2020/lib/common/behaviors/disabled.mixin.mjs} +0 -0
- package/esm2020/lib/common/common.module.mjs +118 -0
- package/{esm2015/lib/common/constants/constants.js → esm2020/lib/common/constants/constants.mjs} +0 -0
- package/esm2020/lib/common/directives/disable-control.directive.mjs +34 -0
- package/{esm2015/lib/common/enums/salutation.js → esm2020/lib/common/enums/salutation.mjs} +0 -0
- package/{esm2015/lib/common/functions/decorators.js → esm2020/lib/common/functions/decorators.mjs} +0 -0
- package/{esm2015/lib/common/functions/functions.js → esm2020/lib/common/functions/functions.mjs} +0 -0
- package/esm2020/lib/common/functions/utils.mjs +161 -0
- package/esm2020/lib/common/helpers/app-storage.mjs +53 -0
- package/esm2020/lib/common/helpers/dynamic-builder.mjs +49 -0
- package/esm2020/lib/common/models/app-setting.mjs +10 -0
- package/{esm2015/lib/common/models/audit-user.js → esm2020/lib/common/models/audit-user.mjs} +0 -0
- package/{esm2015/lib/common/models/entity.js → esm2020/lib/common/models/entity.mjs} +0 -0
- package/{esm2015/lib/common/models/enum-item.js → esm2020/lib/common/models/enum-item.mjs} +0 -0
- package/{esm2015/lib/common/models/key-value.js → esm2020/lib/common/models/key-value.mjs} +0 -0
- package/{esm2015/lib/common/models/save-action.js → esm2020/lib/common/models/save-action.mjs} +0 -0
- package/esm2020/lib/common/pipes/data-source.pipe.mjs +15 -0
- package/esm2020/lib/common/pipes/enum.pipe.mjs +23 -0
- package/esm2020/lib/common/pipes/file-size.pipe.mjs +37 -0
- package/esm2020/lib/common/pipes/filter.pipe.mjs +23 -0
- package/esm2020/lib/common/pipes/first-letter.mjs +24 -0
- package/esm2020/lib/common/pipes/keys.mjs +18 -0
- package/esm2020/lib/common/pipes/month-name.pipe.mjs +27 -0
- package/esm2020/lib/common/pipes/only-number.mjs +53 -0
- package/esm2020/lib/common/pipes/order.pipe.mjs +183 -0
- package/esm2020/lib/common/pipes/placeholder.pipe.mjs +26 -0
- package/esm2020/lib/common/pipes/safe-html.pipe.mjs +31 -0
- package/esm2020/lib/common/pipes/time.pipe.mjs +20 -0
- package/esm2020/lib/common/pipes/titlecase.pipe.mjs +14 -0
- package/esm2020/lib/common/pipes/truncate.pipe.mjs +15 -0
- package/esm2020/lib/common/pipes/values.mjs +14 -0
- package/esm2020/lib/common/public_api.mjs +18 -0
- package/esm2020/lib/common/services/base.service.mjs +19 -0
- package/{esm2015/lib/common/services/context-helper.js → esm2020/lib/common/services/context-helper.mjs} +0 -0
- package/esm2020/lib/common/services/enum.service.mjs +44 -0
- package/{esm2015/lib/common/services/service-locator.js → esm2020/lib/common/services/service-locator.mjs} +0 -0
- package/esm2020/lib/dialogs/alert-dialog/alert-dialog.component.mjs +31 -0
- package/esm2020/lib/dialogs/confirm-dialog/confirm-dialog.component.mjs +37 -0
- package/esm2020/lib/dialogs/dialog.component.mjs +56 -0
- package/esm2020/lib/dialogs/dialogs.module.mjs +82 -0
- package/esm2020/lib/dialogs/prompt-dialog/prompt-dialog.component.mjs +40 -0
- package/{esm2015/lib/dialogs/public_api.js → esm2020/lib/dialogs/public_api.mjs} +0 -0
- package/esm2020/lib/dialogs/services/dialog.service.mjs +136 -0
- package/esm2020/lib/file/file-input.component.mjs +327 -0
- package/esm2020/lib/file/file.module.mjs +39 -0
- package/{esm2015/lib/file/public_api.js → esm2020/lib/file/public_api.mjs} +0 -0
- package/esm2020/lib/form-validators/abstract/typed-form.mjs +3 -0
- package/esm2020/lib/form-validators/algorithm/luhn-algorithm.mjs +15 -0
- package/esm2020/lib/form-validators/const/app-validators.const.mjs +68 -0
- package/esm2020/lib/form-validators/const/app.const.mjs +17 -0
- package/esm2020/lib/form-validators/const/config-names.const.mjs +9 -0
- package/esm2020/lib/form-validators/const/config-required-fields.const.mjs +11 -0
- package/esm2020/lib/form-validators/const/decorators.const.mjs +23 -0
- package/esm2020/lib/form-validators/const/events.const.mjs +14 -0
- package/esm2020/lib/form-validators/const/html-elements.const.mjs +7 -0
- package/esm2020/lib/form-validators/const/iban-country-wise-regex.const.mjs +80 -0
- package/esm2020/lib/form-validators/const/index.mjs +6 -0
- package/esm2020/lib/form-validators/const/operators.const.mjs +7 -0
- package/esm2020/lib/form-validators/const/validation-alphabet-locale.const.mjs +9 -0
- package/esm2020/lib/form-validators/const/validator.const.mjs +8 -0
- package/esm2020/lib/form-validators/core/defaultContainer.mjs +243 -0
- package/esm2020/lib/form-validators/core/validator.interface.mjs +2 -0
- package/esm2020/lib/form-validators/core/validator.static.mjs +74 -0
- package/esm2020/lib/form-validators/decorators/allOf.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/alpha.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/alphaNumeric.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/and.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/ascii.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/async.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/base-decorator.function.mjs +7 -0
- package/esm2020/lib/form-validators/decorators/choice.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/compare.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/compose.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/contains.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/credit-card.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/cusip.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/custom.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/dataUri.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/date.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/different.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/digit.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/email.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/endsWith.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/even.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/extension.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/factor.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/file.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/fileSize.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/greater-than-equal-to.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/greater-than.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/grid.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/hexColor.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/image.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/index.mjs +91 -0
- package/esm2020/lib/form-validators/decorators/json.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/latLong.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/latitude.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/leapYear.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/less-than-equal-to.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/less-than.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/longitude.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/lowercase.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/mac.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/mask.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/maxDate.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/maxLength.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/maxNumber.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/maxTime.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/minDate.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/minLength.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/minNumber.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/minTime.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/model.decorator.mjs +7 -0
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/disable.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/non-validation-decorators/error.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/noneOf.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/not.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/notEmpty.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/numeric.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/odd.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/oneOf.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/or.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/password.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/pattern.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/port.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/primeNumber.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/prop-array.decorator.mjs +18 -0
- package/esm2020/lib/form-validators/decorators/prop-object.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/prop.decorator.mjs +16 -0
- package/esm2020/lib/form-validators/decorators/range.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/required.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/requiredTrue.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/rule.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/sanitize/blacklist.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/escape.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/ltrim.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/prefix.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/rtrim.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/sanitize.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/stripLow.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/suffix.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toBoolean.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toDate.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toDouble.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toFloat.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toInt.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/toString.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/trim.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/sanitize/whitelist.decorator.mjs +8 -0
- package/esm2020/lib/form-validators/decorators/startsWith.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/time.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/decorators/unique.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/uppercase.decorator.mjs +6 -0
- package/esm2020/lib/form-validators/decorators/url.decorator.mjs +10 -0
- package/esm2020/lib/form-validators/directives/base-directive.mjs +43 -0
- package/esm2020/lib/form-validators/directives/control-host.directive.mjs +34 -0
- package/esm2020/lib/form-validators/directives/html-control-template.directive.mjs +20 -0
- package/esm2020/lib/form-validators/directives/rx-form.directive.mjs +134 -0
- package/esm2020/lib/form-validators/directives/template-validations/async-validation.directive.mjs +31 -0
- package/esm2020/lib/form-validators/directives/template-validations/base-validator.directive.mjs +42 -0
- package/esm2020/lib/form-validators/directives/template-validations/control-expression-process.mjs +26 -0
- package/esm2020/lib/form-validators/directives/template-validations/file-control.directive.mjs +91 -0
- package/esm2020/lib/form-validators/directives/template-validations/image-file-control.directive.mjs +50 -0
- package/esm2020/lib/form-validators/directives/template-validations/rxformcontrol.directive.mjs +277 -0
- package/esm2020/lib/form-validators/domain/disable-provider.mjs +93 -0
- package/esm2020/lib/form-validators/domain/element-processor/decimal.provider.mjs +59 -0
- package/esm2020/lib/form-validators/domain/element-processor/mask.provider.mjs +430 -0
- package/esm2020/lib/form-validators/domain/form-data.mjs +47 -0
- package/esm2020/lib/form-validators/enums/error-message-binding-strategy.mjs +11 -0
- package/esm2020/lib/form-validators/enums/index.mjs +5 -0
- package/esm2020/lib/form-validators/enums/ip-version.mjs +7 -0
- package/esm2020/lib/form-validators/enums/numeric-value-type.mjs +7 -0
- package/esm2020/lib/form-validators/enums/reset-type.mjs +10 -0
- package/esm2020/lib/form-validators/enums/url-validation-type.mjs +7 -0
- package/esm2020/lib/form-validators/models/config/alpha-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/array-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/base-config-fn.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/base-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/base-date-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/choice-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/compare-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/component-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/compose-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/contains-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/credit-card-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/custom-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/date-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/default-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/digit-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/disable-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/element-class-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/email-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/error-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/extension-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/factor-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/field-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/file-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/hex-color-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/iban-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/image-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/index.mjs +35 -0
- package/esm2020/lib/form-validators/models/config/ip-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/logical-operator-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/mask-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/max-date-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/message-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/min-date-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/model-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/number-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/numeric-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/password-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/pattern-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/prop-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/props-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/range-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/relational-operator-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/required-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/rule-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/sanitize-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/size-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/string-comparison-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/time-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/todate-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/unique-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/config/url-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/form-builder-configuration.mjs +8 -0
- package/esm2020/lib/form-validators/models/index.mjs +3 -0
- package/esm2020/lib/form-validators/models/interface/array-prop-instance-config.interface.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/auto-instance-config.interface.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/form-data-config.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/i-abstract-control.mjs +4 -0
- package/esm2020/lib/form-validators/models/interface/i-form-group.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/instance-argument.interface.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/object-prop-instance-config.interface.mjs +2 -0
- package/esm2020/lib/form-validators/models/interface/options.mjs +2 -0
- package/esm2020/lib/form-validators/models/password-validation.model.mjs +2 -0
- package/esm2020/lib/form-validators/models/prop-validation-config.mjs +2 -0
- package/esm2020/lib/form-validators/public_api.mjs +25 -0
- package/esm2020/lib/form-validators/reactive-form-validators/allOf.validator.mjs +22 -0
- package/esm2020/lib/form-validators/reactive-form-validators/alpha.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/alphaNumeric.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/and.validator.mjs +23 -0
- package/esm2020/lib/form-validators/reactive-form-validators/ascii.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/async/base.async.validator.mjs +24 -0
- package/esm2020/lib/form-validators/reactive-form-validators/choice.validator.mjs +19 -0
- package/esm2020/lib/form-validators/reactive-form-validators/compare.validator.mjs +20 -0
- package/esm2020/lib/form-validators/reactive-form-validators/compose.validator.mjs +23 -0
- package/esm2020/lib/form-validators/reactive-form-validators/conditional-change.validator.mjs +63 -0
- package/esm2020/lib/form-validators/reactive-form-validators/contains.validator.mjs +15 -0
- package/esm2020/lib/form-validators/reactive-form-validators/credit-card.validator.mjs +48 -0
- package/esm2020/lib/form-validators/reactive-form-validators/cusip.validator.mjs +38 -0
- package/esm2020/lib/form-validators/reactive-form-validators/custom.validator.mjs +23 -0
- package/esm2020/lib/form-validators/reactive-form-validators/dataUri.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/date.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/different.validator.mjs +19 -0
- package/esm2020/lib/form-validators/reactive-form-validators/digit.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/email.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/endsWith.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/even.validator.mjs +15 -0
- package/esm2020/lib/form-validators/reactive-form-validators/extension.validator.mjs +40 -0
- package/esm2020/lib/form-validators/reactive-form-validators/factor.validator.mjs +37 -0
- package/esm2020/lib/form-validators/reactive-form-validators/file.validator.mjs +26 -0
- package/esm2020/lib/form-validators/reactive-form-validators/fileSize.validator.mjs +32 -0
- package/esm2020/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/greater-than.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/grid.validator.mjs +31 -0
- package/esm2020/lib/form-validators/reactive-form-validators/hexcolor.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/iban.validator.mjs +30 -0
- package/esm2020/lib/form-validators/reactive-form-validators/image.validator.mjs +48 -0
- package/esm2020/lib/form-validators/reactive-form-validators/index.mjs +66 -0
- package/esm2020/lib/form-validators/reactive-form-validators/ip.validator.mjs +35 -0
- package/esm2020/lib/form-validators/reactive-form-validators/json.validator.mjs +26 -0
- package/esm2020/lib/form-validators/reactive-form-validators/latLong.validator.mjs +18 -0
- package/esm2020/lib/form-validators/reactive-form-validators/latitude.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/leapYear.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/less-than.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/longitude.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/lowercase.validator.mjs +15 -0
- package/esm2020/lib/form-validators/reactive-form-validators/mac.validator.mjs +9 -0
- package/esm2020/lib/form-validators/reactive-form-validators/mask.validator.mjs +13 -0
- package/esm2020/lib/form-validators/reactive-form-validators/maxDate.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/maxLength.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/maxNumber.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/maxTime.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/minDate.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/minLength.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/minNumber.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/minTime.validator.mjs +8 -0
- package/esm2020/lib/form-validators/reactive-form-validators/noneOf.validator.mjs +24 -0
- package/esm2020/lib/form-validators/reactive-form-validators/not.validator.mjs +23 -0
- package/esm2020/lib/form-validators/reactive-form-validators/notEmpty.validator.mjs +17 -0
- package/esm2020/lib/form-validators/reactive-form-validators/numeric.validator.mjs +20 -0
- package/esm2020/lib/form-validators/reactive-form-validators/odd.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/oneOf.validator.mjs +22 -0
- package/esm2020/lib/form-validators/reactive-form-validators/or.validator.mjs +23 -0
- package/esm2020/lib/form-validators/reactive-form-validators/password.validator.mjs +33 -0
- package/esm2020/lib/form-validators/reactive-form-validators/pattern.validator.mjs +17 -0
- package/esm2020/lib/form-validators/reactive-form-validators/port.validator.mjs +18 -0
- package/esm2020/lib/form-validators/reactive-form-validators/primeNumber.validator.mjs +26 -0
- package/esm2020/lib/form-validators/reactive-form-validators/range.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/required.validator.mjs +17 -0
- package/esm2020/lib/form-validators/reactive-form-validators/requiredTrue.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/rule.validator.mjs +20 -0
- package/esm2020/lib/form-validators/reactive-form-validators/startsWith.validator.mjs +16 -0
- package/esm2020/lib/form-validators/reactive-form-validators/time.validator.mjs +18 -0
- package/esm2020/lib/form-validators/reactive-form-validators/unique.validator.mjs +70 -0
- package/esm2020/lib/form-validators/reactive-form-validators/uppercase.validator.mjs +15 -0
- package/esm2020/lib/form-validators/reactive-form-validators/url.validator.mjs +28 -0
- package/esm2020/lib/form-validators/services/base-form-builder.mjs +115 -0
- package/esm2020/lib/form-validators/services/entity.service.mjs +64 -0
- package/esm2020/lib/form-validators/services/form-control.mjs +349 -0
- package/esm2020/lib/form-validators/services/form-group.mjs +2 -0
- package/esm2020/lib/form-validators/services/reactive-form.module.mjs +52 -0
- package/esm2020/lib/form-validators/services/rx-form-array.mjs +100 -0
- package/esm2020/lib/form-validators/services/rx-form-builder.mjs +559 -0
- package/esm2020/lib/form-validators/services/rx-form-group.mjs +299 -0
- package/esm2020/lib/form-validators/services/typed-form-builder.mjs +23 -0
- package/esm2020/lib/form-validators/util/alphabet-regex.locale.mjs +29 -0
- package/esm2020/lib/form-validators/util/app-util.mjs +141 -0
- package/esm2020/lib/form-validators/util/check-length.mjs +10 -0
- package/esm2020/lib/form-validators/util/config-provider.mjs +35 -0
- package/esm2020/lib/form-validators/util/date-checker.function.mjs +52 -0
- package/esm2020/lib/form-validators/util/date-provider.mjs +97 -0
- package/esm2020/lib/form-validators/util/form-const.mjs +3 -0
- package/esm2020/lib/form-validators/util/form-provider.mjs +37 -0
- package/esm2020/lib/form-validators/util/index.mjs +7 -0
- package/esm2020/lib/form-validators/util/instance-provider.function.mjs +30 -0
- package/esm2020/lib/form-validators/util/ip-checker.mjs +18 -0
- package/esm2020/lib/form-validators/util/linq.mjs +147 -0
- package/esm2020/lib/form-validators/util/object-maker.mjs +38 -0
- package/esm2020/lib/form-validators/util/reactive-form-config.mjs +23 -0
- package/esm2020/lib/form-validators/util/regex-rules.mjs +37 -0
- package/esm2020/lib/form-validators/util/regex-validator.mjs +74 -0
- package/esm2020/lib/form-validators/util/relational-checker.function.mjs +85 -0
- package/esm2020/lib/form-validators/util/reset-form.mjs +56 -0
- package/esm2020/lib/form-validators/util/sanitizers.mjs +131 -0
- package/esm2020/lib/form-validators/util/time-checker.function.mjs +48 -0
- package/esm2020/lib/form-validators/util/type.mjs +2 -0
- package/esm2020/lib/form-validators/util/validator-value-checker.mjs +17 -0
- package/esm2020/lib/form-validators/validators-extension/allOf-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/alpha-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/alphaNumeric-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/and-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/ascii-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/base-validator.function.mjs +33 -0
- package/esm2020/lib/form-validators/validators-extension/choice-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/compare-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/compose-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/contains-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/credit-card-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/cusip-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/custom-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/dataUri-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/date-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/different-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/digit-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/email-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/endsWith-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/even-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/extension-validator.extension.mjs +10 -0
- package/esm2020/lib/form-validators/validators-extension/factor-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/file-validator.extension.mjs +10 -0
- package/esm2020/lib/form-validators/validators-extension/fileSize-validator.extension.mjs +10 -0
- package/esm2020/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/greater-than-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/grid-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/hexcolor-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/iban-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/image-validator.extension.mjs +10 -0
- package/esm2020/lib/form-validators/validators-extension/index.mjs +68 -0
- package/esm2020/lib/form-validators/validators-extension/ip-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/json-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/latLong-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/latitude-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/leapYear-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/less-than-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/longitude-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/lowercase-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/mac-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/mask-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/maxDate-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/maxLength-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/maxNumber-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/maxTime-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/minDate-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/minLength-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/minNumber-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/minTime-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/noneOf-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/not-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/notEmpty-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/numeric-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/odd-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/oneOf-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/or-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/password-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/pattern-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/port-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/primeNumber-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/range-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/required-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/requiredTrue-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/rxweb-validators.mjs +108 -0
- package/esm2020/lib/form-validators/validators-extension/startsWith-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/time-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-extension/unique-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/uppercase-validator.extension.mjs +7 -0
- package/esm2020/lib/form-validators/validators-extension/url-validator.extension.mjs +11 -0
- package/esm2020/lib/form-validators/validators-function/alpha-validation.function.mjs +37 -0
- package/esm2020/lib/form-validators/validators-function/regex-validation.function.mjs +16 -0
- package/esm2020/lib/forms/components/generic-form/generic-form.component.mjs +131 -0
- package/{esm2015/lib/forms/constants/constants.js → esm2020/lib/forms/constants/constants.mjs} +0 -0
- package/esm2020/lib/forms/directives/mat-form-field-readonly.directive.mjs +33 -0
- package/{esm2015/lib/forms/enums/form-field-type.js → esm2020/lib/forms/enums/form-field-type.mjs} +0 -0
- package/esm2020/lib/forms/forms.module.mjs +122 -0
- package/esm2020/lib/forms/functions/decorators.mjs +127 -0
- package/{esm2015/lib/forms/functions/functions.js → esm2020/lib/forms/functions/functions.mjs} +0 -0
- package/esm2020/lib/forms/helpers/abstract-mat-form-field.mjs +251 -0
- package/esm2020/lib/forms/helpers/value-accessor-base.mjs +141 -0
- package/{esm2015/lib/forms/models/form-field-definition.js → esm2020/lib/forms/models/form-field-definition.mjs} +0 -0
- package/{esm2015/lib/forms/models/form-field-group.js → esm2020/lib/forms/models/form-field-group.mjs} +0 -0
- package/esm2020/lib/forms/public_api.mjs +4 -0
- package/esm2020/lib/forms/validators/equal-validator.directive.mjs +79 -0
- package/esm2020/lib/forms/validators/native-element-injector.directive.mjs +32 -0
- package/esm2020/lib/forms/validators/unique-validator-directive.mjs +75 -0
- package/esm2020/lib/http/http.module.mjs +20 -0
- package/{esm2015/lib/http/public_api.js → esm2020/lib/http/public_api.mjs} +0 -0
- package/{esm2015/lib/http/services/generic.service.js → esm2020/lib/http/services/generic.service.mjs} +0 -0
- package/esm2020/lib/layout/layout-card-over/layout-card-over.component.mjs +43 -0
- package/esm2020/lib/layout/layout-footer/layout-footer.component.mjs +34 -0
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.component.mjs +128 -0
- package/esm2020/lib/layout/layout-manage-list/layout-manage-list.directives.mjs +81 -0
- package/esm2020/lib/layout/layout-nav/layout-nav.component.mjs +62 -0
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.component.mjs +123 -0
- package/esm2020/lib/layout/layout-nav-list/layout-nav-list.directives.mjs +81 -0
- package/esm2020/lib/layout/layout-toggle.class.mjs +71 -0
- package/esm2020/lib/layout/layout.component.mjs +82 -0
- package/esm2020/lib/layout/layout.directives.mjs +81 -0
- package/esm2020/lib/layout/layout.module.mjs +118 -0
- package/esm2020/lib/layout/navigation-drawer/navigation-drawer.component.mjs +167 -0
- package/{esm2015/lib/layout/public_api.js → esm2020/lib/layout/public_api.mjs} +0 -0
- package/esm2020/lib/media/directives/media-toggle.directive.mjs +115 -0
- package/esm2020/lib/media/media.module.mjs +37 -0
- package/{esm2015/lib/media/public_api.js → esm2020/lib/media/public_api.mjs} +0 -0
- package/esm2020/lib/media/services/media.service.mjs +108 -0
- package/esm2020/lib/menu/components/menu.component.mjs +52 -0
- package/{esm2015/lib/menu/enums/menu-scope.js → esm2020/lib/menu/enums/menu-scope.mjs} +0 -0
- package/esm2020/lib/menu/menu.module.mjs +50 -0
- package/{esm2015/lib/menu/models/menu-item.js → esm2020/lib/menu/models/menu-item.mjs} +0 -0
- package/{esm2015/lib/menu/models/menu.js → esm2020/lib/menu/models/menu.mjs} +0 -0
- package/{esm2015/lib/menu/public_api.js → esm2020/lib/menu/public_api.mjs} +0 -0
- package/esm2020/lib/menu/services/menu-items.service.mjs +19 -0
- package/esm2020/lib/menu/services/menu.resolve.mjs +55 -0
- package/esm2020/lib/menu/services/menu.service.mjs +19 -0
- package/{esm2015/lib/search/public_api.js → esm2020/lib/search/public_api.mjs} +0 -0
- package/esm2020/lib/search/search.module.mjs +47 -0
- package/esm2020/lib/search/vd-search-box/vd-search-box.component.mjs +143 -0
- package/esm2020/lib/search/vd-search-input/vd-search-input.component.mjs +148 -0
- package/esm2020/lib/select/public_api.mjs +3 -0
- package/esm2020/lib/select/select.component.mjs +407 -0
- package/esm2020/lib/select/select.module.mjs +45 -0
- package/esm2020/lib/table/components/dynamic-table/dynamic-table.component.mjs +301 -0
- package/esm2020/lib/table/components/filter-clear.component.mjs +44 -0
- package/esm2020/lib/table/components/filter-date.component.mjs +151 -0
- package/esm2020/lib/table/components/filter-input.component.mjs +198 -0
- package/esm2020/lib/table/components/filter-select.component.mjs +334 -0
- package/esm2020/lib/table/directives/data-source-filter.directive.mjs +45 -0
- package/{esm2015/lib/table/enums/table-column-type.js → esm2020/lib/table/enums/table-column-type.mjs} +0 -0
- package/esm2020/lib/table/functions/decorators.mjs +135 -0
- package/esm2020/lib/table/functions/functions.mjs +15 -0
- package/{esm2015/lib/table/models/pagination.js → esm2020/lib/table/models/pagination.mjs} +0 -0
- package/{esm2015/lib/table/models/table-column.js → esm2020/lib/table/models/table-column.mjs} +0 -0
- package/{esm2015/lib/table/models/table-definition.js → esm2020/lib/table/models/table-definition.mjs} +0 -0
- package/{esm2015/lib/table/models/table-menu-item.js → esm2020/lib/table/models/table-menu-item.mjs} +0 -0
- package/esm2020/lib/table/paginator-intl.mjs +44 -0
- package/esm2020/lib/table/public_api.mjs +3 -0
- package/esm2020/lib/table/table.data-source.mjs +210 -0
- package/esm2020/lib/table/table.module.mjs +140 -0
- package/esm2020/lib/table/table.static-data-source.mjs +133 -0
- package/esm2020/messaia-cdk.mjs +5 -0
- package/{esm2015/public_api.js → esm2020/public_api.mjs} +0 -0
- package/fesm2015/messaia-cdk.mjs +15946 -0
- package/fesm2015/messaia-cdk.mjs.map +1 -0
- package/fesm2020/messaia-cdk.mjs +15868 -0
- package/fesm2020/messaia-cdk.mjs.map +1 -0
- package/lib/base/base.module.d.ts +7 -0
- package/lib/base/components/base.component.d.ts +8 -0
- package/lib/base/components/generic-form.component.d.ts +3 -0
- package/lib/base/components/generic-list.component.d.ts +3 -0
- package/lib/base/interceptors/base.interceptor.d.ts +3 -0
- package/lib/base/interceptors/caching-interceptor.d.ts +3 -0
- package/lib/base/interceptors/loading.interceptor.d.ts +3 -0
- package/lib/base/services/file.service.d.ts +3 -0
- package/lib/base/services/loading-screen.service.d.ts +3 -0
- package/lib/base/services/print.service.d.ts +3 -0
- package/lib/chips/chips.module.d.ts +13 -2
- package/lib/chips/components/chips.component.d.ts +7 -0
- package/lib/chips/public_api.d.ts +1 -0
- package/lib/common/common.module.d.ts +20 -0
- package/lib/common/directives/disable-control.directive.d.ts +3 -0
- package/lib/common/functions/utils.d.ts +3 -0
- package/lib/common/helpers/app-storage.d.ts +3 -0
- package/lib/common/helpers/dynamic-builder.d.ts +3 -0
- package/lib/common/models/app-setting.d.ts +3 -0
- package/lib/common/pipes/data-source.pipe.d.ts +3 -0
- package/lib/common/pipes/enum.pipe.d.ts +3 -0
- package/lib/common/pipes/file-size.pipe.d.ts +3 -0
- package/lib/common/pipes/filter.pipe.d.ts +3 -0
- package/lib/common/pipes/first-letter.d.ts +3 -0
- package/lib/common/pipes/keys.d.ts +3 -0
- package/lib/common/pipes/month-name.pipe.d.ts +3 -0
- package/lib/common/pipes/only-number.d.ts +3 -0
- package/lib/common/pipes/order.pipe.d.ts +4 -1
- package/lib/common/pipes/placeholder.pipe.d.ts +3 -0
- package/lib/common/pipes/safe-html.pipe.d.ts +3 -0
- package/lib/common/pipes/time.pipe.d.ts +3 -0
- package/lib/common/pipes/titlecase.pipe.d.ts +3 -0
- package/lib/common/pipes/truncate.pipe.d.ts +3 -0
- package/lib/common/pipes/values.d.ts +3 -0
- package/lib/common/public_api.d.ts +16 -0
- package/lib/common/services/base.service.d.ts +3 -0
- package/lib/common/services/enum.service.d.ts +3 -0
- package/lib/common/styles/platform.scss +1 -1
- package/lib/common/theming/_all-theme.scss +1 -1
- package/lib/dialogs/alert-dialog/alert-dialog.component.d.ts +3 -0
- package/lib/dialogs/confirm-dialog/confirm-dialog.component.d.ts +3 -0
- package/lib/dialogs/dialog.component.d.ts +9 -0
- package/lib/dialogs/dialogs.module.d.ts +13 -0
- package/lib/dialogs/prompt-dialog/prompt-dialog.component.d.ts +3 -0
- package/lib/dialogs/services/dialog.service.d.ts +3 -0
- package/lib/file/file-input.component.d.ts +3 -0
- package/lib/file/file.module.d.ts +10 -0
- package/lib/form-validators/directives/base-directive.d.ts +3 -0
- package/lib/form-validators/directives/control-host.directive.d.ts +3 -0
- package/lib/form-validators/directives/html-control-template.directive.d.ts +3 -0
- package/lib/form-validators/directives/rx-form.directive.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/async-validation.directive.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/base-validator.directive.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/control-expression-process.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/file-control.directive.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/image-file-control.directive.d.ts +3 -0
- package/lib/form-validators/directives/template-validations/rxformcontrol.directive.d.ts +3 -0
- package/lib/form-validators/domain/element-processor/decimal.provider.d.ts +3 -0
- package/lib/form-validators/services/reactive-form.module.d.ts +16 -0
- package/lib/form-validators/services/rx-form-builder.d.ts +3 -0
- package/lib/form-validators/services/typed-form-builder.d.ts +3 -0
- package/lib/forms/components/generic-form/generic-form.component.d.ts +11 -0
- package/lib/forms/directives/mat-form-field-readonly.directive.d.ts +3 -0
- package/lib/forms/forms.module.d.ts +23 -0
- package/lib/forms/helpers/abstract-mat-form-field.d.ts +4 -1
- package/lib/forms/helpers/value-accessor-base.d.ts +3 -0
- package/lib/forms/public_api.d.ts +2 -0
- package/lib/forms/validators/equal-validator.directive.d.ts +3 -0
- package/lib/forms/validators/native-element-injector.directive.d.ts +3 -0
- package/lib/forms/validators/unique-validator-directive.d.ts +3 -0
- package/lib/http/http.module.d.ts +5 -0
- package/lib/layout/layout-card-over/layout-card-over.component.d.ts +3 -0
- package/lib/layout/layout-footer/layout-footer.component.d.ts +3 -0
- package/lib/layout/layout-manage-list/layout-manage-list.component.d.ts +3 -0
- package/lib/layout/layout-manage-list/layout-manage-list.directives.d.ts +7 -0
- package/lib/layout/layout-nav/layout-nav.component.d.ts +3 -0
- package/lib/layout/layout-nav-list/layout-nav-list.component.d.ts +3 -0
- package/lib/layout/layout-nav-list/layout-nav-list.directives.d.ts +7 -0
- package/lib/layout/layout-toggle.class.d.ts +3 -0
- package/lib/layout/layout.component.d.ts +3 -0
- package/lib/layout/layout.directives.d.ts +7 -0
- package/lib/layout/layout.module.d.ts +22 -0
- package/lib/layout/navigation-drawer/navigation-drawer.component.d.ts +7 -0
- package/lib/media/directives/media-toggle.directive.d.ts +3 -0
- package/lib/media/media.module.d.ts +6 -0
- package/lib/media/services/media.service.d.ts +3 -0
- package/lib/menu/components/menu.component.d.ts +3 -0
- package/lib/menu/menu.module.d.ts +9 -0
- package/lib/menu/services/menu-items.service.d.ts +3 -0
- package/lib/menu/services/menu.resolve.d.ts +5 -0
- package/lib/menu/services/menu.service.d.ts +3 -0
- package/lib/search/search.module.d.ts +11 -0
- package/lib/search/vd-search-box/vd-search-box.component.d.ts +3 -0
- package/lib/search/vd-search-input/vd-search-input.component.d.ts +3 -0
- package/lib/select/public_api.d.ts +1 -0
- package/lib/select/select.component.d.ts +5 -0
- package/lib/select/select.module.d.ts +10 -0
- package/lib/table/components/dynamic-table/dynamic-table.component.d.ts +3 -0
- package/lib/table/components/filter-clear.component.d.ts +3 -0
- package/lib/table/components/filter-date.component.d.ts +3 -0
- package/lib/table/components/filter-input.component.d.ts +3 -0
- package/lib/table/components/filter-select.component.d.ts +5 -0
- package/lib/table/directives/data-source-filter.directive.d.ts +3 -0
- package/lib/table/paginator-intl.d.ts +3 -0
- package/lib/table/public_api.d.ts +1 -0
- package/lib/table/table.module.d.ts +28 -0
- package/messaia-cdk.d.ts +1 -25
- package/package.json +20 -8
- package/src/lib/common/styles/font/README.md +9 -0
- package/src/lib/layout/README.md +119 -0
- package/src/lib/layout/layout-card-over/README.md +36 -0
- package/src/lib/layout/layout-manage-list/README.md +76 -0
- package/src/lib/layout/layout-nav/README.md +40 -0
- package/src/lib/layout/layout-nav-list/README.md +85 -0
- package/bundles/messaia-cdk.umd.js +0 -17755
- package/bundles/messaia-cdk.umd.js.map +0 -1
- package/esm2015/lib/base/base.module.js +0 -47
- package/esm2015/lib/base/components/base.component.js +0 -441
- package/esm2015/lib/base/components/generic-form.component.js +0 -492
- package/esm2015/lib/base/components/generic-list.component.js +0 -469
- package/esm2015/lib/base/interceptors/base.interceptor.js +0 -148
- package/esm2015/lib/base/interceptors/caching-interceptor.js +0 -75
- package/esm2015/lib/base/interceptors/loading.interceptor.js +0 -70
- package/esm2015/lib/base/services/file.service.js +0 -25
- package/esm2015/lib/base/services/loading-screen.service.js +0 -46
- package/esm2015/lib/base/services/print.service.js +0 -49
- package/esm2015/lib/chips/chips.module.js +0 -44
- package/esm2015/lib/chips/components/chips.component.js +0 -420
- package/esm2015/lib/chips/public_api.js +0 -2
- package/esm2015/lib/common/behaviors/control-value-accesor.mixin.js +0 -41
- package/esm2015/lib/common/common.module.js +0 -86
- package/esm2015/lib/common/directives/disable-control.directive.js +0 -43
- package/esm2015/lib/common/functions/utils.js +0 -160
- package/esm2015/lib/common/helpers/app-storage.js +0 -51
- package/esm2015/lib/common/helpers/dynamic-builder.js +0 -58
- package/esm2015/lib/common/models/app-setting.js +0 -8
- package/esm2015/lib/common/pipes/data-source.pipe.js +0 -12
- package/esm2015/lib/common/pipes/enum.pipe.js +0 -20
- package/esm2015/lib/common/pipes/file-size.pipe.js +0 -34
- package/esm2015/lib/common/pipes/filter.pipe.js +0 -20
- package/esm2015/lib/common/pipes/first-letter.js +0 -21
- package/esm2015/lib/common/pipes/keys.js +0 -15
- package/esm2015/lib/common/pipes/month-name.pipe.js +0 -24
- package/esm2015/lib/common/pipes/only-number.js +0 -60
- package/esm2015/lib/common/pipes/order.pipe.js +0 -180
- package/esm2015/lib/common/pipes/placeholder.pipe.js +0 -23
- package/esm2015/lib/common/pipes/safe-html.pipe.js +0 -37
- package/esm2015/lib/common/pipes/time.pipe.js +0 -17
- package/esm2015/lib/common/pipes/titlecase.pipe.js +0 -11
- package/esm2015/lib/common/pipes/truncate.pipe.js +0 -12
- package/esm2015/lib/common/pipes/values.js +0 -11
- package/esm2015/lib/common/public_api.js +0 -2
- package/esm2015/lib/common/services/base.service.js +0 -26
- package/esm2015/lib/common/services/enum.service.js +0 -42
- package/esm2015/lib/dialogs/alert-dialog/alert-dialog.component.js +0 -38
- package/esm2015/lib/dialogs/confirm-dialog/confirm-dialog.component.js +0 -44
- package/esm2015/lib/dialogs/dialog.component.js +0 -47
- package/esm2015/lib/dialogs/dialogs.module.js +0 -54
- package/esm2015/lib/dialogs/prompt-dialog/prompt-dialog.component.js +0 -44
- package/esm2015/lib/dialogs/services/dialog.service.js +0 -145
- package/esm2015/lib/file/file-input.component.js +0 -301
- package/esm2015/lib/file/file.module.js +0 -25
- package/esm2015/lib/form-validators/abstract/typed-form.js +0 -3
- package/esm2015/lib/form-validators/algorithm/luhn-algorithm.js +0 -15
- package/esm2015/lib/form-validators/const/app-validators.const.js +0 -68
- package/esm2015/lib/form-validators/const/app.const.js +0 -17
- package/esm2015/lib/form-validators/const/config-names.const.js +0 -9
- package/esm2015/lib/form-validators/const/config-required-fields.const.js +0 -11
- package/esm2015/lib/form-validators/const/decorators.const.js +0 -23
- package/esm2015/lib/form-validators/const/events.const.js +0 -14
- package/esm2015/lib/form-validators/const/html-elements.const.js +0 -7
- package/esm2015/lib/form-validators/const/iban-country-wise-regex.const.js +0 -80
- package/esm2015/lib/form-validators/const/index.js +0 -6
- package/esm2015/lib/form-validators/const/operators.const.js +0 -7
- package/esm2015/lib/form-validators/const/validation-alphabet-locale.const.js +0 -9
- package/esm2015/lib/form-validators/const/validator.const.js +0 -8
- package/esm2015/lib/form-validators/core/defaultContainer.js +0 -243
- package/esm2015/lib/form-validators/core/validator.interface.js +0 -2
- package/esm2015/lib/form-validators/core/validator.static.js +0 -74
- package/esm2015/lib/form-validators/decorators/allOf.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/alpha.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/alphaNumeric.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/and.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/ascii.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/async.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/base-decorator.function.js +0 -7
- package/esm2015/lib/form-validators/decorators/choice.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/compare.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/compose.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/contains.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/credit-card.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/cusip.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/custom.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/dataUri.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/date.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/different.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/digit.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/email.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/endsWith.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/even.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/extension.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/factor.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/file.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/fileSize.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/greater-than-equal-to.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/greater-than.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/grid.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/hexColor.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/image.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/index.js +0 -91
- package/esm2015/lib/form-validators/decorators/json.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/latLong.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/latitude.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/leapYear.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/less-than-equal-to.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/less-than.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/longitude.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/lowercase.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/mac.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/mask.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/maxDate.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/maxLength.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/maxNumber.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/maxTime.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/minDate.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/minLength.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/minNumber.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/minTime.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/model.decorator.js +0 -7
- package/esm2015/lib/form-validators/decorators/non-validation-decorators/disable.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/non-validation-decorators/elementClass.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/non-validation-decorators/error.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/noneOf.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/not.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/notEmpty.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/numeric.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/odd.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/oneOf.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/or.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/password.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/pattern.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/port.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/primeNumber.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/prop-array.decorator.js +0 -18
- package/esm2015/lib/form-validators/decorators/prop-object.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/prop.decorator.js +0 -16
- package/esm2015/lib/form-validators/decorators/range.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/required.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/requiredTrue.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/rule.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/sanitize/blacklist.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/escape.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/ltrim.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/prefix.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/rtrim.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/sanitize.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/stripLow.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/suffix.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toBoolean.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toDate.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toDouble.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toFloat.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toInt.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/toString.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/trim.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/sanitize/whitelist.decorator.js +0 -8
- package/esm2015/lib/form-validators/decorators/startsWith.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/time.decorator.js +0 -10
- package/esm2015/lib/form-validators/decorators/unique.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/uppercase.decorator.js +0 -6
- package/esm2015/lib/form-validators/decorators/url.decorator.js +0 -10
- package/esm2015/lib/form-validators/directives/base-directive.js +0 -43
- package/esm2015/lib/form-validators/directives/control-host.directive.js +0 -42
- package/esm2015/lib/form-validators/directives/html-control-template.directive.js +0 -28
- package/esm2015/lib/form-validators/directives/rx-form.directive.js +0 -131
- package/esm2015/lib/form-validators/directives/template-validations/async-validation.directive.js +0 -26
- package/esm2015/lib/form-validators/directives/template-validations/base-validator.directive.js +0 -42
- package/esm2015/lib/form-validators/directives/template-validations/control-expression-process.js +0 -25
- package/esm2015/lib/form-validators/directives/template-validations/file-control.directive.js +0 -93
- package/esm2015/lib/form-validators/directives/template-validations/image-file-control.directive.js +0 -55
- package/esm2015/lib/form-validators/directives/template-validations/rxformcontrol.directive.js +0 -237
- package/esm2015/lib/form-validators/domain/disable-provider.js +0 -93
- package/esm2015/lib/form-validators/domain/element-processor/decimal.provider.js +0 -64
- package/esm2015/lib/form-validators/domain/element-processor/mask.provider.js +0 -430
- package/esm2015/lib/form-validators/domain/form-data.js +0 -47
- package/esm2015/lib/form-validators/enums/error-message-binding-strategy.js +0 -11
- package/esm2015/lib/form-validators/enums/index.js +0 -5
- package/esm2015/lib/form-validators/enums/ip-version.js +0 -7
- package/esm2015/lib/form-validators/enums/numeric-value-type.js +0 -7
- package/esm2015/lib/form-validators/enums/reset-type.js +0 -10
- package/esm2015/lib/form-validators/enums/url-validation-type.js +0 -7
- package/esm2015/lib/form-validators/models/config/alpha-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/array-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/base-config-fn.js +0 -2
- package/esm2015/lib/form-validators/models/config/base-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/base-date-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/choice-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/compare-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/component-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/compose-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/contains-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/credit-card-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/custom-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/date-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/default-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/digit-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/disable-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/element-class-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/email-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/error-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/extension-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/factor-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/field-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/file-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/hex-color-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/iban-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/image-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/index.js +0 -35
- package/esm2015/lib/form-validators/models/config/ip-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/logical-operator-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/mask-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/max-date-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/message-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/min-date-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/model-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/number-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/numeric-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/password-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/pattern-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/prop-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/props-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/range-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/relational-operator-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/required-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/rule-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/sanitize-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/size-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/string-comparison-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/time-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/todate-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/unique-config.js +0 -2
- package/esm2015/lib/form-validators/models/config/url-config.js +0 -2
- package/esm2015/lib/form-validators/models/form-builder-configuration.js +0 -8
- package/esm2015/lib/form-validators/models/index.js +0 -3
- package/esm2015/lib/form-validators/models/interface/array-prop-instance-config.interface.js +0 -2
- package/esm2015/lib/form-validators/models/interface/auto-instance-config.interface.js +0 -2
- package/esm2015/lib/form-validators/models/interface/form-data-config.js +0 -2
- package/esm2015/lib/form-validators/models/interface/i-abstract-control.js +0 -4
- package/esm2015/lib/form-validators/models/interface/i-form-group.js +0 -2
- package/esm2015/lib/form-validators/models/interface/instance-argument.interface.js +0 -2
- package/esm2015/lib/form-validators/models/interface/object-prop-instance-config.interface.js +0 -2
- package/esm2015/lib/form-validators/models/interface/options.js +0 -2
- package/esm2015/lib/form-validators/models/password-validation.model.js +0 -2
- package/esm2015/lib/form-validators/models/prop-validation-config.js +0 -2
- package/esm2015/lib/form-validators/public_api.js +0 -25
- package/esm2015/lib/form-validators/reactive-form-validators/allOf.validator.js +0 -22
- package/esm2015/lib/form-validators/reactive-form-validators/alpha.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/alphaNumeric.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/and.validator.js +0 -23
- package/esm2015/lib/form-validators/reactive-form-validators/ascii.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/async/base.async.validator.js +0 -24
- package/esm2015/lib/form-validators/reactive-form-validators/choice.validator.js +0 -19
- package/esm2015/lib/form-validators/reactive-form-validators/compare.validator.js +0 -20
- package/esm2015/lib/form-validators/reactive-form-validators/compose.validator.js +0 -23
- package/esm2015/lib/form-validators/reactive-form-validators/conditional-change.validator.js +0 -63
- package/esm2015/lib/form-validators/reactive-form-validators/contains.validator.js +0 -15
- package/esm2015/lib/form-validators/reactive-form-validators/credit-card.validator.js +0 -48
- package/esm2015/lib/form-validators/reactive-form-validators/cusip.validator.js +0 -38
- package/esm2015/lib/form-validators/reactive-form-validators/custom.validator.js +0 -23
- package/esm2015/lib/form-validators/reactive-form-validators/dataUri.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/date.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/different.validator.js +0 -19
- package/esm2015/lib/form-validators/reactive-form-validators/digit.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/email.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/endsWith.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/even.validator.js +0 -15
- package/esm2015/lib/form-validators/reactive-form-validators/extension.validator.js +0 -40
- package/esm2015/lib/form-validators/reactive-form-validators/factor.validator.js +0 -37
- package/esm2015/lib/form-validators/reactive-form-validators/file.validator.js +0 -26
- package/esm2015/lib/form-validators/reactive-form-validators/fileSize.validator.js +0 -32
- package/esm2015/lib/form-validators/reactive-form-validators/greater-than-equal-to.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/greater-than.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/grid.validator.js +0 -31
- package/esm2015/lib/form-validators/reactive-form-validators/hexcolor.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/iban.validator.js +0 -30
- package/esm2015/lib/form-validators/reactive-form-validators/image.validator.js +0 -48
- package/esm2015/lib/form-validators/reactive-form-validators/index.js +0 -66
- package/esm2015/lib/form-validators/reactive-form-validators/ip.validator.js +0 -35
- package/esm2015/lib/form-validators/reactive-form-validators/json.validator.js +0 -26
- package/esm2015/lib/form-validators/reactive-form-validators/latLong.validator.js +0 -18
- package/esm2015/lib/form-validators/reactive-form-validators/latitude.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/leapYear.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/less-than-equal-to.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/less-than.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/longitude.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/lowercase.validator.js +0 -15
- package/esm2015/lib/form-validators/reactive-form-validators/mac.validator.js +0 -9
- package/esm2015/lib/form-validators/reactive-form-validators/mask.validator.js +0 -13
- package/esm2015/lib/form-validators/reactive-form-validators/maxDate.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/maxLength.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/maxNumber.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/maxTime.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/minDate.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/minLength.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/minNumber.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/minTime.validator.js +0 -8
- package/esm2015/lib/form-validators/reactive-form-validators/noneOf.validator.js +0 -24
- package/esm2015/lib/form-validators/reactive-form-validators/not.validator.js +0 -23
- package/esm2015/lib/form-validators/reactive-form-validators/notEmpty.validator.js +0 -17
- package/esm2015/lib/form-validators/reactive-form-validators/numeric.validator.js +0 -20
- package/esm2015/lib/form-validators/reactive-form-validators/odd.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/oneOf.validator.js +0 -22
- package/esm2015/lib/form-validators/reactive-form-validators/or.validator.js +0 -23
- package/esm2015/lib/form-validators/reactive-form-validators/password.validator.js +0 -33
- package/esm2015/lib/form-validators/reactive-form-validators/pattern.validator.js +0 -17
- package/esm2015/lib/form-validators/reactive-form-validators/port.validator.js +0 -18
- package/esm2015/lib/form-validators/reactive-form-validators/primeNumber.validator.js +0 -26
- package/esm2015/lib/form-validators/reactive-form-validators/range.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/required.validator.js +0 -17
- package/esm2015/lib/form-validators/reactive-form-validators/requiredTrue.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/rule.validator.js +0 -20
- package/esm2015/lib/form-validators/reactive-form-validators/startsWith.validator.js +0 -16
- package/esm2015/lib/form-validators/reactive-form-validators/time.validator.js +0 -18
- package/esm2015/lib/form-validators/reactive-form-validators/unique.validator.js +0 -70
- package/esm2015/lib/form-validators/reactive-form-validators/uppercase.validator.js +0 -15
- package/esm2015/lib/form-validators/reactive-form-validators/url.validator.js +0 -28
- package/esm2015/lib/form-validators/services/base-form-builder.js +0 -115
- package/esm2015/lib/form-validators/services/entity.service.js +0 -64
- package/esm2015/lib/form-validators/services/form-control.js +0 -349
- package/esm2015/lib/form-validators/services/form-group.js +0 -2
- package/esm2015/lib/form-validators/services/reactive-form.module.js +0 -53
- package/esm2015/lib/form-validators/services/rx-form-array.js +0 -100
- package/esm2015/lib/form-validators/services/rx-form-builder.js +0 -565
- package/esm2015/lib/form-validators/services/rx-form-group.js +0 -299
- package/esm2015/lib/form-validators/services/typed-form-builder.js +0 -29
- package/esm2015/lib/form-validators/util/alphabet-regex.locale.js +0 -29
- package/esm2015/lib/form-validators/util/app-util.js +0 -141
- package/esm2015/lib/form-validators/util/check-length.js +0 -10
- package/esm2015/lib/form-validators/util/config-provider.js +0 -35
- package/esm2015/lib/form-validators/util/date-checker.function.js +0 -52
- package/esm2015/lib/form-validators/util/date-provider.js +0 -97
- package/esm2015/lib/form-validators/util/form-const.js +0 -3
- package/esm2015/lib/form-validators/util/form-provider.js +0 -37
- package/esm2015/lib/form-validators/util/index.js +0 -7
- package/esm2015/lib/form-validators/util/instance-provider.function.js +0 -30
- package/esm2015/lib/form-validators/util/ip-checker.js +0 -18
- package/esm2015/lib/form-validators/util/linq.js +0 -147
- package/esm2015/lib/form-validators/util/object-maker.js +0 -38
- package/esm2015/lib/form-validators/util/reactive-form-config.js +0 -23
- package/esm2015/lib/form-validators/util/regex-rules.js +0 -37
- package/esm2015/lib/form-validators/util/regex-validator.js +0 -74
- package/esm2015/lib/form-validators/util/relational-checker.function.js +0 -85
- package/esm2015/lib/form-validators/util/reset-form.js +0 -56
- package/esm2015/lib/form-validators/util/sanitizers.js +0 -131
- package/esm2015/lib/form-validators/util/time-checker.function.js +0 -48
- package/esm2015/lib/form-validators/util/type.js +0 -2
- package/esm2015/lib/form-validators/util/validator-value-checker.js +0 -17
- package/esm2015/lib/form-validators/validators-extension/allOf-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/alpha-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/alphaNumeric-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/and-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/ascii-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/base-validator.function.js +0 -33
- package/esm2015/lib/form-validators/validators-extension/choice-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/compare-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/compose-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/contains-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/credit-card-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/cusip-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/custom-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/dataUri-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/date-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/different-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/digit-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/email-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/endsWith-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/even-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/extension-validator.extension.js +0 -10
- package/esm2015/lib/form-validators/validators-extension/factor-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/file-validator.extension.js +0 -10
- package/esm2015/lib/form-validators/validators-extension/fileSize-validator.extension.js +0 -10
- package/esm2015/lib/form-validators/validators-extension/greater-than-equal-to-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/greater-than-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/grid-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/hexcolor-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/iban-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/image-validator.extension.js +0 -10
- package/esm2015/lib/form-validators/validators-extension/index.js +0 -68
- package/esm2015/lib/form-validators/validators-extension/ip-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/json-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/latLong-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/latitude-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/leapYear-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/less-than-equal-to-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/less-than-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/longitude-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/lowercase-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/mac-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/mask-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/maxDate-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/maxLength-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/maxNumber-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/maxTime-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/minDate-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/minLength-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/minNumber-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/minTime-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/noneOf-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/not-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/notEmpty-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/numeric-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/odd-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/oneOf-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/or-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/password-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/pattern-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/port-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/primeNumber-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/range-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/required-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/requiredTrue-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/rxweb-validators.js +0 -108
- package/esm2015/lib/form-validators/validators-extension/startsWith-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/time-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-extension/unique-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/uppercase-validator.extension.js +0 -7
- package/esm2015/lib/form-validators/validators-extension/url-validator.extension.js +0 -11
- package/esm2015/lib/form-validators/validators-function/alpha-validation.function.js +0 -37
- package/esm2015/lib/form-validators/validators-function/regex-validation.function.js +0 -16
- package/esm2015/lib/forms/components/generic-form/generic-form.component.js +0 -149
- package/esm2015/lib/forms/directives/mat-form-field-readonly.directive.js +0 -40
- package/esm2015/lib/forms/forms.module.js +0 -70
- package/esm2015/lib/forms/functions/decorators.js +0 -129
- package/esm2015/lib/forms/helpers/abstract-mat-form-field.js +0 -257
- package/esm2015/lib/forms/helpers/value-accessor-base.js +0 -140
- package/esm2015/lib/forms/public_api.js +0 -2
- package/esm2015/lib/forms/validators/equal-validator.directive.js +0 -75
- package/esm2015/lib/forms/validators/native-element-injector.directive.js +0 -38
- package/esm2015/lib/forms/validators/unique-validator-directive.js +0 -78
- package/esm2015/lib/http/http.module.js +0 -14
- package/esm2015/lib/layout/layout-card-over/layout-card-over.component.js +0 -35
- package/esm2015/lib/layout/layout-footer/layout-footer.component.js +0 -48
- package/esm2015/lib/layout/layout-manage-list/layout-manage-list.component.js +0 -125
- package/esm2015/lib/layout/layout-manage-list/layout-manage-list.directives.js +0 -103
- package/esm2015/lib/layout/layout-nav/layout-nav.component.js +0 -59
- package/esm2015/lib/layout/layout-nav-list/layout-nav-list.component.js +0 -111
- package/esm2015/lib/layout/layout-nav-list/layout-nav-list.directives.js +0 -103
- package/esm2015/lib/layout/layout-toggle.class.js +0 -80
- package/esm2015/lib/layout/layout.component.js +0 -77
- package/esm2015/lib/layout/layout.directives.js +0 -103
- package/esm2015/lib/layout/layout.module.js +0 -64
- package/esm2015/lib/layout/navigation-drawer/navigation-drawer.component.js +0 -148
- package/esm2015/lib/media/directives/media-toggle.directive.js +0 -118
- package/esm2015/lib/media/media.module.js +0 -29
- package/esm2015/lib/media/services/media.service.js +0 -116
- package/esm2015/lib/menu/components/menu.component.js +0 -45
- package/esm2015/lib/menu/menu.module.js +0 -38
- package/esm2015/lib/menu/services/menu-items.service.js +0 -26
- package/esm2015/lib/menu/services/menu.resolve.js +0 -61
- package/esm2015/lib/menu/services/menu.service.js +0 -26
- package/esm2015/lib/search/search.module.js +0 -31
- package/esm2015/lib/search/vd-search-box/vd-search-box.component.js +0 -111
- package/esm2015/lib/search/vd-search-input/vd-search-input.component.js +0 -122
- package/esm2015/lib/select/public_api.js +0 -2
- package/esm2015/lib/select/select.component.js +0 -396
- package/esm2015/lib/select/select.module.js +0 -29
- package/esm2015/lib/table/components/dynamic-table/dynamic-table.component.js +0 -264
- package/esm2015/lib/table/components/filter-clear.component.js +0 -45
- package/esm2015/lib/table/components/filter-date.component.js +0 -133
- package/esm2015/lib/table/components/filter-input.component.js +0 -179
- package/esm2015/lib/table/components/filter-select.component.js +0 -309
- package/esm2015/lib/table/directives/data-source-filter.directive.js +0 -43
- package/esm2015/lib/table/functions/decorators.js +0 -137
- package/esm2015/lib/table/functions/functions.js +0 -18
- package/esm2015/lib/table/paginator-intl.js +0 -42
- package/esm2015/lib/table/public_api.js +0 -2
- package/esm2015/lib/table/table.data-source.js +0 -211
- package/esm2015/lib/table/table.module.js +0 -84
- package/esm2015/lib/table/table.static-data-source.js +0 -135
- package/esm2015/messaia-cdk.js +0 -29
- package/fesm2015/messaia-cdk.js +0 -15733
- package/fesm2015/messaia-cdk.js.map +0 -1
- package/messaia-cdk.metadata.json +0 -1
|
@@ -1,565 +0,0 @@
|
|
|
1
|
-
import { Injectable } from "@angular/core";
|
|
2
|
-
import { FormGroup, FormArray, FormControl, FormBuilder } from "@angular/forms";
|
|
3
|
-
import { BaseFormBuilder } from './base-form-builder';
|
|
4
|
-
import { ReactiveFormConfig } from '../util/reactive-form-config';
|
|
5
|
-
import { defaultContainer } from '../core/defaultContainer';
|
|
6
|
-
import { FormBuilderConfiguration } from "../models";
|
|
7
|
-
import { ARRAY_PROPERTY, OBJECT_PROPERTY, PROPERTY, FUNCTION_STRING, OBJECT_STRING, RX_WEB_VALIDATOR, NUMBER, BOOLEAN, STRING, MODEL } from "../const";
|
|
8
|
-
import { AnnotationTypes } from "../core/validator.static";
|
|
9
|
-
import { conditionalChangeValidator } from "../reactive-form-validators/conditional-change.validator";
|
|
10
|
-
import { Linq } from '../util/linq';
|
|
11
|
-
import { APP_VALIDATORS } from '../const/app-validators.const';
|
|
12
|
-
import { RxFormControl } from './form-control';
|
|
13
|
-
import { RxFormGroup } from './rx-form-group';
|
|
14
|
-
import { RxFormArray } from './rx-form-array';
|
|
15
|
-
import { andValidator } from '../reactive-form-validators/and.validator';
|
|
16
|
-
import { orValidator } from '../reactive-form-validators/or.validator';
|
|
17
|
-
import { notValidator } from '../reactive-form-validators/not.validator';
|
|
18
|
-
import { RegexValidator } from "../util/regex-validator";
|
|
19
|
-
const LOGICAL_VALIDATORS = { and: andValidator, or: orValidator, not: notValidator };
|
|
20
|
-
const ASYNC = "async";
|
|
21
|
-
const ENTITY_OBJECT = "entityObject";
|
|
22
|
-
export class RxFormBuilder extends BaseFormBuilder {
|
|
23
|
-
constructor() {
|
|
24
|
-
super();
|
|
25
|
-
this.conditionalObjectProps = [];
|
|
26
|
-
this.conditionalValidationInstance = {};
|
|
27
|
-
this.builderConfigurationConditionalObjectProps = [];
|
|
28
|
-
this.formGroupPropOtherValidator = {};
|
|
29
|
-
this.currentFormGroupPropOtherValidator = {};
|
|
30
|
-
this.isNested = false;
|
|
31
|
-
this.isGroupCalled = false;
|
|
32
|
-
this.isNestedBinding = false;
|
|
33
|
-
}
|
|
34
|
-
getInstanceContainer(instanceFunc, entityObject) {
|
|
35
|
-
return this.instaceProvider(instanceFunc, entityObject);
|
|
36
|
-
}
|
|
37
|
-
setValue(formGroup, object) {
|
|
38
|
-
for (var col in object) {
|
|
39
|
-
var control = formGroup.get([col]);
|
|
40
|
-
control.setValue(object[col]);
|
|
41
|
-
control.updateValueAndValidity();
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
extractExpressions(fomrBuilderConfiguration) {
|
|
45
|
-
if (fomrBuilderConfiguration && fomrBuilderConfiguration.dynamicValidation) {
|
|
46
|
-
for (var property in fomrBuilderConfiguration.dynamicValidation) {
|
|
47
|
-
for (var decorator in fomrBuilderConfiguration.dynamicValidation[property]) {
|
|
48
|
-
if (fomrBuilderConfiguration.dynamicValidation[property][decorator].conditionalExpression) {
|
|
49
|
-
let columns = Linq.expressionColumns(fomrBuilderConfiguration.dynamicValidation[property][decorator].conditionalExpression);
|
|
50
|
-
defaultContainer.addChangeValidation(this.conditionalValidationInstance, property, columns);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
return null;
|
|
56
|
-
}
|
|
57
|
-
addAsyncValidation(property, propertyValidators, propValidationConfig) {
|
|
58
|
-
let asyncValidators = [];
|
|
59
|
-
if (propertyValidators) {
|
|
60
|
-
for (let propertyValidator of propertyValidators) {
|
|
61
|
-
if (propertyValidator.isAsync)
|
|
62
|
-
propertyValidator.config.forEach(t => { asyncValidators.push(t); });
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
if (propValidationConfig && propValidationConfig[ASYNC]) {
|
|
66
|
-
propValidationConfig[ASYNC].forEach(t => { asyncValidators.push(t); });
|
|
67
|
-
}
|
|
68
|
-
return asyncValidators;
|
|
69
|
-
}
|
|
70
|
-
addFormControl(property, propertyValidators, propValidationConfig, instance, entity) {
|
|
71
|
-
let validators = [];
|
|
72
|
-
let columns = [];
|
|
73
|
-
if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name]) || (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name])) {
|
|
74
|
-
let props = [];
|
|
75
|
-
if ((instance.conditionalValidationProps && instance.conditionalValidationProps[property.name]))
|
|
76
|
-
instance.conditionalValidationProps[property.name].forEach(t => props.push(t));
|
|
77
|
-
if (this.conditionalValidationInstance.conditionalValidationProps && this.conditionalValidationInstance.conditionalValidationProps[property.name])
|
|
78
|
-
this.conditionalValidationInstance.conditionalValidationProps[property.name].forEach(t => props.push(t));
|
|
79
|
-
validators.push(conditionalChangeValidator(props));
|
|
80
|
-
}
|
|
81
|
-
if (this.conditionalObjectProps.length > 0 || this.builderConfigurationConditionalObjectProps.length > 0) {
|
|
82
|
-
let propConditions = [];
|
|
83
|
-
if (this.conditionalObjectProps)
|
|
84
|
-
propConditions = this.conditionalObjectProps.filter(t => t.propName == property.name);
|
|
85
|
-
if (this.builderConfigurationConditionalObjectProps)
|
|
86
|
-
this.builderConfigurationConditionalObjectProps.filter(t => t.propName == property.name).forEach(t => propConditions.push(t));
|
|
87
|
-
propConditions.forEach(t => {
|
|
88
|
-
if (t.referencePropName && columns.indexOf(t.referencePropName) == -1)
|
|
89
|
-
columns.push(t.referencePropName);
|
|
90
|
-
});
|
|
91
|
-
if (columns.length > 0)
|
|
92
|
-
validators.push(conditionalChangeValidator(columns));
|
|
93
|
-
}
|
|
94
|
-
for (let propertyValidator of propertyValidators) {
|
|
95
|
-
if (!propertyValidator.isAsync)
|
|
96
|
-
switch (propertyValidator.annotationType) {
|
|
97
|
-
case AnnotationTypes.rule:
|
|
98
|
-
validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config, entity));
|
|
99
|
-
break;
|
|
100
|
-
case AnnotationTypes.and:
|
|
101
|
-
case AnnotationTypes.or:
|
|
102
|
-
case AnnotationTypes.not:
|
|
103
|
-
validators.push(LOGICAL_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));
|
|
104
|
-
break;
|
|
105
|
-
default:
|
|
106
|
-
validators.push(APP_VALIDATORS[propertyValidator.annotationType](propertyValidator.config));
|
|
107
|
-
break;
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
if (propValidationConfig)
|
|
111
|
-
this.additionalValidation(validators, propValidationConfig);
|
|
112
|
-
if (this.currentFormGroupPropOtherValidator[property.name])
|
|
113
|
-
this.currentFormGroupPropOtherValidator[property.name].forEach(t => { validators.push(t); });
|
|
114
|
-
return validators;
|
|
115
|
-
}
|
|
116
|
-
additionalValidation(validations, propValidationConfig) {
|
|
117
|
-
for (var col in AnnotationTypes) {
|
|
118
|
-
if (propValidationConfig[AnnotationTypes[col]] && col != "custom") {
|
|
119
|
-
validations.push(APP_VALIDATORS[AnnotationTypes[col]](propValidationConfig[AnnotationTypes[col]]));
|
|
120
|
-
}
|
|
121
|
-
else if (col == AnnotationTypes.custom && propValidationConfig[AnnotationTypes[col]])
|
|
122
|
-
validations.push(propValidationConfig[col]);
|
|
123
|
-
}
|
|
124
|
-
}
|
|
125
|
-
getEntity(object, formBuilderConfiguration, propertyName, isSameObjectConstructor = false) {
|
|
126
|
-
if (formBuilderConfiguration && formBuilderConfiguration.genericEntities && formBuilderConfiguration.genericEntities[propertyName])
|
|
127
|
-
return formBuilderConfiguration.genericEntities[propertyName];
|
|
128
|
-
return isSameObjectConstructor ? object.constructor : undefined;
|
|
129
|
-
}
|
|
130
|
-
getObjectPropertyInstance(object, propertyInfo, formBuilderConfiguration) {
|
|
131
|
-
if (propertyInfo.propertyType == OBJECT_PROPERTY && object[propertyInfo.name])
|
|
132
|
-
return object[propertyInfo.name].constructor;
|
|
133
|
-
else if (propertyInfo.propertyType == ARRAY_PROPERTY && object[propertyInfo.name] && object[propertyInfo.name].length > 0)
|
|
134
|
-
return object[propertyInfo.name][0].constructor;
|
|
135
|
-
return this.getEntity(object, formBuilderConfiguration, propertyInfo.name);
|
|
136
|
-
}
|
|
137
|
-
checkObjectPropAdditionalValidation(instanceContainer, object, formBuilderConfiguration) {
|
|
138
|
-
var props = instanceContainer.properties.filter(t => t.propertyType == OBJECT_PROPERTY || t.propertyType == ARRAY_PROPERTY);
|
|
139
|
-
props.forEach(t => {
|
|
140
|
-
let entity = t.entity;
|
|
141
|
-
if (!t.entity)
|
|
142
|
-
entity = this.getObjectPropertyInstance(object, t, formBuilderConfiguration);
|
|
143
|
-
if (entity) {
|
|
144
|
-
let instance = this.getInstanceContainer(entity, null);
|
|
145
|
-
if (instance && instance.conditionalValidationProps) {
|
|
146
|
-
for (var key in instance.conditionalValidationProps) {
|
|
147
|
-
var prop = instanceContainer.properties.filter(t => t.name == key)[0];
|
|
148
|
-
if (prop) {
|
|
149
|
-
if (!instanceContainer.conditionalValidationProps)
|
|
150
|
-
instanceContainer.conditionalValidationProps = {};
|
|
151
|
-
if (!instanceContainer.conditionalValidationProps[key])
|
|
152
|
-
instanceContainer.conditionalValidationProps[key] = [];
|
|
153
|
-
instance.conditionalValidationProps[key].forEach(x => {
|
|
154
|
-
if (t.propertyType != ARRAY_PROPERTY)
|
|
155
|
-
instanceContainer.conditionalValidationProps[key].push([t.name, x].join('.'));
|
|
156
|
-
else
|
|
157
|
-
instanceContainer.conditionalValidationProps[key].push([t.name, x].join('[]'));
|
|
158
|
-
});
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
getObject(model, entityObject, formBuilderConfiguration) {
|
|
166
|
-
let json = {};
|
|
167
|
-
if (typeof model == FUNCTION_STRING)
|
|
168
|
-
json.model = model;
|
|
169
|
-
if (typeof model == FUNCTION_STRING && (entityObject instanceof FormBuilderConfiguration)) {
|
|
170
|
-
json.entityObject = this.createClassObject(json.model, entityObject);
|
|
171
|
-
}
|
|
172
|
-
if (entityObject && !(entityObject instanceof FormBuilderConfiguration))
|
|
173
|
-
json.entityObject = entityObject;
|
|
174
|
-
if (entityObject instanceof FormBuilderConfiguration && !formBuilderConfiguration)
|
|
175
|
-
json.formBuilderConfiguration = entityObject;
|
|
176
|
-
else if (!(entityObject instanceof FormBuilderConfiguration) && formBuilderConfiguration) {
|
|
177
|
-
json.formBuilderConfiguration = formBuilderConfiguration;
|
|
178
|
-
json.entityObject = this.createClassObject(json.model, json.formBuilderConfiguration, json.entityObject);
|
|
179
|
-
}
|
|
180
|
-
if (!entityObject) {
|
|
181
|
-
if (typeof model == OBJECT_STRING)
|
|
182
|
-
json.model = model.constructor;
|
|
183
|
-
json.entityObject = this.createClassObject(json.model, json.formBuilderConfiguration, model);
|
|
184
|
-
}
|
|
185
|
-
else if (model && (entityObject instanceof FormBuilderConfiguration) && (typeof model == OBJECT_STRING)) {
|
|
186
|
-
json[MODEL] = model.constructor;
|
|
187
|
-
json[ENTITY_OBJECT] = this.createClassObject(json.model, json.formBuilderConfiguration, model);
|
|
188
|
-
}
|
|
189
|
-
return json;
|
|
190
|
-
}
|
|
191
|
-
control(value, validators, asyncValidators) {
|
|
192
|
-
return new RxFormControl(value, validators, asyncValidators, {}, {}, '', []);
|
|
193
|
-
}
|
|
194
|
-
array(values, validatorConfig) {
|
|
195
|
-
let formArray = this.group({ temp: values }, validatorConfig).get("temp");
|
|
196
|
-
var formBuilder = new FormBuilder();
|
|
197
|
-
return formBuilder.array(formArray.controls);
|
|
198
|
-
}
|
|
199
|
-
group(groupObject, validatorConfig) {
|
|
200
|
-
let modelInstance = super.createInstance();
|
|
201
|
-
let entityObject = {};
|
|
202
|
-
this.formGroupPropOtherValidator = {};
|
|
203
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
|
|
204
|
-
this.createValidatorFormGroup(groupObject, entityObject, modelInstance, validatorConfig);
|
|
205
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
|
|
206
|
-
this.isGroupCalled = true;
|
|
207
|
-
let formGroup = this.formGroup(modelInstance.constructor, entityObject, validatorConfig);
|
|
208
|
-
this.isGroupCalled = false;
|
|
209
|
-
this.formGroupPropOtherValidator = {};
|
|
210
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator;
|
|
211
|
-
this.formGroupPropOtherValidator = {};
|
|
212
|
-
return formGroup;
|
|
213
|
-
}
|
|
214
|
-
applyAllPropValidator(propName, validatorConfig, modelInstance) {
|
|
215
|
-
if (validatorConfig && validatorConfig.applyAllProps) {
|
|
216
|
-
if (!(validatorConfig.excludeProps && validatorConfig.excludeProps.length > 0 && validatorConfig.excludeProps.indexOf(propName) == -1)) {
|
|
217
|
-
validatorConfig.applyAllProps.forEach((t) => {
|
|
218
|
-
if (t.name == RX_WEB_VALIDATOR) {
|
|
219
|
-
t(propName, modelInstance);
|
|
220
|
-
}
|
|
221
|
-
else {
|
|
222
|
-
if (!this.currentFormGroupPropOtherValidator[propName])
|
|
223
|
-
this.currentFormGroupPropOtherValidator[propName] = [];
|
|
224
|
-
this.currentFormGroupPropOtherValidator[propName].push(t);
|
|
225
|
-
}
|
|
226
|
-
});
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
dynamicValidationPropCheck(propName, validatorConfig) {
|
|
231
|
-
return (validatorConfig == undefined) ? true : (!validatorConfig.dynamicValidationConfigurationPropertyName) ? true : validatorConfig.dynamicValidationConfigurationPropertyName == propName ? false : true;
|
|
232
|
-
}
|
|
233
|
-
isNotObject(value) {
|
|
234
|
-
return value instanceof Date || value === null || typeof value != OBJECT_STRING;
|
|
235
|
-
}
|
|
236
|
-
createValidatorFormGroup(groupObject, entityObject, modelInstance, validatorConfig) {
|
|
237
|
-
for (var propName in groupObject) {
|
|
238
|
-
var prop = groupObject[propName];
|
|
239
|
-
if (prop instanceof Array && prop.length > 0 && this.isNotObject(prop[0])) {
|
|
240
|
-
let propValidators = (prop.length > 1 && prop[1] instanceof Array) ? prop[1] : (prop.length == 2) ? [prop[1]] : [];
|
|
241
|
-
let propertyAdded = false;
|
|
242
|
-
for (var i = 0; i < propValidators.length; i++) {
|
|
243
|
-
if (propValidators[i].name == RX_WEB_VALIDATOR) {
|
|
244
|
-
propValidators[i](propName, modelInstance);
|
|
245
|
-
propertyAdded = true;
|
|
246
|
-
}
|
|
247
|
-
else {
|
|
248
|
-
if (!this.currentFormGroupPropOtherValidator[propName])
|
|
249
|
-
this.currentFormGroupPropOtherValidator[propName] = [];
|
|
250
|
-
this.currentFormGroupPropOtherValidator[propName].push(propValidators[i]);
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
if (!propertyAdded)
|
|
254
|
-
defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });
|
|
255
|
-
this.applyAllPropValidator(propName, validatorConfig, modelInstance);
|
|
256
|
-
}
|
|
257
|
-
else if (prop === null || prop === undefined || typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {
|
|
258
|
-
defaultContainer.initPropertyObject(propName, PROPERTY, undefined, typeof modelInstance == OBJECT_STRING ? modelInstance : { constructor: modelInstance });
|
|
259
|
-
this.applyAllPropValidator(propName, validatorConfig, modelInstance);
|
|
260
|
-
}
|
|
261
|
-
else if (prop instanceof Array) {
|
|
262
|
-
if (prop instanceof FormArray) {
|
|
263
|
-
entityObject[propName] = prop;
|
|
264
|
-
}
|
|
265
|
-
else {
|
|
266
|
-
let propModelInstance = super.createInstance();
|
|
267
|
-
if (typeof modelInstance == "function")
|
|
268
|
-
modelInstance.constructor = modelInstance;
|
|
269
|
-
defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, propModelInstance.constructor, modelInstance);
|
|
270
|
-
entityObject[propName] = [];
|
|
271
|
-
for (let row of prop) {
|
|
272
|
-
let jObject = {};
|
|
273
|
-
entityObject[propName].push(jObject);
|
|
274
|
-
this.createValidatorFormGroup(row, jObject, propModelInstance.constructor, validatorConfig);
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
else if (typeof prop == OBJECT_STRING && !(prop instanceof FormControl || prop instanceof RxFormControl)) {
|
|
279
|
-
let formGroup = (prop instanceof FormArray) ? prop.controls[0] : prop;
|
|
280
|
-
if (!formGroup.model && (prop instanceof FormGroup || prop instanceof RxFormGroup)) {
|
|
281
|
-
formGroup = this.group(formGroup.controls);
|
|
282
|
-
}
|
|
283
|
-
if (prop instanceof FormGroup || prop instanceof RxFormGroup) {
|
|
284
|
-
entityObject[propName] = prop;
|
|
285
|
-
defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, formGroup.model, modelInstance);
|
|
286
|
-
}
|
|
287
|
-
else if (prop instanceof FormArray) {
|
|
288
|
-
entityObject[propName] = prop;
|
|
289
|
-
defaultContainer.initPropertyObject(propName, ARRAY_PROPERTY, formGroup.model, modelInstance);
|
|
290
|
-
}
|
|
291
|
-
else {
|
|
292
|
-
if (this.dynamicValidationPropCheck(propName, validatorConfig)) {
|
|
293
|
-
this.formGroupPropOtherValidator[propName] = {};
|
|
294
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[propName];
|
|
295
|
-
let propModelInstance = super.createInstance();
|
|
296
|
-
entityObject[propName] = {};
|
|
297
|
-
entityObject[propName].constructor = propModelInstance.constructor;
|
|
298
|
-
defaultContainer.initPropertyObject(propName, OBJECT_PROPERTY, entityObject[propName].constructor, modelInstance.constructor == Function ? { constructor: modelInstance } : modelInstance);
|
|
299
|
-
let objectValidationConfig = this.getValidatorConfig(validatorConfig, groupObject, propName + ".");
|
|
300
|
-
this.createValidatorFormGroup(groupObject[propName], entityObject[propName], entityObject[propName].constructor, objectValidationConfig);
|
|
301
|
-
}
|
|
302
|
-
else
|
|
303
|
-
entityObject[propName] = groupObject[propName];
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
if (typeof prop == STRING || typeof prop == NUMBER || typeof prop == BOOLEAN || prop instanceof Date) {
|
|
307
|
-
entityObject[propName] = prop;
|
|
308
|
-
}
|
|
309
|
-
else if ((prop && prop.length > 0 && this.isNotObject(prop[0]) && !(prop instanceof FormControl || prop instanceof RxFormControl) && !(prop instanceof FormArray))) {
|
|
310
|
-
entityObject[propName] = prop[0];
|
|
311
|
-
}
|
|
312
|
-
else if (prop instanceof FormArray) {
|
|
313
|
-
entityObject[propName] = prop;
|
|
314
|
-
}
|
|
315
|
-
else if (prop instanceof FormControl || prop instanceof RxFormControl) {
|
|
316
|
-
entityObject[propName] = prop;
|
|
317
|
-
defaultContainer.initPropertyObject(propName, PROPERTY, undefined, modelInstance.constructor ? modelInstance : { constructor: modelInstance });
|
|
318
|
-
}
|
|
319
|
-
}
|
|
320
|
-
}
|
|
321
|
-
getValidatorConfig(validatorConfig, entityObject, rootPropertyName, arrayPropertyName) {
|
|
322
|
-
let excludeProps = [];
|
|
323
|
-
let includeProps = [];
|
|
324
|
-
let ignoreUndefinedProps = [];
|
|
325
|
-
if (!validatorConfig)
|
|
326
|
-
return {};
|
|
327
|
-
const validationProps = this.getObjectForProperty(validatorConfig.dynamicValidation, rootPropertyName, arrayPropertyName);
|
|
328
|
-
const abstractControlOptions = this.getObjectForProperty(validatorConfig.abstractControlOptions, rootPropertyName, arrayPropertyName);
|
|
329
|
-
if (validatorConfig.excludeProps)
|
|
330
|
-
excludeProps = this.getProps(validatorConfig.excludeProps, rootPropertyName);
|
|
331
|
-
if (validatorConfig.includeProps)
|
|
332
|
-
includeProps = this.getProps(validatorConfig.includeProps, rootPropertyName);
|
|
333
|
-
if (validatorConfig.ignoreUndefinedProps)
|
|
334
|
-
ignoreUndefinedProps = this.getProps(validatorConfig.ignoreUndefinedProps, rootPropertyName, true);
|
|
335
|
-
if (!Object.keys(abstractControlOptions).length && rootPropertyName.endsWith('.') && validatorConfig.abstractControlOptions && validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)])
|
|
336
|
-
abstractControlOptions['global'] = validatorConfig.abstractControlOptions[rootPropertyName.substring(0, rootPropertyName.length - 1)];
|
|
337
|
-
const dynamicValidation = (validatorConfig.dynamicValidationConfigurationPropertyName && entityObject[validatorConfig.dynamicValidationConfigurationPropertyName]) ? entityObject[validatorConfig.dynamicValidationConfigurationPropertyName] : validationProps;
|
|
338
|
-
return { ignoreUndefinedProps: ignoreUndefinedProps, includeProps: includeProps, dynamicValidation: dynamicValidation, excludeProps: excludeProps, abstractControlOptions: abstractControlOptions };
|
|
339
|
-
}
|
|
340
|
-
getObjectForProperty(rootObject, rootPropertyName, arrayPropertyName) {
|
|
341
|
-
const result = {};
|
|
342
|
-
for (let propName in rootObject) {
|
|
343
|
-
if (!propName.startsWith(rootPropertyName) && (!arrayPropertyName || !propName.startsWith(arrayPropertyName)))
|
|
344
|
-
continue;
|
|
345
|
-
let splitProp = propName.split(".", 2)[1];
|
|
346
|
-
if (!splitProp)
|
|
347
|
-
continue;
|
|
348
|
-
result[splitProp] = rootObject[propName];
|
|
349
|
-
}
|
|
350
|
-
return result;
|
|
351
|
-
}
|
|
352
|
-
getProps(properties, rootPropertyName, isIgnoreProp = false) {
|
|
353
|
-
let props = [];
|
|
354
|
-
for (let prop of properties) {
|
|
355
|
-
if (prop.indexOf(rootPropertyName) != -1) {
|
|
356
|
-
let splitProps = prop.split(".");
|
|
357
|
-
if (splitProps.length == 2) {
|
|
358
|
-
props.push(splitProps[1]);
|
|
359
|
-
}
|
|
360
|
-
else if (splitProps.length > 2) {
|
|
361
|
-
splitProps.splice(0, 1);
|
|
362
|
-
props.push(splitProps.join("."));
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
if (isIgnoreProp && properties.filter(x => x == rootPropertyName.replace('.', '')).length == 1)
|
|
367
|
-
props.push(':self:');
|
|
368
|
-
return props;
|
|
369
|
-
}
|
|
370
|
-
formGroup(model, entityObject, formBuilderConfiguration) {
|
|
371
|
-
let json = this.getObject(model, entityObject, formBuilderConfiguration);
|
|
372
|
-
model = json.model;
|
|
373
|
-
entityObject = json.entityObject;
|
|
374
|
-
if (entityObject.constructor != model && !this.isGroupCalled) {
|
|
375
|
-
entityObject = json.entityObject = this.updateObject(model, json.entityObject, formBuilderConfiguration);
|
|
376
|
-
}
|
|
377
|
-
formBuilderConfiguration = json.formBuilderConfiguration;
|
|
378
|
-
if (formBuilderConfiguration)
|
|
379
|
-
this.extractExpressions(formBuilderConfiguration);
|
|
380
|
-
let instanceContainer = this.getInstanceContainer(model, entityObject);
|
|
381
|
-
this.checkObjectPropAdditionalValidation(instanceContainer, entityObject, formBuilderConfiguration);
|
|
382
|
-
let formGroupObject = {};
|
|
383
|
-
let extendedProperties = {};
|
|
384
|
-
let formChildGroup = undefined;
|
|
385
|
-
let formArrayGroup = undefined;
|
|
386
|
-
var additionalValidations = {};
|
|
387
|
-
instanceContainer.properties.forEach(property => {
|
|
388
|
-
let isIncludeProp = true;
|
|
389
|
-
if (formBuilderConfiguration) {
|
|
390
|
-
if (formBuilderConfiguration.excludeProps && formBuilderConfiguration.excludeProps.length > 0)
|
|
391
|
-
isIncludeProp = formBuilderConfiguration.excludeProps.indexOf(property.name) == -1;
|
|
392
|
-
if (formBuilderConfiguration.dynamicValidation)
|
|
393
|
-
additionalValidations = formBuilderConfiguration.dynamicValidation;
|
|
394
|
-
if (formBuilderConfiguration.includeProps && formBuilderConfiguration.includeProps.length > 0)
|
|
395
|
-
isIncludeProp = formBuilderConfiguration.includeProps.indexOf(property.name) != -1;
|
|
396
|
-
if (formBuilderConfiguration.ignoreUndefinedProps && formBuilderConfiguration.ignoreUndefinedProps.length > 0) {
|
|
397
|
-
isIncludeProp = !(property.propertyType == PROPERTY && !RegexValidator.isNotBlank(json.entityObject[property.name]) && (formBuilderConfiguration.ignoreUndefinedProps.indexOf(property.name) !== -1 || formBuilderConfiguration.ignoreUndefinedProps.indexOf(":self:") !== -1));
|
|
398
|
-
}
|
|
399
|
-
}
|
|
400
|
-
if (property.ignore)
|
|
401
|
-
isIncludeProp = !property.ignore.call(json.entityObject, json.entityObject);
|
|
402
|
-
if (isIncludeProp) {
|
|
403
|
-
switch (property.propertyType) {
|
|
404
|
-
case PROPERTY:
|
|
405
|
-
if (!(entityObject[property.name] instanceof FormControl || entityObject[property.name] instanceof RxFormControl)) {
|
|
406
|
-
let propertyValidators = instanceContainer.propertyAnnotations.filter(t => t.propertyName == property.name);
|
|
407
|
-
let sanitizeValue = super.sanitizeValue(instanceContainer, property.name, super.getDefaultValue(property, entityObject[property.name], formBuilderConfiguration), json.entityObject, Object.assign({}, json.entityObject));
|
|
408
|
-
if (entityObject[property.name] === undefined && sanitizeValue)
|
|
409
|
-
entityObject[property.name] = sanitizeValue;
|
|
410
|
-
let validators = this.addFormControl(property, propertyValidators, additionalValidations[property.name], instanceContainer, entityObject);
|
|
411
|
-
let abstractControlOptions = { validators: validators, asyncValidators: this.addAsyncValidation(property, propertyValidators, additionalValidations[property.name]) };
|
|
412
|
-
abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration, abstractControlOptions);
|
|
413
|
-
if (property.updateOn && !abstractControlOptions.updateOn)
|
|
414
|
-
abstractControlOptions.updateOn = property.updateOn;
|
|
415
|
-
formGroupObject[property.name] = new RxFormControl(sanitizeValue, abstractControlOptions, [], json.entityObject, Object.assign({}, json.entityObject), property.name, instanceContainer.sanitizers[property.name]);
|
|
416
|
-
this.isNested = false;
|
|
417
|
-
}
|
|
418
|
-
else
|
|
419
|
-
formGroupObject[property.name] = super.getDefaultValue(property, entityObject[property.name], formBuilderConfiguration);
|
|
420
|
-
extendedProperties[property.name] = true;
|
|
421
|
-
break;
|
|
422
|
-
case OBJECT_PROPERTY:
|
|
423
|
-
let objectValue = entityObject[property.name];
|
|
424
|
-
if (objectValue && objectValue instanceof Object && !(objectValue instanceof FormGroup || objectValue instanceof RxFormGroup)) {
|
|
425
|
-
this.isNestedBinding = this.isNested = true;
|
|
426
|
-
if (instanceContainer && instanceContainer.conditionalObjectProps)
|
|
427
|
-
this.conditionalObjectProps = instanceContainer.conditionalObjectProps.filter(t => t.objectPropName == property.name);
|
|
428
|
-
if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps)
|
|
429
|
-
this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter(t => t.objectPropName == property.name);
|
|
430
|
-
if (this.formGroupPropOtherValidator[property.name])
|
|
431
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];
|
|
432
|
-
let objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration, objectValue, `${property.name}.`);
|
|
433
|
-
let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;
|
|
434
|
-
formGroupObject[property.name] = this.formGroup(entity || property.entity || this.getEntity(objectValue, formBuilderConfiguration, property.name, true), objectValue, objectValidationConfig);
|
|
435
|
-
this.conditionalObjectProps = [];
|
|
436
|
-
this.builderConfigurationConditionalObjectProps = [];
|
|
437
|
-
this.isNestedBinding = this.isNested = false;
|
|
438
|
-
}
|
|
439
|
-
else if (objectValue instanceof FormGroup || objectValue instanceof RxFormGroup)
|
|
440
|
-
formGroupObject[property.name] = objectValue;
|
|
441
|
-
break;
|
|
442
|
-
case ARRAY_PROPERTY:
|
|
443
|
-
let arrayObjectValue = entityObject[property.name];
|
|
444
|
-
if (arrayObjectValue && arrayObjectValue instanceof Array && !(arrayObjectValue instanceof FormArray)) {
|
|
445
|
-
this.isNestedBinding = this.isNested = true;
|
|
446
|
-
var formArrayGroup = [];
|
|
447
|
-
let index = 0;
|
|
448
|
-
let entity = property.entityProvider ? property.entityProvider.call(entityObject) : undefined;
|
|
449
|
-
let objectValidationConfig = null;
|
|
450
|
-
for (let subObject of arrayObjectValue) {
|
|
451
|
-
if (instanceContainer && instanceContainer.conditionalObjectProps)
|
|
452
|
-
this.conditionalObjectProps = instanceContainer.conditionalObjectProps.filter(t => t.objectPropName == property.name && t.arrayIndex == index);
|
|
453
|
-
if (this.conditionalValidationInstance && this.conditionalValidationInstance.conditionalObjectProps)
|
|
454
|
-
this.builderConfigurationConditionalObjectProps = this.conditionalValidationInstance.conditionalObjectProps.filter(t => t.objectPropName == property.name && t.arrayIndex == index);
|
|
455
|
-
if (this.formGroupPropOtherValidator[property.name])
|
|
456
|
-
this.currentFormGroupPropOtherValidator = this.formGroupPropOtherValidator[property.name];
|
|
457
|
-
objectValidationConfig = this.getValidatorConfig(formBuilderConfiguration, subObject, `${property.name}.`, `${property.name}[${index}].`);
|
|
458
|
-
formArrayGroup.push(this.formGroup(entity || property.entity || this.getEntity(subObject, formBuilderConfiguration, property.name, true), subObject, objectValidationConfig));
|
|
459
|
-
index++;
|
|
460
|
-
this.conditionalObjectProps = [];
|
|
461
|
-
this.builderConfigurationConditionalObjectProps = [];
|
|
462
|
-
}
|
|
463
|
-
let abstractControlOptions = this.getAbstractControlOptions(property.name, formBuilderConfiguration, {});
|
|
464
|
-
formGroupObject[property.name] = new RxFormArray(arrayObjectValue, formArrayGroup, abstractControlOptions, null, property.arrayConfig);
|
|
465
|
-
if (ReactiveFormConfig.autoInstancePush) {
|
|
466
|
-
arrayObjectValue.push = (instance) => { let formGroup = this.formGroup(instance.constructor, instance, objectValidationConfig); formGroupObject[property.name].push(formGroup, { isAddedInstance: true }); return 0; };
|
|
467
|
-
arrayObjectValue.splice = (start, deleteCount) => {
|
|
468
|
-
let end = (start + deleteCount) - 1;
|
|
469
|
-
for (var i = start; i <= end; i++) {
|
|
470
|
-
formGroupObject[property.name].removeAt(i, { isRemovedInstance: true });
|
|
471
|
-
}
|
|
472
|
-
return [];
|
|
473
|
-
};
|
|
474
|
-
}
|
|
475
|
-
this.isNestedBinding = this.isNested = false;
|
|
476
|
-
}
|
|
477
|
-
else if (arrayObjectValue instanceof FormArray)
|
|
478
|
-
formGroupObject[property.name] = arrayObjectValue;
|
|
479
|
-
else if (property.arrayConfig && property.arrayConfig.createBlank)
|
|
480
|
-
formGroupObject[property.name] = new RxFormArray([], [], null, null, property.arrayConfig);
|
|
481
|
-
break;
|
|
482
|
-
}
|
|
483
|
-
}
|
|
484
|
-
});
|
|
485
|
-
if (!this.isNested) {
|
|
486
|
-
this.conditionalValidationInstance = {};
|
|
487
|
-
this.builderConfigurationConditionalObjectProps = [];
|
|
488
|
-
}
|
|
489
|
-
let abstractControlOptions = {
|
|
490
|
-
validators: [],
|
|
491
|
-
asyncValidators: [],
|
|
492
|
-
updateOn: formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions['global']
|
|
493
|
-
? formBuilderConfiguration.abstractControlOptions['global']
|
|
494
|
-
: undefined
|
|
495
|
-
};
|
|
496
|
-
abstractControlOptions = this.getAbstractControlOptions("global", formBuilderConfiguration, abstractControlOptions);
|
|
497
|
-
let formGroup = new RxFormGroup(json.model, json.entityObject, formGroupObject, abstractControlOptions);
|
|
498
|
-
if (defaultContainer.isExperimental) {
|
|
499
|
-
json.entityObject["formGroup"] = formGroup;
|
|
500
|
-
this.overrideProperties(formGroup, json.entityObject, extendedProperties);
|
|
501
|
-
}
|
|
502
|
-
if (!this.isNestedBinding && !this.isGroupCalled)
|
|
503
|
-
formGroup.refreshDisable();
|
|
504
|
-
return formGroup;
|
|
505
|
-
}
|
|
506
|
-
overrideProperties(formGroup, entityObject, properties) {
|
|
507
|
-
Object.keys(properties).forEach(t => {
|
|
508
|
-
this.overrideProp(entityObject, t, formGroup);
|
|
509
|
-
});
|
|
510
|
-
}
|
|
511
|
-
getAbstractControlOptions(name, formBuilderConfiguration, abstractControlOptions) {
|
|
512
|
-
if (formBuilderConfiguration && formBuilderConfiguration.abstractControlOptions && formBuilderConfiguration.abstractControlOptions[name])
|
|
513
|
-
abstractControlOptions.updateOn = formBuilderConfiguration.abstractControlOptions[name];
|
|
514
|
-
const controlOptions = formBuilderConfiguration ? formBuilderConfiguration.baseAbstractControlOptions : null;
|
|
515
|
-
if (controlOptions && controlOptions[name]) {
|
|
516
|
-
if (controlOptions[name].updateOn)
|
|
517
|
-
abstractControlOptions.updateOn = controlOptions[name].updateOn;
|
|
518
|
-
if (controlOptions[name].validators) {
|
|
519
|
-
if (Array.isArray(controlOptions[name].validators))
|
|
520
|
-
controlOptions[name].validators.forEach(validator => abstractControlOptions.validators.push(validator));
|
|
521
|
-
else
|
|
522
|
-
abstractControlOptions.validators.push(controlOptions[name].validators);
|
|
523
|
-
}
|
|
524
|
-
if (controlOptions[name].asyncValidators) {
|
|
525
|
-
if (Array.isArray(controlOptions[name].asyncValidators))
|
|
526
|
-
controlOptions[name].asyncValidators.forEach(validator => abstractControlOptions.asyncValidators.push(validator));
|
|
527
|
-
else
|
|
528
|
-
abstractControlOptions.asyncValidators.push(controlOptions[name].validators);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
return abstractControlOptions;
|
|
532
|
-
}
|
|
533
|
-
overrideProp(entityObject, propName, formGroup) {
|
|
534
|
-
let descriptor = Object.getOwnPropertyDescriptor(Object.getPrototypeOf(entityObject), propName);
|
|
535
|
-
let value = entityObject[propName];
|
|
536
|
-
let oldValue = null;
|
|
537
|
-
Object.defineProperty(entityObject, propName, {
|
|
538
|
-
get: () => { return descriptor ? descriptor.get.call(entityObject) : value; },
|
|
539
|
-
set: (v) => {
|
|
540
|
-
value = v;
|
|
541
|
-
if (oldValue != v) {
|
|
542
|
-
if (descriptor)
|
|
543
|
-
descriptor.set.call(entityObject, v);
|
|
544
|
-
if (!formGroup.changing && formGroup.controls[propName]) {
|
|
545
|
-
formGroup.controls[propName].setValue(v);
|
|
546
|
-
}
|
|
547
|
-
}
|
|
548
|
-
oldValue = v;
|
|
549
|
-
}
|
|
550
|
-
});
|
|
551
|
-
}
|
|
552
|
-
}
|
|
553
|
-
/** @type {!Array<{type: !Function, args: (undefined|!Array<?>)}>} */
|
|
554
|
-
RxFormBuilder.decorators = [
|
|
555
|
-
{ type: Injectable }
|
|
556
|
-
];
|
|
557
|
-
/**
|
|
558
|
-
* @type {function(): !Array<(null|{
|
|
559
|
-
* type: ?,
|
|
560
|
-
* decorators: (undefined|!Array<{type: !Function, args: (undefined|!Array<?>)}>),
|
|
561
|
-
* })>}
|
|
562
|
-
* @nocollapse
|
|
563
|
-
*/
|
|
564
|
-
RxFormBuilder.ctorParameters = () => [];
|
|
565
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicngtZm9ybS1idWlsZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2RrL3NyYy9saWIvZm9ybS12YWxpZGF0b3JzL3NlcnZpY2VzL3J4LWZvcm0tYnVpbGRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQzFDLE9BQU8sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBaUMsV0FBVyxFQUEwQixNQUFNLGdCQUFnQixDQUFBO0FBRXRJLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUV0RCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQTtBQUNqRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUc1RCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDcEQsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsS0FBSyxFQUFFLE1BQU0sVUFBVSxDQUFBO0FBR3RKLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMzRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSwwREFBMEQsQ0FBQztBQUN0RyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBQ25DLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQTtBQUM5RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDL0MsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFBO0FBQzdDLE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxpQkFBaUIsQ0FB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QU8sVUFBVSxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBLENBQUMsQ0FBQztZQUM1RSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRTtnQkFDUCxLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNWLElBQUksUUFBUSxJQUFJLENBQUMsRUFBRTtvQkFDZixJQUFJLFVBQVU7d0JBQ1YsVUFBVSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUN6QyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxFQUFFO3dCQUNyRCxTQUFTLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztxQkFDNUM7aUJBQ0o7Z0JBQ0QsUUFBUSxHQUFHLENBQUMsQ0FBQztZQUNqQixDQUFDO1NBQ0osQ0FBQyxDQUFBO0lBQ04sQ0FBQzs7OztZQXRqQkosVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5pbXBvcnQgeyBGb3JtR3JvdXAsIEZvcm1BcnJheSwgRm9ybUNvbnRyb2wsIFZhbGlkYXRvckZuLCBBc3luY1ZhbGlkYXRvckZuLCBGb3JtQnVpbGRlciwgQWJzdHJhY3RDb250cm9sT3B0aW9ucyB9IGZyb20gXCJAYW5ndWxhci9mb3Jtc1wiXG5pbXBvcnQgeyBUeXBlIH0gZnJvbSBcIi4uL3V0aWxcIlxuaW1wb3J0IHsgQmFzZUZvcm1CdWlsZGVyIH0gZnJvbSAnLi9iYXNlLWZvcm0tYnVpbGRlcic7XG5cbmltcG9ydCB7IFJlYWN0aXZlRm9ybUNvbmZpZyB9IGZyb20gJy4uL3V0aWwvcmVhY3RpdmUtZm9ybS1jb25maWcnXG5pbXBvcnQgeyBkZWZhdWx0Q29udGFpbmVyIH0gZnJvbSAnLi4vY29yZS9kZWZhdWx0Q29udGFpbmVyJztcbmltcG9ydCB7IERlY29yYXRvckNvbmZpZ3VyYXRpb24sIEluc3RhbmNlQ29udGFpbmVyLCBQcm9wZXJ0eUluZm8gfSBmcm9tICcuLi9jb3JlL3ZhbGlkYXRvci5pbnRlcmZhY2UnO1xuXG5pbXBvcnQgeyBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gfSBmcm9tIFwiLi4vbW9kZWxzXCJcbmltcG9ydCB7IEFSUkFZX1BST1BFUlRZLCBPQkpFQ1RfUFJPUEVSVFksIFBST1BFUlRZLCBGVU5DVElPTl9TVFJJTkcsIE9CSkVDVF9TVFJJTkcsIFJYX1dFQl9WQUxJREFUT1IsIE5VTUJFUiwgQk9PTEVBTiwgU1RSSU5HLCBNT0RFTCB9IGZyb20gXCIuLi9jb25zdFwiXG5pbXBvcnQgeyBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9IGZyb20gXCIuLi9tb2RlbHMvcHJvcC12YWxpZGF0aW9uLWNvbmZpZ1wiO1xuXG5pbXBvcnQgeyBBbm5vdGF0aW9uVHlwZXMgfSBmcm9tIFwiLi4vY29yZS92YWxpZGF0b3Iuc3RhdGljXCI7XG5pbXBvcnQgeyBjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvciB9IGZyb20gXCIuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvY29uZGl0aW9uYWwtY2hhbmdlLnZhbGlkYXRvclwiO1xuaW1wb3J0IHsgTGlucSB9IGZyb20gJy4uL3V0aWwvbGlucSdcbmltcG9ydCB7IEFQUF9WQUxJREFUT1JTIH0gZnJvbSAnLi4vY29uc3QvYXBwLXZhbGlkYXRvcnMuY29uc3QnXG5pbXBvcnQgeyBSeEZvcm1Db250cm9sIH0gZnJvbSAnLi9mb3JtLWNvbnRyb2wnO1xuaW1wb3J0IHsgUnhGb3JtR3JvdXAgfSBmcm9tICcuL3J4LWZvcm0tZ3JvdXAnXG5pbXBvcnQgeyBSeEZvcm1BcnJheSB9IGZyb20gJy4vcngtZm9ybS1hcnJheSc7XG5pbXBvcnQgeyBhbmRWYWxpZGF0b3IgfSBmcm9tICcuLi9yZWFjdGl2ZS1mb3JtLXZhbGlkYXRvcnMvYW5kLnZhbGlkYXRvcidcbmltcG9ydCB7IG9yVmFsaWRhdG9yIH0gZnJvbSAnLi4vcmVhY3RpdmUtZm9ybS12YWxpZGF0b3JzL29yLnZhbGlkYXRvcidcbmltcG9ydCB7IG5vdFZhbGlkYXRvciB9IGZyb20gJy4uL3JlYWN0aXZlLWZvcm0tdmFsaWRhdG9ycy9ub3QudmFsaWRhdG9yJ1xuaW1wb3J0IHsgQXBwRm9ybUdyb3VwIH0gZnJvbSAnLi4vbW9kZWxzL2ludGVyZmFjZS9pLWZvcm0tZ3JvdXAnXG5pbXBvcnQgeyBSZWdleFZhbGlkYXRvciB9IGZyb20gXCIuLi91dGlsL3JlZ2V4LXZhbGlkYXRvclwiO1xuaW1wb3J0IHsgZ2V0SW5zdGFuY2UgfSBmcm9tIFwiLi4vdXRpbC9pbnN0YW5jZS1wcm92aWRlci5mdW5jdGlvblwiO1xuaW1wb3J0IHsgSUFic3RyYWN0Q29udHJvbCB9IGZyb20gXCIuLi9tb2RlbHMvaW50ZXJmYWNlL2ktYWJzdHJhY3QtY29udHJvbFwiXG5jb25zdCBMT0dJQ0FMX1ZBTElEQVRPUlM6IHsgW2tleTogc3RyaW5nXTogRnVuY3Rpb24gfSA9IHsgYW5kOiBhbmRWYWxpZGF0b3IsIG9yOiBvclZhbGlkYXRvciwgbm90OiBub3RWYWxpZGF0b3IgfVxuY29uc3QgQVNZTkM6IHN0cmluZyA9IFwiYXN5bmNcIlxuY29uc3QgRU5USVRZX09CSkVDVDogc3RyaW5nID0gXCJlbnRpdHlPYmplY3RcIjtcbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBSeEZvcm1CdWlsZGVyIGV4dGVuZHMgQmFzZUZvcm1CdWlsZGVyIHtcbiAgICBwcml2YXRlIG5lc3RlZFByb3A6IHN0cmluZztcbiAgICBwcml2YXRlIGNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBjb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZTogYW55ID0ge307XG4gICAgcHJpdmF0ZSBidWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHM6IGFueVtdID0gW107XG4gICAgcHJpdmF0ZSBmb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3I6IHsgW2tleTogc3RyaW5nXTogYW55IH0gPSB7fTtcbiAgICBwcml2YXRlIGlzTmVzdGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc0dyb3VwQ2FsbGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgcHJpdmF0ZSBpc05lc3RlZEJpbmRpbmc6IGJvb2xlYW4gPSBmYWxzZTtcblxuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICBzdXBlcigpO1xuICAgIH1cblxuXG5cbiAgICBwcml2YXRlIGdldEluc3RhbmNlQ29udGFpbmVyKGluc3RhbmNlRnVuYzogYW55LCBlbnRpdHlPYmplY3Q6IGFueSk6IEluc3RhbmNlQ29udGFpbmVyIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuaW5zdGFjZVByb3ZpZGVyKGluc3RhbmNlRnVuYywgZW50aXR5T2JqZWN0KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHNldFZhbHVlKGZvcm1Hcm91cDogRm9ybUdyb3VwLCBvYmplY3Q6IGFueSk6IHZvaWQge1xuICAgICAgICBmb3IgKHZhciBjb2wgaW4gb2JqZWN0KSB7XG4gICAgICAgICAgICB2YXIgY29udHJvbCA9IGZvcm1Hcm91cC5nZXQoW2NvbF0pO1xuICAgICAgICAgICAgY29udHJvbC5zZXRWYWx1ZShvYmplY3RbY29sXSk7XG4gICAgICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZXh0cmFjdEV4cHJlc3Npb25zKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogeyBba2V5OiBzdHJpbmddOiBzdHJpbmdbXSB9IHtcbiAgICAgICAgaWYgKGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb24pIHtcbiAgICAgICAgICAgIGZvciAodmFyIHByb3BlcnR5IGluIGZvbXJCdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbikge1xuICAgICAgICAgICAgICAgIGZvciAodmFyIGRlY29yYXRvciBpbiBmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChmb21yQnVpbGRlckNvbmZpZ3VyYXRpb24uZHluYW1pY1ZhbGlkYXRpb25bcHJvcGVydHldW2RlY29yYXRvcl0uY29uZGl0aW9uYWxFeHByZXNzaW9uKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29sdW1ucyA9IExpbnEuZXhwcmVzc2lvbkNvbHVtbnMoZm9tckJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uW3Byb3BlcnR5XVtkZWNvcmF0b3JdLmNvbmRpdGlvbmFsRXhwcmVzc2lvbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmFkZENoYW5nZVZhbGlkYXRpb24odGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZSwgcHJvcGVydHksIGNvbHVtbnMpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkQXN5bmNWYWxpZGF0aW9uKHByb3BlcnR5OiBQcm9wZXJ0eUluZm8sIHByb3BlcnR5VmFsaWRhdG9yczogRGVjb3JhdG9yQ29uZmlndXJhdGlvbltdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcpIHtcbiAgICAgICAgbGV0IGFzeW5jVmFsaWRhdG9ycyA9IFtdO1xuICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBwcm9wZXJ0eVZhbGlkYXRvciBvZiBwcm9wZXJ0eVZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAocHJvcGVydHlWYWxpZGF0b3IuaXNBc3luYylcbiAgICAgICAgICAgICAgICAgICAgcHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLmZvckVhY2godCA9PiB7IGFzeW5jVmFsaWRhdG9ycy5wdXNoKHQpIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmIChwcm9wVmFsaWRhdGlvbkNvbmZpZyAmJiBwcm9wVmFsaWRhdGlvbkNvbmZpZ1tBU1lOQ10pIHtcbiAgICAgICAgICAgIHByb3BWYWxpZGF0aW9uQ29uZmlnW0FTWU5DXS5mb3JFYWNoKHQgPT4geyBhc3luY1ZhbGlkYXRvcnMucHVzaCh0KSB9KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhc3luY1ZhbGlkYXRvcnM7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBhZGRGb3JtQ29udHJvbChwcm9wZXJ0eTogUHJvcGVydHlJbmZvLCBwcm9wZXJ0eVZhbGlkYXRvcnM6IERlY29yYXRvckNvbmZpZ3VyYXRpb25bXSwgcHJvcFZhbGlkYXRpb25Db25maWc6IFByb3BWYWxpZGF0aW9uQ29uZmlnLCBpbnN0YW5jZTogSW5zdGFuY2VDb250YWluZXIsIGVudGl0eTogYW55KSB7XG4gICAgICAgIGxldCB2YWxpZGF0b3JzID0gW107XG4gICAgICAgIGxldCBjb2x1bW5zID0gW107XG4gICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pIHx8ICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKSB7XG4gICAgICAgICAgICBsZXQgcHJvcHMgPSBbXTtcbiAgICAgICAgICAgIGlmICgoaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNbcHJvcGVydHkubmFtZV0pKVxuICAgICAgICAgICAgICAgIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKVxuICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1twcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzW3Byb3BlcnR5Lm5hbWVdLmZvckVhY2godCA9PiBwcm9wcy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChjb25kaXRpb25hbENoYW5nZVZhbGlkYXRvcihwcm9wcykpO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMubGVuZ3RoID4gMCB8fCB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5sZW5ndGggPiAwKSB7XG4gICAgICAgICAgICBsZXQgcHJvcENvbmRpdGlvbnMgPSBbXTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgcHJvcENvbmRpdGlvbnMgPSB0aGlzLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5wcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcy5maWx0ZXIodCA9PiB0LnByb3BOYW1lID09IHByb3BlcnR5Lm5hbWUpLmZvckVhY2godCA9PiBwcm9wQ29uZGl0aW9ucy5wdXNoKHQpKTtcbiAgICAgICAgICAgIHByb3BDb25kaXRpb25zLmZvckVhY2godCA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHQucmVmZXJlbmNlUHJvcE5hbWUgJiYgY29sdW1ucy5pbmRleE9mKHQucmVmZXJlbmNlUHJvcE5hbWUpID09IC0xKVxuICAgICAgICAgICAgICAgICAgICBjb2x1bW5zLnB1c2godC5yZWZlcmVuY2VQcm9wTmFtZSk7XG4gICAgICAgICAgICB9KVxuICAgICAgICAgICAgaWYgKGNvbHVtbnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JzLnB1c2goY29uZGl0aW9uYWxDaGFuZ2VWYWxpZGF0b3IoY29sdW1ucykpO1xuICAgICAgICB9XG4gICAgICAgIGZvciAobGV0IHByb3BlcnR5VmFsaWRhdG9yIG9mIHByb3BlcnR5VmFsaWRhdG9ycykge1xuICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eVZhbGlkYXRvci5pc0FzeW5jKVxuICAgICAgICAgICAgICAgIHN3aXRjaCAocHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMucnVsZTpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnLCBlbnRpdHkpKVxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLmFuZDpcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBbm5vdGF0aW9uVHlwZXMub3I6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgQW5ub3RhdGlvblR5cGVzLm5vdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChMT0dJQ0FMX1ZBTElEQVRPUlNbcHJvcGVydHlWYWxpZGF0b3IuYW5ub3RhdGlvblR5cGVdKHByb3BlcnR5VmFsaWRhdG9yLmNvbmZpZykpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbGlkYXRvcnMucHVzaChBUFBfVkFMSURBVE9SU1twcm9wZXJ0eVZhbGlkYXRvci5hbm5vdGF0aW9uVHlwZV0ocHJvcGVydHlWYWxpZGF0b3IuY29uZmlnKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcFZhbGlkYXRpb25Db25maWcpXG4gICAgICAgICAgICB0aGlzLmFkZGl0aW9uYWxWYWxpZGF0aW9uKHZhbGlkYXRvcnMsIHByb3BWYWxpZGF0aW9uQ29uZmlnKTtcbiAgICAgICAgaWYgKHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXS5mb3JFYWNoKHQgPT4geyB2YWxpZGF0b3JzLnB1c2godCk7IH0pXG4gICAgICAgIHJldHVybiB2YWxpZGF0b3JzO1xuICAgIH1cblxuICAgIHByaXZhdGUgYWRkaXRpb25hbFZhbGlkYXRpb24odmFsaWRhdGlvbnM6IGFueVtdLCBwcm9wVmFsaWRhdGlvbkNvbmZpZzogUHJvcFZhbGlkYXRpb25Db25maWcgfCBhbnkpIHtcbiAgICAgICAgZm9yICh2YXIgY29sIGluIEFubm90YXRpb25UeXBlcykge1xuICAgICAgICAgICAgaWYgKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSAmJiBjb2wgIT0gXCJjdXN0b21cIikge1xuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2goQVBQX1ZBTElEQVRPUlNbQW5ub3RhdGlvblR5cGVzW2NvbF1dKHByb3BWYWxpZGF0aW9uQ29uZmlnW0Fubm90YXRpb25UeXBlc1tjb2xdXSkpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sID09IEFubm90YXRpb25UeXBlcy5jdXN0b20gJiYgcHJvcFZhbGlkYXRpb25Db25maWdbQW5ub3RhdGlvblR5cGVzW2NvbF1dKVxuICAgICAgICAgICAgICAgIHZhbGlkYXRpb25zLnB1c2gocHJvcFZhbGlkYXRpb25Db25maWdbY29sXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwcml2YXRlIGdldEVudGl0eTxUPihvYmplY3Q6IFQsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNTYW1lT2JqZWN0Q29uc3RydWN0b3I6IGJvb2xlYW4gPSBmYWxzZSkge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmdlbmVyaWNFbnRpdGllc1twcm9wZXJ0eU5hbWVdKVxuICAgICAgICAgICAgcmV0dXJuIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5nZW5lcmljRW50aXRpZXNbcHJvcGVydHlOYW1lXTtcbiAgICAgICAgcmV0dXJuIGlzU2FtZU9iamVjdENvbnN0cnVjdG9yID8gb2JqZWN0LmNvbnN0cnVjdG9yIDogdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0T2JqZWN0UHJvcGVydHlJbnN0YW5jZShvYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIHByb3BlcnR5SW5mbzogUHJvcGVydHlJbmZvLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICBpZiAocHJvcGVydHlJbmZvLnByb3BlcnR5VHlwZSA9PSBPQkpFQ1RfUFJPUEVSVFkgJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXSlcbiAgICAgICAgICAgIHJldHVybiBvYmplY3RbcHJvcGVydHlJbmZvLm5hbWVdLmNvbnN0cnVjdG9yO1xuICAgICAgICBlbHNlIGlmIChwcm9wZXJ0eUluZm8ucHJvcGVydHlUeXBlID09IEFSUkFZX1BST1BFUlRZICYmIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV0gJiYgb2JqZWN0W3Byb3BlcnR5SW5mby5uYW1lXS5sZW5ndGggPiAwKVxuICAgICAgICAgICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eUluZm8ubmFtZV1bMF0uY29uc3RydWN0b3I7XG4gICAgICAgIHJldHVybiB0aGlzLmdldEVudGl0eShvYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgcHJvcGVydHlJbmZvLm5hbWUpXG5cbiAgICB9XG5cbiAgICBwcml2YXRlIGNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uPFQ+KGluc3RhbmNlQ29udGFpbmVyOiBJbnN0YW5jZUNvbnRhaW5lciwgb2JqZWN0OiBULCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbikge1xuICAgICAgICB2YXIgcHJvcHMgPSBpbnN0YW5jZUNvbnRhaW5lci5wcm9wZXJ0aWVzLmZpbHRlcih0ID0+IHQucHJvcGVydHlUeXBlID09IE9CSkVDVF9QUk9QRVJUWSB8fCB0LnByb3BlcnR5VHlwZSA9PSBBUlJBWV9QUk9QRVJUWSlcbiAgICAgICAgcHJvcHMuZm9yRWFjaCh0ID0+IHtcbiAgICAgICAgICAgIGxldCBlbnRpdHkgPSB0LmVudGl0eTtcbiAgICAgICAgICAgIGlmICghdC5lbnRpdHkpXG4gICAgICAgICAgICAgICAgZW50aXR5ID0gdGhpcy5nZXRPYmplY3RQcm9wZXJ0eUluc3RhbmNlKG9iamVjdCwgdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAgaWYgKGVudGl0eSkge1xuICAgICAgICAgICAgICAgIGxldCBpbnN0YW5jZSA9IHRoaXMuZ2V0SW5zdGFuY2VDb250YWluZXIoZW50aXR5LCBudWxsKTtcbiAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIga2V5IGluIGluc3RhbmNlLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcHJvcCA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZmlsdGVyKHQgPT4gdC5uYW1lID09IGtleSlbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsVmFsaWRhdGlvblByb3BzID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdGFuY2UuY29uZGl0aW9uYWxWYWxpZGF0aW9uUHJvcHNba2V5XS5mb3JFYWNoKHggPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodC5wcm9wZXJ0eVR5cGUgIT0gQVJSQVlfUFJPUEVSVFkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignLicpKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0YW5jZUNvbnRhaW5lci5jb25kaXRpb25hbFZhbGlkYXRpb25Qcm9wc1trZXldLnB1c2goW3QubmFtZSwgeF0uam9pbignW10nKSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmplY3QobW9kZWw6IGFueSB8IHsgW2tleTogc3RyaW5nXTogYW55IH0sIGVudGl0eU9iamVjdD86IHsgW2tleTogc3RyaW5nXTogYW55IH0gfCBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbj86IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik6IHsgW2tleTogc3RyaW5nXTogYW55IH0ge1xuICAgICAgICBsZXQganNvbjogeyBba2V5OiBzdHJpbmddOiBhbnkgfSA9IHt9O1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HKVxuICAgICAgICAgICAganNvbi5tb2RlbCA9IG1vZGVsO1xuXG4gICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gRlVOQ1RJT05fU1RSSU5HICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKSB7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwgZW50aXR5T2JqZWN0KVxuICAgICAgICB9XG4gICAgICAgIGlmIChlbnRpdHlPYmplY3QgJiYgIShlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pKVxuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSBlbnRpdHlPYmplY3Q7XG5cbiAgICAgICAgaWYgKGVudGl0eU9iamVjdCBpbnN0YW5jZW9mIEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiAhZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKVxuICAgICAgICAgICAganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBlbnRpdHlPYmplY3Q7XG4gICAgICAgIGVsc2UgaWYgKCEoZW50aXR5T2JqZWN0IGluc3RhbmNlb2YgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgICAgIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uO1xuICAgICAgICAgICAganNvbi5lbnRpdHlPYmplY3QgPSB0aGlzLmNyZWF0ZUNsYXNzT2JqZWN0KGpzb24ubW9kZWwsIGpzb24uZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBqc29uLmVudGl0eU9iamVjdClcbiAgICAgICAgfVxuXG5cbiAgICAgICAgaWYgKCFlbnRpdHlPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORylcbiAgICAgICAgICAgICAgICBqc29uLm1vZGVsID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMuY3JlYXRlQ2xhc3NPYmplY3QoanNvbi5tb2RlbCwganNvbi5mb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIG1vZGVsKVxuICAgICAgICB9IGVsc2UgaWYgKG1vZGVsICYmIChlbnRpdHlPYmplY3QgaW5zdGFuY2VvZiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pICYmICh0eXBlb2YgbW9kZWwgPT0gT0JKRUNUX1NUUklORykpIHtcbiAgICAgICAgICAgIGpzb25bTU9ERUxdID0gbW9kZWwuY29uc3RydWN0b3I7XG4gICAgICAgICAgICBqc29uW0VOVElUWV9PQkpFQ1RdID0gdGhpcy5jcmVhdGVDbGFzc09iamVjdChqc29uLm1vZGVsLCBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgbW9kZWwpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGpzb247XG4gICAgfVxuXG5cblxuICAgIGNvbnRyb2wodmFsdWU/OiBhbnksIHZhbGlkYXRvcnM/OiBWYWxpZGF0b3JGbltdLCBhc3luY1ZhbGlkYXRvcnM/OiBBc3luY1ZhbGlkYXRvckZuW10pOiBJQWJzdHJhY3RDb250cm9sIHtcbiAgICAgICAgcmV0dXJuIG5ldyBSeEZvcm1Db250cm9sKHZhbHVlLCB2YWxpZGF0b3JzLCBhc3luY1ZhbGlkYXRvcnMsIHt9LCB7fSwgJycsIFtdKTtcbiAgICB9XG5cbiAgICBhcnJheSh2YWx1ZXM6IFt7IFtrZXk6IHN0cmluZ106IGFueSB9XSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICAgIGxldCBmb3JtQXJyYXkgPSB0aGlzLmdyb3VwKHsgdGVtcDogdmFsdWVzIH0sIHZhbGlkYXRvckNvbmZpZykuZ2V0KFwidGVtcFwiKSBhcyBGb3JtQXJyYXk7XG4gICAgICAgIHZhciBmb3JtQnVpbGRlciA9IG5ldyBGb3JtQnVpbGRlcigpO1xuICAgICAgICByZXR1cm4gZm9ybUJ1aWxkZXIuYXJyYXkoZm9ybUFycmF5LmNvbnRyb2xzKTtcbiAgICB9XG5cbiAgICBncm91cChncm91cE9iamVjdDogeyBba2V5OiBzdHJpbmddOiBhbnkgfSwgdmFsaWRhdG9yQ29uZmlnPzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTogRm9ybUdyb3VwIHtcbiAgICAgICAgbGV0IG1vZGVsSW5zdGFuY2UgPSBzdXBlci5jcmVhdGVJbnN0YW5jZSgpO1xuICAgICAgICBsZXQgZW50aXR5T2JqZWN0ID0ge307XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLmNyZWF0ZVZhbGlkYXRvckZvcm1Hcm91cChncm91cE9iamVjdCwgZW50aXR5T2JqZWN0LCBtb2RlbEluc3RhbmNlLCB2YWxpZGF0b3JDb25maWcpO1xuICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3IgPSB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcjtcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gdHJ1ZTtcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IHRoaXMuZm9ybUdyb3VwKG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IsIGVudGl0eU9iamVjdCwgdmFsaWRhdG9yQ29uZmlnKTtcbiAgICAgICAgdGhpcy5pc0dyb3VwQ2FsbGVkID0gZmFsc2U7XG4gICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0ge307XG4gICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yO1xuICAgICAgICB0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHt9O1xuICAgICAgICByZXR1cm4gZm9ybUdyb3VwO1xuICAgIH1cblxuICAgIHByaXZhdGUgYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lOiBzdHJpbmcsIHZhbGlkYXRvckNvbmZpZzogRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBtb2RlbEluc3RhbmNlOiBhbnkpIHtcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZyAmJiB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcykge1xuICAgICAgICAgICAgaWYgKCEodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcyAmJiB2YWxpZGF0b3JDb25maWcuZXhjbHVkZVByb3BzLmxlbmd0aCA+IDAgJiYgdmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcy5pbmRleE9mKHByb3BOYW1lKSA9PSAtMSkpIHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0b3JDb25maWcuYXBwbHlBbGxQcm9wcy5mb3JFYWNoKCh0OiBhbnkpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHQubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0KHByb3BOYW1lLCBtb2RlbEluc3RhbmNlKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCF0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0gPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wTmFtZV0ucHVzaCh0KVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWU6IHN0cmluZywgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgcmV0dXJuICh2YWxpZGF0b3JDb25maWcgPT0gdW5kZWZpbmVkKSA/IHRydWUgOiAoIXZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUpID8gdHJ1ZSA6IHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgPT0gcHJvcE5hbWUgPyBmYWxzZSA6IHRydWU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc05vdE9iamVjdCh2YWx1ZSkge1xuICAgICAgICByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBEYXRlIHx8IHZhbHVlID09PSBudWxsIHx8IHR5cGVvZiB2YWx1ZSAhPSBPQkpFQ1RfU1RSSU5HO1xuICAgIH1cblxuICAgIHByaXZhdGUgY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q6IHsgW2tleTogc3RyaW5nXTogYW55IH0sIG1vZGVsSW5zdGFuY2U6IGFueSwgdmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pIHtcbiAgICAgICAgZm9yICh2YXIgcHJvcE5hbWUgaW4gZ3JvdXBPYmplY3QpIHtcblxuICAgICAgICAgICAgdmFyIHByb3AgPSBncm91cE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5ICYmIHByb3AubGVuZ3RoID4gMCAmJiB0aGlzLmlzTm90T2JqZWN0KHByb3BbMF0pKSB7XG4gICAgICAgICAgICAgICAgbGV0IHByb3BWYWxpZGF0b3JzID0gKHByb3AubGVuZ3RoID4gMSAmJiBwcm9wWzFdIGluc3RhbmNlb2YgQXJyYXkpID8gcHJvcFsxXSA6IChwcm9wLmxlbmd0aCA9PSAyKSA/IFtwcm9wWzFdXSA6IFtdO1xuICAgICAgICAgICAgICAgIGxldCBwcm9wZXJ0eUFkZGVkOiBib29sZWFuID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBwcm9wVmFsaWRhdG9ycy5sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJvcFZhbGlkYXRvcnNbaV0ubmFtZSA9PSBSWF9XRUJfVkFMSURBVE9SKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wVmFsaWRhdG9yc1tpXShwcm9wTmFtZSwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eUFkZGVkID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN1cnJlbnRGb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdLnB1c2gocHJvcFZhbGlkYXRvcnNbaV0pXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCFwcm9wZXJ0eUFkZGVkKVxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgdHlwZW9mIG1vZGVsSW5zdGFuY2UgPT0gT0JKRUNUX1NUUklORyA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xuICAgICAgICAgICAgICAgIHRoaXMuYXBwbHlBbGxQcm9wVmFsaWRhdG9yKHByb3BOYW1lLCB2YWxpZGF0b3JDb25maWcsIG1vZGVsSW5zdGFuY2UpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHByb3AgPT09IG51bGwgfHwgcHJvcCA9PT0gdW5kZWZpbmVkIHx8IHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBQUk9QRVJUWSwgdW5kZWZpbmVkLCB0eXBlb2YgbW9kZWxJbnN0YW5jZSA9PSBPQkpFQ1RfU1RSSU5HID8gbW9kZWxJbnN0YW5jZSA6IHsgY29uc3RydWN0b3I6IG1vZGVsSW5zdGFuY2UgfSk7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUFsbFByb3BWYWxpZGF0b3IocHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZywgbW9kZWxJbnN0YW5jZSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEFycmF5KSB7XG4gICAgICAgICAgICAgICAgaWYgKHByb3AgaW5zdGFuY2VvZiBGb3JtQXJyYXkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBtb2RlbEluc3RhbmNlID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPSBtb2RlbEluc3RhbmNlO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIHByb3BNb2RlbEluc3RhbmNlLmNvbnN0cnVjdG9yLCBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCByb3cgb2YgcHJvcCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGpPYmplY3QgPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0ucHVzaChqT2JqZWN0KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVWYWxpZGF0b3JGb3JtR3JvdXAocm93LCBqT2JqZWN0LCBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciwgdmFsaWRhdG9yQ29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwcm9wID09IE9CSkVDVF9TVFJJTkcgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUNvbnRyb2wgfHwgcHJvcCBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XG5cbiAgICAgICAgICAgICAgICBsZXQgZm9ybUdyb3VwOiBhbnkgPSAocHJvcCBpbnN0YW5jZW9mIEZvcm1BcnJheSkgPyBwcm9wLmNvbnRyb2xzWzBdIDogcHJvcFxuICAgICAgICAgICAgICAgIGlmICghZm9ybUdyb3VwLm1vZGVsICYmIChwcm9wIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Hcm91cCkpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwID0gdGhpcy5ncm91cChmb3JtR3JvdXAuY29udHJvbHMpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApIHtcbiAgICAgICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3A7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wO1xuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgQVJSQVlfUFJPUEVSVFksIGZvcm1Hcm91cC5tb2RlbCwgbW9kZWxJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuZHluYW1pY1ZhbGlkYXRpb25Qcm9wQ2hlY2socHJvcE5hbWUsIHZhbGlkYXRvckNvbmZpZykpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BOYW1lXSA9IHt9O1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdXJyZW50Rm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yID0gdGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BNb2RlbEluc3RhbmNlID0gc3VwZXIuY3JlYXRlSW5zdGFuY2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSB7fTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IgPSBwcm9wTW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvcjtcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRDb250YWluZXIuaW5pdFByb3BlcnR5T2JqZWN0KHByb3BOYW1lLCBPQkpFQ1RfUFJPUEVSVFksIGVudGl0eU9iamVjdFtwcm9wTmFtZV0uY29uc3RydWN0b3IsIG1vZGVsSW5zdGFuY2UuY29uc3RydWN0b3IgPT0gRnVuY3Rpb24gPyB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0gOiBtb2RlbEluc3RhbmNlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnLCBncm91cE9iamVjdCwgcHJvcE5hbWUgKyBcIi5cIilcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlVmFsaWRhdG9yRm9ybUdyb3VwKGdyb3VwT2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSwgZW50aXR5T2JqZWN0W3Byb3BOYW1lXS5jb25zdHJ1Y3Rvciwgb2JqZWN0VmFsaWRhdGlvbkNvbmZpZyk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gZ3JvdXBPYmplY3RbcHJvcE5hbWVdO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHR5cGVvZiBwcm9wID09IFNUUklORyB8fCB0eXBlb2YgcHJvcCA9PSBOVU1CRVIgfHwgdHlwZW9mIHByb3AgPT0gQk9PTEVBTiB8fCBwcm9wIGluc3RhbmNlb2YgRGF0ZSkge1xuICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wTmFtZV0gPSBwcm9wXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmICgocHJvcCAmJiBwcm9wLmxlbmd0aCA+IDAgJiYgdGhpcy5pc05vdE9iamVjdChwcm9wWzBdKSAmJiAhKHByb3AgaW5zdGFuY2VvZiBGb3JtQ29udHJvbCB8fCBwcm9wIGluc3RhbmNlb2YgUnhGb3JtQ29udHJvbCkgJiYgIShwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSkpIHtcbiAgICAgICAgICAgICAgICBlbnRpdHlPYmplY3RbcHJvcE5hbWVdID0gcHJvcFswXVxuICAgICAgICAgICAgfSBlbHNlIGlmIChwcm9wIGluc3RhbmNlb2YgRm9ybUFycmF5KSB7XG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocHJvcCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IHByb3AgaW5zdGFuY2VvZiBSeEZvcm1Db250cm9sKSB7XG4gICAgICAgICAgICAgICAgZW50aXR5T2JqZWN0W3Byb3BOYW1lXSA9IHByb3BcbiAgICAgICAgICAgICAgICBkZWZhdWx0Q29udGFpbmVyLmluaXRQcm9wZXJ0eU9iamVjdChwcm9wTmFtZSwgUFJPUEVSVFksIHVuZGVmaW5lZCwgbW9kZWxJbnN0YW5jZS5jb25zdHJ1Y3RvciA/IG1vZGVsSW5zdGFuY2UgOiB7IGNvbnN0cnVjdG9yOiBtb2RlbEluc3RhbmNlIH0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRWYWxpZGF0b3JDb25maWcodmFsaWRhdG9yQ29uZmlnOiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIGVudGl0eU9iamVjdDogYW55LCByb290UHJvcGVydHlOYW1lOiBzdHJpbmcsIGFycmF5UHJvcGVydHlOYW1lPzogc3RyaW5nKTogYW55IHtcbiAgICAgICAgbGV0IGV4Y2x1ZGVQcm9wcyA9IFtdO1xuICAgICAgICBsZXQgaW5jbHVkZVByb3BzID0gW107XG4gICAgICAgIGxldCBpZ25vcmVVbmRlZmluZWRQcm9wcyA9IFtdO1xuXG4gICAgICAgIGlmICghdmFsaWRhdG9yQ29uZmlnKSByZXR1cm4ge307XG5cbiAgICAgICAgY29uc3QgdmFsaWRhdGlvblByb3BzID0gdGhpcy5nZXRPYmplY3RGb3JQcm9wZXJ0eSh2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb24sIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcbiAgICAgICAgY29uc3QgYWJzdHJhY3RDb250cm9sT3B0aW9ucyA9IHRoaXMuZ2V0T2JqZWN0Rm9yUHJvcGVydHkodmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMsIHJvb3RQcm9wZXJ0eU5hbWUsIGFycmF5UHJvcGVydHlOYW1lKTtcblxuICAgICAgICBpZiAodmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcylcbiAgICAgICAgICAgIGV4Y2x1ZGVQcm9wcyA9IHRoaXMuZ2V0UHJvcHModmFsaWRhdG9yQ29uZmlnLmV4Y2x1ZGVQcm9wcywgcm9vdFByb3BlcnR5TmFtZSk7XG4gICAgICAgIGlmICh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzKVxuICAgICAgICAgICAgaW5jbHVkZVByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaW5jbHVkZVByb3BzLCByb290UHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKHZhbGlkYXRvckNvbmZpZy5pZ25vcmVVbmRlZmluZWRQcm9wcylcbiAgICAgICAgICAgIGlnbm9yZVVuZGVmaW5lZFByb3BzID0gdGhpcy5nZXRQcm9wcyh2YWxpZGF0b3JDb25maWcuaWdub3JlVW5kZWZpbmVkUHJvcHMsIHJvb3RQcm9wZXJ0eU5hbWUsIHRydWUpO1xuICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGFic3RyYWN0Q29udHJvbE9wdGlvbnMpLmxlbmd0aCAmJiByb290UHJvcGVydHlOYW1lLmVuZHNXaXRoKCcuJykgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnMgJiYgdmFsaWRhdG9yQ29uZmlnLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbcm9vdFByb3BlcnR5TmFtZS5zdWJzdHJpbmcoMCwgcm9vdFByb3BlcnR5TmFtZS5sZW5ndGggLSAxKV0pXG4gICAgICAgICAgICBhYnN0cmFjdENvbnRyb2xPcHRpb25zWydnbG9iYWwnXSA9IHZhbGlkYXRvckNvbmZpZy5hYnN0cmFjdENvbnRyb2xPcHRpb25zW3Jvb3RQcm9wZXJ0eU5hbWUuc3Vic3RyaW5nKDAsIHJvb3RQcm9wZXJ0eU5hbWUubGVuZ3RoIC0gMSldO1xuXG4gICAgICAgIGNvbnN0IGR5bmFtaWNWYWxpZGF0aW9uID0gKHZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWUgJiYgZW50aXR5T2JqZWN0W3ZhbGlkYXRvckNvbmZpZy5keW5hbWljVmFsaWRhdGlvbkNvbmZpZ3VyYXRpb25Qcm9wZXJ0eU5hbWVdKSA/IGVudGl0eU9iamVjdFt2YWxpZGF0b3JDb25maWcuZHluYW1pY1ZhbGlkYXRpb25Db25maWd1cmF0aW9uUHJvcGVydHlOYW1lXSA6IHZhbGlkYXRpb25Qcm9wcztcbiAgICAgICAgcmV0dXJuIHsgaWdub3JlVW5kZWZpbmVkUHJvcHM6IGlnbm9yZVVuZGVmaW5lZFByb3BzLCBpbmNsdWRlUHJvcHM6IGluY2x1ZGVQcm9wcywgZHluYW1pY1ZhbGlkYXRpb246IGR5bmFtaWNWYWxpZGF0aW9uLCBleGNsdWRlUHJvcHM6IGV4Y2x1ZGVQcm9wcywgYWJzdHJhY3RDb250cm9sT3B0aW9uczogYWJzdHJhY3RDb250cm9sT3B0aW9ucyB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBnZXRPYmplY3RGb3JQcm9wZXJ0eTxUPihyb290T2JqZWN0OiB7IFtrZXk6IHN0cmluZ106IFQgfSwgcm9vdFByb3BlcnR5TmFtZTogc3RyaW5nLCBhcnJheVByb3BlcnR5TmFtZT86IHN0cmluZyk6IHsgW2tleTogc3RyaW5nXTogVCB9IHtcbiAgICAgICAgY29uc3QgcmVzdWx0OiB7IFtrZXk6IHN0cmluZ106IFQgfSA9IHt9O1xuXG4gICAgICAgIGZvciAobGV0IHByb3BOYW1lIGluIHJvb3RPYmplY3QpIHtcbiAgICAgICAgICAgIGlmICghcHJvcE5hbWUuc3RhcnRzV2l0aChyb290UHJvcGVydHlOYW1lKSAmJiAoIWFycmF5UHJvcGVydHlOYW1lIHx8ICFwcm9wTmFtZS5zdGFydHNXaXRoKGFycmF5UHJvcGVydHlOYW1lKSkpXG4gICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgbGV0IHNwbGl0UHJvcCA9IHByb3BOYW1lLnNwbGl0KFwiLlwiLCAyKVsxXTtcbiAgICAgICAgICAgIGlmICghc3BsaXRQcm9wKVxuICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHJlc3VsdFtzcGxpdFByb3BdID0gcm9vdE9iamVjdFtwcm9wTmFtZV07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcmVzdWx0O1xuICAgIH1cblxuICAgIHByaXZhdGUgZ2V0UHJvcHMocHJvcGVydGllczogc3RyaW5nW10sIHJvb3RQcm9wZXJ0eU5hbWU6IHN0cmluZywgaXNJZ25vcmVQcm9wOiBib29sZWFuID0gZmFsc2UpIHtcbiAgICAgICAgbGV0IHByb3BzOiBzdHJpbmdbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBwcm9wIG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgIGlmIChwcm9wLmluZGV4T2Yocm9vdFByb3BlcnR5TmFtZSkgIT0gLTEpIHtcbiAgICAgICAgICAgICAgICBsZXQgc3BsaXRQcm9wcyA9IHByb3Auc3BsaXQoXCIuXCIpO1xuICAgICAgICAgICAgICAgIGlmIChzcGxpdFByb3BzLmxlbmd0aCA9PSAyKSB7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wc1sxXSk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChzcGxpdFByb3BzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgICAgICAgICAgICAgc3BsaXRQcm9wcy5zcGxpY2UoMCwgMSk7XG4gICAgICAgICAgICAgICAgICAgIHByb3BzLnB1c2goc3BsaXRQcm9wcy5qb2luKFwiLlwiKSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGlzSWdub3JlUHJvcCAmJiBwcm9wZXJ0aWVzLmZpbHRlcih4ID0+IHggPT0gcm9vdFByb3BlcnR5TmFtZS5yZXBsYWNlKCcuJywgJycpKS5sZW5ndGggPT0gMSlcbiAgICAgICAgICAgIHByb3BzLnB1c2goJzpzZWxmOicpO1xuXG4gICAgICAgIHJldHVybiBwcm9wcztcbiAgICB9XG5cbiAgICBmb3JtR3JvdXA8VD4obW9kZWw6IFR5cGU8VD4gfCB7IFtrZXk6IHN0cmluZ106IGFueSB9LCBlbnRpdHlPYmplY3Q/OiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHwgRm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24/OiBGb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24pOiBSeEZvcm1Hcm91cCB8IEZvcm1Hcm91cCB8IEFwcEZvcm1Hcm91cDxUPiB7XG4gICAgICAgIGxldCBqc29uID0gdGhpcy5nZXRPYmplY3QobW9kZWwsIGVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgbW9kZWwgPSBqc29uLm1vZGVsO1xuICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdDtcbiAgICAgICAgaWYgKGVudGl0eU9iamVjdC5jb25zdHJ1Y3RvciAhPSBtb2RlbCAmJiAhdGhpcy5pc0dyb3VwQ2FsbGVkKSB7XG4gICAgICAgICAgICBlbnRpdHlPYmplY3QgPSBqc29uLmVudGl0eU9iamVjdCA9IHRoaXMudXBkYXRlT2JqZWN0KG1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgfVxuICAgICAgICBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24gPSBqc29uLmZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbjtcbiAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbilcbiAgICAgICAgICAgIHRoaXMuZXh0cmFjdEV4cHJlc3Npb25zKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBpbnN0YW5jZUNvbnRhaW5lcjogSW5zdGFuY2VDb250YWluZXIgPSB0aGlzLmdldEluc3RhbmNlQ29udGFpbmVyKG1vZGVsLCBlbnRpdHlPYmplY3QpO1xuICAgICAgICB0aGlzLmNoZWNrT2JqZWN0UHJvcEFkZGl0aW9uYWxWYWxpZGF0aW9uKGluc3RhbmNlQ29udGFpbmVyLCBlbnRpdHlPYmplY3QsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbik7XG4gICAgICAgIGxldCBmb3JtR3JvdXBPYmplY3QgPSB7fTtcbiAgICAgICAgbGV0IGV4dGVuZGVkUHJvcGVydGllcyA9IHt9O1xuICAgICAgICBsZXQgZm9ybUNoaWxkR3JvdXAgPSB1bmRlZmluZWQ7XG4gICAgICAgIGxldCBmb3JtQXJyYXlHcm91cCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGFkZGl0aW9uYWxWYWxpZGF0aW9uczogeyBba2V5OiBzdHJpbmddOiBQcm9wVmFsaWRhdGlvbkNvbmZpZyB9ID0ge307XG4gICAgICAgIGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnRpZXMuZm9yRWFjaChwcm9wZXJ0eSA9PiB7XG4gICAgICAgICAgICBsZXQgaXNJbmNsdWRlUHJvcCA9IHRydWU7XG4gICAgICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSB7XG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5leGNsdWRlUHJvcHMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcy5sZW5ndGggPiAwKVxuICAgICAgICAgICAgICAgICAgICBpc0luY2x1ZGVQcm9wID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmV4Y2x1ZGVQcm9wcy5pbmRleE9mKHByb3BlcnR5Lm5hbWUpID09IC0xXG4gICAgICAgICAgICAgICAgaWYgKGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5keW5hbWljVmFsaWRhdGlvbilcbiAgICAgICAgICAgICAgICAgICAgYWRkaXRpb25hbFZhbGlkYXRpb25zID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmR5bmFtaWNWYWxpZGF0aW9uO1xuICAgICAgICAgICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaW5jbHVkZVByb3BzICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pbmNsdWRlUHJvcHMuaW5kZXhPZihwcm9wZXJ0eS5uYW1lKSAhPSAtMVxuICAgICAgICAgICAgICAgIGlmIChmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uaWdub3JlVW5kZWZpbmVkUHJvcHMgJiYgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmlnbm9yZVVuZGVmaW5lZFByb3BzLmxlbmd0aCA+IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaXNJbmNsdWRlUHJvcCA9ICEocHJvcGVydHkucHJvcGVydHlUeXBlID09IFBST1BFUlRZICYmICFSZWdleFZhbGlkYXRvci5pc05vdEJsYW5rKGpzb24uZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdKSAmJiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmlnbm9yZVVuZGVmaW5lZFByb3BzLmluZGV4T2YocHJvcGVydHkubmFtZSkgIT09IC0xIHx8IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5pZ25vcmVVbmRlZmluZWRQcm9wcy5pbmRleE9mKFwiOnNlbGY6XCIpICE9PSAtMSkpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAocHJvcGVydHkuaWdub3JlKVxuICAgICAgICAgICAgICAgIGlzSW5jbHVkZVByb3AgPSAhcHJvcGVydHkuaWdub3JlLmNhbGwoanNvbi5lbnRpdHlPYmplY3QsIGpzb24uZW50aXR5T2JqZWN0KTtcbiAgICAgICAgICAgIGlmIChpc0luY2x1ZGVQcm9wKSB7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChwcm9wZXJ0eS5wcm9wZXJ0eVR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBQUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSBpbnN0YW5jZW9mIFJ4Rm9ybUNvbnRyb2wpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHByb3BlcnR5VmFsaWRhdG9ycyA9IGluc3RhbmNlQ29udGFpbmVyLnByb3BlcnR5QW5ub3RhdGlvbnMuZmlsdGVyKHQgPT4gdC5wcm9wZXJ0eU5hbWUgPT0gcHJvcGVydHkubmFtZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHNhbml0aXplVmFsdWUgPSBzdXBlci5zYW5pdGl6ZVZhbHVlKGluc3RhbmNlQ29udGFpbmVyLCBwcm9wZXJ0eS5uYW1lLCBzdXBlci5nZXREZWZhdWx0VmFsdWUocHJvcGVydHksIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKSwganNvbi5lbnRpdHlPYmplY3QsIE9iamVjdC5hc3NpZ24oe30sIGpzb24uZW50aXR5T2JqZWN0KSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9PT0gdW5kZWZpbmVkICYmIHNhbml0aXplVmFsdWUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IHNhbml0aXplVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHZhbGlkYXRvcnMgPSB0aGlzLmFkZEZvcm1Db250cm9sKHByb3BlcnR5LCBwcm9wZXJ0eVZhbGlkYXRvcnMsIGFkZGl0aW9uYWxWYWxpZGF0aW9uc1twcm9wZXJ0eS5uYW1lXSwgaW5zdGFuY2VDb250YWluZXIsIGVudGl0eU9iamVjdCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFic3RyYWN0Q29udHJvbE9wdGlvbnM6IEFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB7IHZhbGlkYXRvcnM6IHZhbGlkYXRvcnMsIGFzeW5jVmFsaWRhdG9yczogdGhpcy5hZGRBc3luY1ZhbGlkYXRpb24ocHJvcGVydHksIHByb3BlcnR5VmFsaWRhdG9ycywgYWRkaXRpb25hbFZhbGlkYXRpb25zW3Byb3BlcnR5Lm5hbWVdKSB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMocHJvcGVydHkubmFtZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwcm9wZXJ0eS51cGRhdGVPbiAmJiAhYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IHByb3BlcnR5LnVwZGF0ZU9uO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1Hcm91cE9iamVjdFtwcm9wZXJ0eS5uYW1lXSA9IG5ldyBSeEZvcm1Db250cm9sKHNhbml0aXplVmFsdWUsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIFtdLCBqc29uLmVudGl0eU9iamVjdCwgT2JqZWN0LmFzc2lnbih7fSwganNvbi5lbnRpdHlPYmplY3QpLCBwcm9wZXJ0eS5uYW1lLCBpbnN0YW5jZUNvbnRhaW5lci5zYW5pdGl6ZXJzW3Byb3BlcnR5Lm5hbWVdKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBzdXBlci5nZXREZWZhdWx0VmFsdWUocHJvcGVydHksIGVudGl0eU9iamVjdFtwcm9wZXJ0eS5uYW1lXSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dGVuZGVkUHJvcGVydGllc1twcm9wZXJ0eS5uYW1lXSA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBPQkpFQ1RfUFJPUEVSVFk6XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqZWN0VmFsdWUgPSBlbnRpdHlPYmplY3RbcHJvcGVydHkubmFtZV07XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAob2JqZWN0VmFsdWUgJiYgb2JqZWN0VmFsdWUgaW5zdGFuY2VvZiBPYmplY3QgJiYgIShvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1Hcm91cCB8fCBvYmplY3RWYWx1ZSBpbnN0YW5jZW9mIFJ4Rm9ybUdyb3VwKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuaXNOZXN0ZWRCaW5kaW5nID0gdGhpcy5pc05lc3RlZCA9IHRydWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluc3RhbmNlQ29udGFpbmVyICYmIGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlICYmIHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodGhpcy5mb3JtR3JvdXBQcm9wT3RoZXJWYWxpZGF0b3JbcHJvcGVydHkubmFtZV0pXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBvYmplY3RWYWx1ZSwgYCR7cHJvcGVydHkubmFtZX0uYClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZW50aXR5ID0gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIgPyBwcm9wZXJ0eS5lbnRpdHlQcm92aWRlci5jYWxsKGVudGl0eU9iamVjdCkgOiB1bmRlZmluZWQ7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gdGhpcy5mb3JtR3JvdXAoZW50aXR5IHx8IHByb3BlcnR5LmVudGl0eSB8fCB0aGlzLmdldEVudGl0eShvYmplY3RWYWx1ZSwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBwcm9wZXJ0eS5uYW1lLCB0cnVlKSwgb2JqZWN0VmFsdWUsIG9iamVjdFZhbGlkYXRpb25Db25maWcpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5pc05lc3RlZEJpbmRpbmcgPSB0aGlzLmlzTmVzdGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFZhbHVlIGluc3RhbmNlb2YgRm9ybUdyb3VwIHx8IG9iamVjdFZhbHVlIGluc3RhbmNlb2YgUnhGb3JtR3JvdXApXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gb2JqZWN0VmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBBUlJBWV9QUk9QRVJUWTpcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnJheU9iamVjdFZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGFycmF5T2JqZWN0VmFsdWUgJiYgYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEFycmF5ICYmICEoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSB0cnVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb3JtQXJyYXlHcm91cCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVudGl0eSA9IHByb3BlcnR5LmVudGl0eVByb3ZpZGVyID8gcHJvcGVydHkuZW50aXR5UHJvdmlkZXIuY2FsbChlbnRpdHlPYmplY3QpIDogdW5kZWZpbmVkO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBzdWJPYmplY3Qgb2YgYXJyYXlPYmplY3RWYWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5zdGFuY2VDb250YWluZXIgJiYgaW5zdGFuY2VDb250YWluZXIuY29uZGl0aW9uYWxPYmplY3RQcm9wcylcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IGluc3RhbmNlQ29udGFpbmVyLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleClcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuY29uZGl0aW9uYWxWYWxpZGF0aW9uSW5zdGFuY2UgJiYgdGhpcy5jb25kaXRpb25hbFZhbGlkYXRpb25JbnN0YW5jZS5jb25kaXRpb25hbE9iamVjdFByb3BzKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5idWlsZGVyQ29uZmlndXJhdGlvbkNvbmRpdGlvbmFsT2JqZWN0UHJvcHMgPSB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlLmNvbmRpdGlvbmFsT2JqZWN0UHJvcHMuZmlsdGVyKHQgPT4gdC5vYmplY3RQcm9wTmFtZSA9PSBwcm9wZXJ0eS5uYW1lICYmIHQuYXJyYXlJbmRleCA9PSBpbmRleCk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLmZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvcltwcm9wZXJ0eS5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3VycmVudEZvcm1Hcm91cFByb3BPdGhlclZhbGlkYXRvciA9IHRoaXMuZm9ybUdyb3VwUHJvcE90aGVyVmFsaWRhdG9yW3Byb3BlcnR5Lm5hbWVdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmplY3RWYWxpZGF0aW9uQ29uZmlnID0gdGhpcy5nZXRWYWxpZGF0b3JDb25maWcoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBzdWJPYmplY3QsIGAke3Byb3BlcnR5Lm5hbWV9LmAsIGAke3Byb3BlcnR5Lm5hbWV9WyR7aW5kZXh9XS5gKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtQXJyYXlHcm91cC5wdXNoKHRoaXMuZm9ybUdyb3VwKGVudGl0eSB8fCBwcm9wZXJ0eS5lbnRpdHkgfHwgdGhpcy5nZXRFbnRpdHkoc3ViT2JqZWN0LCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24sIHByb3BlcnR5Lm5hbWUsIHRydWUpLCBzdWJPYmplY3QsIG9iamVjdFZhbGlkYXRpb25Db25maWcpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXgrKztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuYnVpbGRlckNvbmZpZ3VyYXRpb25Db25kaXRpb25hbE9iamVjdFByb3BzID0gW107XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zID0gdGhpcy5nZXRBYnN0cmFjdENvbnRyb2xPcHRpb25zKHByb3BlcnR5Lm5hbWUsIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAsIHsgfSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBuZXcgUnhGb3JtQXJyYXkoYXJyYXlPYmplY3RWYWx1ZSwgZm9ybUFycmF5R3JvdXAsIGFic3RyYWN0Q29udHJvbE9wdGlvbnMsIG51bGwsIHByb3BlcnR5LmFycmF5Q29uZmlnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoUmVhY3RpdmVGb3JtQ29uZmlnLmF1dG9JbnN0YW5jZVB1c2gpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5wdXNoID0gKGluc3RhbmNlOiBhbnlbXSk6IG51bWJlciA9PiB7IGxldCBmb3JtR3JvdXAgPSB0aGlzLmZvcm1Hcm91cChpbnN0YW5jZS5jb25zdHJ1Y3RvciwgaW5zdGFuY2UsIG9iamVjdFZhbGlkYXRpb25Db25maWcpOyBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucHVzaChmb3JtR3JvdXAsIHsgaXNBZGRlZEluc3RhbmNlOiB0cnVlIH0pOyByZXR1cm4gMDsgfTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlPYmplY3RWYWx1ZS5zcGxpY2UgPSAoc3RhcnQsIGRlbGV0ZUNvdW50KTogYW55W10gPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGVuZCA9IChzdGFydCArIGRlbGV0ZUNvdW50KSAtIDE7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0ucmVtb3ZlQXQoaSwgeyBpc1JlbW92ZWRJbnN0YW5jZTogdHJ1ZSB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmlzTmVzdGVkQmluZGluZyA9IHRoaXMuaXNOZXN0ZWQgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYXJyYXlPYmplY3RWYWx1ZSBpbnN0YW5jZW9mIEZvcm1BcnJheSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXBPYmplY3RbcHJvcGVydHkubmFtZV0gPSBhcnJheU9iamVjdFZhbHVlO1xuICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAocHJvcGVydHkuYXJyYXlDb25maWcgJiYgcHJvcGVydHkuYXJyYXlDb25maWcuY3JlYXRlQmxhbmspXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybUdyb3VwT2JqZWN0W3Byb3BlcnR5Lm5hbWVdID0gbmV3IFJ4Rm9ybUFycmF5KFtdLCBbXSwgbnVsbCwgbnVsbCwgcHJvcGVydHkuYXJyYXlDb25maWcpXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgfSlcbiAgICAgICAgaWYgKCF0aGlzLmlzTmVzdGVkKSB7XG4gICAgICAgICAgICB0aGlzLmNvbmRpdGlvbmFsVmFsaWRhdGlvbkluc3RhbmNlID0ge307XG4gICAgICAgICAgICB0aGlzLmJ1aWxkZXJDb25maWd1cmF0aW9uQ29uZGl0aW9uYWxPYmplY3RQcm9wcyA9IFtdO1xuICAgICAgICB9XG4gICAgICAgIGxldCBhYnN0cmFjdENvbnRyb2xPcHRpb25zOiBBYnN0cmFjdENvbnRyb2xPcHRpb25zID0ge1xuICAgICAgICAgICAgdmFsaWRhdG9yczogW10sXG4gICAgICAgICAgICBhc3luY1ZhbGlkYXRvcnM6IFtdLFxuICAgICAgICAgICAgdXBkYXRlT246IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9ucyAmJiBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb24uYWJzdHJhY3RDb250cm9sT3B0aW9uc1snZ2xvYmFsJ11cbiAgICAgICAgICAgICAgICAgICAgICAgID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmFic3RyYWN0Q29udHJvbE9wdGlvbnNbJ2dsb2JhbCddXG4gICAgICAgICAgICAgICAgICAgICAgICA6IHVuZGVmaW5lZFxuICAgICAgICAgIH07XG4gICAgICAgIGFic3RyYWN0Q29udHJvbE9wdGlvbnMgPSB0aGlzLmdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMoXCJnbG9iYWxcIiwgZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgbGV0IGZvcm1Hcm91cCA9IG5ldyBSeEZvcm1Hcm91cChqc29uLm1vZGVsLCBqc29uLmVudGl0eU9iamVjdCwgZm9ybUdyb3VwT2JqZWN0LCBhYnN0cmFjdENvbnRyb2xPcHRpb25zKTtcbiAgICAgICAgaWYgKGRlZmF1bHRDb250YWluZXIuaXNFeHBlcmltZW50YWwpIHtcbiAgICAgICAgICAgIGpzb24uZW50aXR5T2JqZWN0W1wiZm9ybUdyb3VwXCJdID0gZm9ybUdyb3VwO1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3BlcnRpZXMoZm9ybUdyb3VwLCBqc29uLmVudGl0eU9iamVjdCwgZXh0ZW5kZWRQcm9wZXJ0aWVzKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoIXRoaXMuaXNOZXN0ZWRCaW5kaW5nICYmICF0aGlzLmlzR3JvdXBDYWxsZWQpXG4gICAgICAgICAgICBmb3JtR3JvdXAucmVmcmVzaERpc2FibGUoKTtcbiAgICAgICAgcmV0dXJuIGZvcm1Hcm91cDtcblxuICAgIH1cblxuICAgIHByaXZhdGUgb3ZlcnJpZGVQcm9wZXJ0aWVzKGZvcm1Hcm91cDogUnhGb3JtR3JvdXAsIGVudGl0eU9iamVjdDogYW55LCBwcm9wZXJ0aWVzOiB7IFtrZXk6IHN0cmluZ106IGJvb2xlYW4gfSkge1xuICAgICAgICBPYmplY3Qua2V5cyhwcm9wZXJ0aWVzKS5mb3JFYWNoKHQgPT4ge1xuICAgICAgICAgICAgdGhpcy5vdmVycmlkZVByb3AoZW50aXR5T2JqZWN0LCB0LCBmb3JtR3JvdXApO1xuICAgICAgICB9KVxuICAgIH1cbiAgICBwcml2YXRlIGdldEFic3RyYWN0Q29udHJvbE9wdGlvbnMobmFtZTogc3RyaW5nLCBmb3JtQnVpbGRlckNvbmZpZ3VyYXRpb246IEZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbiwgYWJzdHJhY3RDb250cm9sT3B0aW9uczogQWJzdHJhY3RDb250cm9sT3B0aW9ucykge1xuICAgICAgICBpZiAoZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zICYmIGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdKVxuICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGZvcm1CdWlsZGVyQ29uZmlndXJhdGlvbi5hYnN0cmFjdENvbnRyb2xPcHRpb25zW25hbWVdO1xuXG4gICAgICAgIGNvbnN0IGNvbnRyb2xPcHRpb25zID0gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uID8gZm9ybUJ1aWxkZXJDb25maWd1cmF0aW9uLmJhc2VBYnN0cmFjdENvbnRyb2xPcHRpb25zIDogbnVsbDtcbiAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zICYmIGNvbnRyb2xPcHRpb25zW25hbWVdKSB7XG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0udXBkYXRlT24pXG4gICAgICAgICAgICAgICAgYWJzdHJhY3RDb250cm9sT3B0aW9ucy51cGRhdGVPbiA9IGNvbnRyb2xPcHRpb25zW25hbWVdLnVwZGF0ZU9uO1xuICAgICAgICAgICAgaWYgKGNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpIHtcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShjb250cm9sT3B0aW9uc1tuYW1lXS52YWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpLmZvckVhY2godmFsaWRhdG9yID0+ICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2godmFsaWRhdG9yKSlcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICg8VmFsaWRhdG9yRm5bXT5hYnN0cmFjdENvbnRyb2xPcHRpb25zLnZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSB7XG4gICAgICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoY29udHJvbE9wdGlvbnNbbmFtZV0uYXN5bmNWYWxpZGF0b3JzKSlcbiAgICAgICAgICAgICAgICAgICAgKDxWYWxpZGF0b3JGbltdPmNvbnRyb2xPcHRpb25zW25hbWVdLmFzeW5jVmFsaWRhdG9ycykuZm9yRWFjaCh2YWxpZGF0b3IgPT4gKDxWYWxpZGF0b3JGbltdPmFic3RyYWN0Q29udHJvbE9wdGlvbnMuYXN5bmNWYWxpZGF0b3JzKS5wdXNoKHZhbGlkYXRvcikpXG4gICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAoPFZhbGlkYXRvckZuW10+YWJzdHJhY3RDb250cm9sT3B0aW9ucy5hc3luY1ZhbGlkYXRvcnMpLnB1c2goPFZhbGlkYXRvckZuPmNvbnRyb2xPcHRpb25zW25hbWVdLnZhbGlkYXRvcnMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBhYnN0cmFjdENvbnRyb2xPcHRpb25zO1xuICAgIH1cbiAgICBwcml2YXRlIG92ZXJyaWRlUHJvcChlbnRpdHlPYmplY3Q6IGFueSwgcHJvcE5hbWU6IHN0cmluZywgZm9ybUdyb3VwOiBSeEZvcm1Hcm91cCkge1xuICAgICAgICBsZXQgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoT2JqZWN0LmdldFByb3RvdHlwZU9mKGVudGl0eU9iamVjdCksIHByb3BOYW1lKTtcbiAgICAgICAgbGV0IHZhbHVlID0gZW50aXR5T2JqZWN0W3Byb3BOYW1lXTtcbiAgICAgICAgbGV0IG9sZFZhbHVlID0gbnVsbDtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGVudGl0eU9iamVjdCwgcHJvcE5hbWUsIHtcbiAgICAgICAgICAgIGdldDogKCkgPT4geyByZXR1cm4gZGVzY3JpcHRvciA/IGRlc2NyaXB0b3IuZ2V0LmNhbGwoZW50aXR5T2JqZWN0KSA6IHZhbHVlIH0sXG4gICAgICAgICAgICBzZXQ6ICh2KSA9PiB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB2O1xuICAgICAgICAgICAgICAgIGlmIChvbGRWYWx1ZSAhPSB2KSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZXNjcmlwdG9yKVxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5zZXQuY2FsbChlbnRpdHlPYmplY3QsIHYpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoIWZvcm1Hcm91cC5jaGFuZ2luZyAmJiBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3JtR3JvdXAuY29udHJvbHNbcHJvcE5hbWVdLnNldFZhbHVlKHYpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG9sZFZhbHVlID0gdjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSlcbiAgICB9XG59XG4iXX0=
|