ngx-sp-infra 0.0.0
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/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/2a/a3/eba6ea21e2e566c49202226aa3c1a4d439fa0a2c077374e48d864f20f5f804dbd931f042ddaa359fd35903a0bd3663a223e24dc11e1ec44501cc688a0a9c +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/46/44/91b55887c08130e8014b3dbe56b69c0c29f4e127bceafcd610165f4c8e77fefa799ab68c415c1b45cc4fa114565650f3fc3c258e1dc7b792935cbee43fa7 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/7e/62/f8e6238b8f05aeaee2346bcaeda2226be7ab048d3b15e3dbbdf37170d9d7fade0fdfc6cc265d1ecc1b47509c962115d0d4b9a503907d6790c632e191001b +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/8d/53/ad58764bc240411378ae1c47c0c20525da378a3b143795a11bc3fdbf6c9cde6fb2de6c3947d673d5872b9ce205d6274114b3b4dfd27609a636df7fd0b600 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/9e/70/9fc33090191a9df303901910a34f5d1cc7ea38ac92e21006bf923a814a4dffe9ad5b7357989f95d4e371cd00318c29339ec3e935832e84f3571ba0ed5f25 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/a1/3a/6a6f351adef4b7c8b7d643b092ca26e0ceeb2a285456285f866504493c9c7db8d420d3a4f282c699a11f2f9933c828c8f8388f28e96372408d7b456f32a1 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/d3/e3/2852d10551b620a4dfaabb1268bf0ac681e206bfb66451e18ac43a2e5c7cdc8a75291e3a1a4038129f3e40cc11317edffe8434d7110d9579585a25843e15 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/f2/ee/05ff4c2260f161b6295a8507440a1b86c0f666f313866e5bf1de6829ae5fe384d6612d732d09c815fe515bd3d6379ed5f8136cf4a4e228b322309840240e +1 -0
- package/.angular/cache/16.2.0/ng-packagr/content-v2/sha512/fe/15/fb0370939f075c14617e0d5fd8411f76edb53e439e19683e5c4554ae7cabd0387c922f6ec6893ced3321ed77df2c851b82eea6a70b38b7396f68493eea19 +1 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/10/17/ae308ad3e0cad0afd27bf9eafe0177fdb23b463e70e0dd30d23c117517f6 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/14/18/88eabde022c32e7a38011f4ab6f7945e52f018be1abbe6a96864f8f9e22c +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/1c/b7/dcd00bf2f1de70eab7d9e1d9601fbd87f49d46c7b49671d81ccd4b20b3f1 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/4b/31/217b5311dae6305f9b5dc82062276c77f272d61fc3e27c2df5eb0d6b1fb7 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/6a/b0/e5091f9ee02b3fcac9821e92cc5113d6b0593bd8bacfb5cbac7dfca306c3 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/9b/66/70a7c5990683795072c8b98eb25407b36f55f8efa8d2e0bdef67a8e989ab +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/a6/8b/af2670adca8f5d06d3d9577ffad4449e4897eaf85de2f4e7f43f93934a16 +2 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/da/da/502cfd37a0e9e7f413a569ccf28dc682f9e942ec5e460c93c1dd7c4e531f +3 -0
- package/.angular/cache/16.2.0/ng-packagr/index-v5/f3/8b/4e00bb8eddd473ae09b0b5dee39fa8416aee7b659a770d18c767e5027992 +2 -0
- package/.editorconfig +16 -0
- package/README.md +27 -0
- package/angular.json +41 -0
- package/dist/ngx-sp-infra/README.md +12 -0
- package/dist/ngx-sp-infra/esm2022/lib/infra.module.mjs +137 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/alert/alert.component.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/confirm/confirm.component.mjs +52 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/confirm-modal/confirm-modal.component.mjs +72 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/message-enum.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/message.service.mjs +132 -0
- package/dist/ngx-sp-infra/esm2022/lib/message/save/save.component.mjs +46 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/DownloadArquivos.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/email-model.mjs +35 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ierror.mjs +2 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ipagination.mjs +2 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/report-file.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-error.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-feedback-message.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/models/ret-report-file.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/cpf-cnpj.pipe.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/currency.pipe.mjs +16 -0
- package/dist/ngx-sp-infra/esm2022/lib/pipes/to-url.pipe.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/check-url-and-method.service.mjs +70 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/form-utils.mjs +38 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/ip-service.service.mjs +22 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/settings.service.mjs +32 -0
- package/dist/ngx-sp-infra/esm2022/lib/utils/utils.mjs +335 -0
- package/dist/ngx-sp-infra/esm2022/lib/validators/cpf-cnpj.validator.directive.mjs +24 -0
- package/dist/ngx-sp-infra/esm2022/lib/validators/cpf-cnpj.validator.mjs +54 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.mjs +35 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.mjs +28 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.mjs +21 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/click-outside/clickoutside.directive.mjs +167 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/combobox.component.mjs +545 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/pipes/filter-by.pipe.mjs +44 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/combobox/pipes/limit-to.pipe.mjs +19 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/field-control-error/field-control-error.component.mjs +23 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/field-error-message/field-error-message.component.mjs +33 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/loading/loading.component.mjs +12 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/loading-button/loading-button.component.mjs +15 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/ordering/ordering.component.mjs +56 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/svg-storage/svg-storage.component.mjs +94 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/models/ret-tree.mjs +3 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/models/tree-item.mjs +7 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/pipes/search-tree.pipe.mjs +17 -0
- package/dist/ngx-sp-infra/esm2022/lib/widgets/tree/tree.component.mjs +91 -0
- package/dist/ngx-sp-infra/esm2022/ngx-sp-infra.mjs +5 -0
- package/dist/ngx-sp-infra/esm2022/public-api.mjs +51 -0
- package/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs +2313 -0
- package/dist/ngx-sp-infra/fesm2022/ngx-sp-infra.mjs.map +1 -0
- package/dist/ngx-sp-infra/index.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/infra.module.d.ts +32 -0
- package/dist/ngx-sp-infra/lib/message/alert/alert.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/message/confirm/confirm.component.d.ts +22 -0
- package/dist/ngx-sp-infra/lib/message/confirm-modal/confirm-modal.component.d.ts +33 -0
- package/dist/ngx-sp-infra/lib/message/message-enum.d.ts +20 -0
- package/dist/ngx-sp-infra/lib/message/message.service.d.ts +31 -0
- package/dist/ngx-sp-infra/lib/message/save/save.component.d.ts +21 -0
- package/dist/ngx-sp-infra/lib/models/DownloadArquivos.d.ts +11 -0
- package/dist/ngx-sp-infra/lib/models/email-model.d.ts +30 -0
- package/dist/ngx-sp-infra/lib/models/ierror.d.ts +4 -0
- package/dist/ngx-sp-infra/lib/models/ipagination.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/models/report-file.d.ts +4 -0
- package/dist/ngx-sp-infra/lib/models/ret-error.d.ts +5 -0
- package/dist/ngx-sp-infra/lib/models/ret-feedback-message.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/models/ret-report-file.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/cpf-cnpj.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/currency.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/pipes/to-url.pipe.d.ts +16 -0
- package/dist/ngx-sp-infra/lib/utils/check-url-and-method.service.d.ts +35 -0
- package/dist/ngx-sp-infra/lib/utils/form-utils.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/utils/ip-service.service.d.ts +9 -0
- package/dist/ngx-sp-infra/lib/utils/settings.service.d.ts +9 -0
- package/dist/ngx-sp-infra/lib/utils/utils.d.ts +58 -0
- package/dist/ngx-sp-infra/lib/validators/cpf-cnpj.validator.d.ts +18 -0
- package/dist/ngx-sp-infra/lib/validators/cpf-cnpj.validator.directive.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.d.ts +29 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.d.ts +10 -0
- package/dist/ngx-sp-infra/lib/widgets/click-outside/clickoutside.directive.d.ts +40 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/combobox.component.d.ts +174 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/pipes/filter-by.pipe.d.ts +10 -0
- package/dist/ngx-sp-infra/lib/widgets/combobox/pipes/limit-to.pipe.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/field-control-error/field-control-error.component.d.ts +12 -0
- package/dist/ngx-sp-infra/lib/widgets/field-error-message/field-error-message.component.d.ts +14 -0
- package/dist/ngx-sp-infra/lib/widgets/loading/loading.component.d.ts +6 -0
- package/dist/ngx-sp-infra/lib/widgets/loading-button/loading-button.component.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/ordering/ordering.component.d.ts +18 -0
- package/dist/ngx-sp-infra/lib/widgets/svg-storage/svg-storage.component.d.ts +16 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/models/ret-tree.d.ts +7 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/models/tree-item.d.ts +11 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/pipes/search-tree.pipe.d.ts +8 -0
- package/dist/ngx-sp-infra/lib/widgets/tree/tree.component.d.ts +20 -0
- package/dist/ngx-sp-infra/package.json +37 -0
- package/dist/ngx-sp-infra/public-api.d.ts +47 -0
- package/package.json +43 -0
- package/projects/ngx-sp-infra/README.md +12 -0
- package/projects/ngx-sp-infra/karma.conf.js +44 -0
- package/projects/ngx-sp-infra/ng-package.json +7 -0
- package/projects/ngx-sp-infra/package-lock.json +225 -0
- package/projects/ngx-sp-infra/package.json +18 -0
- package/projects/ngx-sp-infra/src/lib/infra.module.ts +85 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.html +6 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.scss +5 -0
- package/projects/ngx-sp-infra/src/lib/message/alert/alert.component.ts +39 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.html +15 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm/confirm.component.ts +52 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.html +39 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/message/confirm-modal/confirm-modal.component.ts +73 -0
- package/projects/ngx-sp-infra/src/lib/message/message-enum.ts +21 -0
- package/projects/ngx-sp-infra/src/lib/message/message.service.ts +169 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.html +35 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.scss +110 -0
- package/projects/ngx-sp-infra/src/lib/message/save/save.component.ts +44 -0
- package/projects/ngx-sp-infra/src/lib/models/DownloadArquivos.ts +12 -0
- package/projects/ngx-sp-infra/src/lib/models/email-model.ts +33 -0
- package/projects/ngx-sp-infra/src/lib/models/ierror.ts +4 -0
- package/projects/ngx-sp-infra/src/lib/models/ipagination.ts +5 -0
- package/projects/ngx-sp-infra/src/lib/models/report-file.ts +4 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-error.ts +6 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-feedback-message.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/models/ret-report-file.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/pipes/cpf-cnpj.pipe.ts +21 -0
- package/projects/ngx-sp-infra/src/lib/pipes/currency.pipe.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/pipes/to-url.pipe.ts +33 -0
- package/projects/ngx-sp-infra/src/lib/utils/check-url-and-method.service.ts +84 -0
- package/projects/ngx-sp-infra/src/lib/utils/form-utils.ts +50 -0
- package/projects/ngx-sp-infra/src/lib/utils/ip-service.service.ts +22 -0
- package/projects/ngx-sp-infra/src/lib/utils/settings.service.ts +32 -0
- package/projects/ngx-sp-infra/src/lib/utils/utils.ts +427 -0
- package/projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.directive.ts +14 -0
- package/projects/ngx-sp-infra/src/lib/validators/cpf-cnpj.validator.ts +74 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.html +3 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb/infra-breadcrumb.component.ts +34 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.html +1 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/infra-breadcrumb-item/infra-breadcrumb-item.component.ts +29 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.html +5 -0
- package/projects/ngx-sp-infra/src/lib/widgets/breadcrumb/portalrh-breadcrumb/breadcrumb.component.ts +18 -0
- package/projects/ngx-sp-infra/src/lib/widgets/click-outside/clickoutside.directive.ts +183 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.html +40 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.scss +185 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.component.ts +637 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/combobox.service.ts +15 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/filter-by.pipe.ts +38 -0
- package/projects/ngx-sp-infra/src/lib/widgets/combobox/pipes/limit-to.pipe.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-control-error/field-control-error.component.ts +18 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.css +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/field-error-message/field-error-message.component.ts +35 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.css +7 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.html +4 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading/loading.component.ts +12 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.css +3 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.html +2 -0
- package/projects/ngx-sp-infra/src/lib/widgets/loading-button/loading-button.component.ts +13 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.html +23 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/ordering/ordering.component.ts +50 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.html +728 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.scss +0 -0
- package/projects/ngx-sp-infra/src/lib/widgets/svg-storage/svg-storage.component.ts +105 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/README.md +33 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/models/ret-tree.ts +8 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/models/tree-item.ts +11 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/pipes/search-tree.pipe.ts +15 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.html +51 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.scss +57 -0
- package/projects/ngx-sp-infra/src/lib/widgets/tree/tree.component.ts +88 -0
- package/projects/ngx-sp-infra/src/public-api.ts +58 -0
- package/projects/ngx-sp-infra/src/test.ts +15 -0
- package/projects/ngx-sp-infra/tsconfig.lib.json +15 -0
- package/projects/ngx-sp-infra/tsconfig.lib.prod.json +10 -0
- package/projects/ngx-sp-infra/tsconfig.spec.json +17 -0
- package/sp-ng-infra-0.0.0.tgz +0 -0
- package/tsconfig.json +42 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
/**
|
|
4
|
+
* @description
|
|
5
|
+
*
|
|
6
|
+
* Auxilia na injeção de dados de autenticação em endpoints que necessitam de tal ação.
|
|
7
|
+
*/
|
|
8
|
+
export class CheckUrlAndMethodService {
|
|
9
|
+
constructor() { }
|
|
10
|
+
/**
|
|
11
|
+
* @description
|
|
12
|
+
*
|
|
13
|
+
* Verifica se a url da requisição precisa ou não ser autenticada.
|
|
14
|
+
*
|
|
15
|
+
* É utilizado REGEX para a formatação.
|
|
16
|
+
*
|
|
17
|
+
* @param url URL da requisição que está sendo enviada ou que foi recebida.
|
|
18
|
+
* @param method Método da requisição.
|
|
19
|
+
* @param urls Urls e métodos atrelados aos endpoints.
|
|
20
|
+
* @returns Verdadeiro se deve ser autenticado e falso se não deve.
|
|
21
|
+
*/
|
|
22
|
+
needsAuthRequest(url, method, urls) {
|
|
23
|
+
// Adiciona a URL uma barra no final para fazer match.
|
|
24
|
+
let urlToBeVerified = url;
|
|
25
|
+
// TODO: Remover redundância de / nas URLs.
|
|
26
|
+
let lastUrlChar = urlToBeVerified.charAt(urlToBeVerified.length - 1);
|
|
27
|
+
if (lastUrlChar !== "/") {
|
|
28
|
+
urlToBeVerified += "/";
|
|
29
|
+
}
|
|
30
|
+
let urlsToVerify = urls.keys();
|
|
31
|
+
for (let urlToVerify of urlsToVerify) {
|
|
32
|
+
let regexString = `${this.sanitizeForRegex(urlToVerify)}`;
|
|
33
|
+
// Faz com que o caractere * fique com um ponto para pegar qualquer caractere no regex.
|
|
34
|
+
regexString = regexString.replace("*", ".*");
|
|
35
|
+
let regexMatch = urlToBeVerified.match(regexString);
|
|
36
|
+
// Verifica se a url da match no regex construído a partir da url a ser autenticada.
|
|
37
|
+
if (regexMatch && regexMatch.length === 1) {
|
|
38
|
+
// Verifica se o método da ação necessita de autenticação.
|
|
39
|
+
for (let methodAux of urls.get(urlToVerify)) {
|
|
40
|
+
methodAux = methodAux.replace("*", ".*");
|
|
41
|
+
let regexMatchedMethod = method.match(methodAux);
|
|
42
|
+
if (regexMatchedMethod && regexMatchedMethod.length === 1) {
|
|
43
|
+
return true;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* @description
|
|
52
|
+
*
|
|
53
|
+
* Insere caracteres de escape em palavras chaves de um regex.
|
|
54
|
+
*
|
|
55
|
+
* pego de https://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex
|
|
56
|
+
*
|
|
57
|
+
* @param unsanitizedString String a ser "limpada".
|
|
58
|
+
* @returns String limpa para uso em regex.
|
|
59
|
+
*/
|
|
60
|
+
sanitizeForRegex(unsanitizedString) {
|
|
61
|
+
return unsanitizedString.replace(/[.+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
|
|
62
|
+
}
|
|
63
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CheckUrlAndMethodService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
64
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CheckUrlAndMethodService, providedIn: 'root' }); }
|
|
65
|
+
}
|
|
66
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CheckUrlAndMethodService, decorators: [{
|
|
67
|
+
type: Injectable,
|
|
68
|
+
args: [{ providedIn: 'root' }]
|
|
69
|
+
}], ctorParameters: function () { return []; } });
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hlY2stdXJsLWFuZC1tZXRob2Quc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3V0aWxzL2NoZWNrLXVybC1hbmQtbWV0aG9kLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFFM0M7Ozs7R0FJRztBQUlILE1BQU0sT0FBTyx3QkFBd0I7SUFFbkMsZ0JBQWdCLENBQUM7SUFFakI7Ozs7Ozs7Ozs7O09BV0c7SUFDSCxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsTUFBYyxFQUFFLElBQTJCO1FBQ3ZFLHNEQUFzRDtRQUN0RCxJQUFJLGVBQWUsR0FBRyxHQUFHLENBQUM7UUFFMUIsMkNBQTJDO1FBQzNDLElBQUksV0FBVyxHQUFHLGVBQWUsQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVyRSxJQUFJLFdBQVcsS0FBSyxHQUFHLEVBQUU7WUFDdkIsZUFBZSxJQUFJLEdBQUcsQ0FBQztTQUN4QjtRQUVELElBQUksWUFBWSxHQUE2QixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7UUFFekQsS0FBSSxJQUFJLFdBQVcsSUFBSSxZQUFZLEVBQUU7WUFDbkMsSUFBSSxXQUFXLEdBQVcsR0FBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsV0FBVyxDQUFFLEVBQUUsQ0FBQztZQUVwRSx1RkFBdUY7WUFDdkYsV0FBVyxHQUFHLFdBQVcsQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO1lBRTdDLElBQUksVUFBVSxHQUE2QixlQUFlLENBQUMsS0FBSyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1lBRTlFLG9GQUFvRjtZQUNwRixJQUFJLFVBQVUsSUFBSSxVQUFVLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRTtnQkFFekMsMERBQTBEO2dCQUMxRCxLQUFJLElBQUksU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFFLEVBQUU7b0JBQzNDLFNBQVMsR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztvQkFFekMsSUFBSSxrQkFBa0IsR0FBNEIsTUFBTSxDQUFDLEtBQUssQ0FBQyxTQUFTLENBQUMsQ0FBQztvQkFFMUUsSUFBSSxrQkFBa0IsSUFBSSxrQkFBa0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO3dCQUN6RCxPQUFPLElBQUksQ0FBQztxQkFDYjtpQkFFRjthQUVGO1NBRUY7UUFFRCxPQUFPLEtBQUssQ0FBQztJQUNmLENBQUM7SUFFRDs7Ozs7Ozs7O09BU0c7SUFDSyxnQkFBZ0IsQ0FBQyxpQkFBeUI7UUFDaEQsT0FBTyxpQkFBaUIsQ0FBQyxPQUFPLENBQUMsb0JBQW9CLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxvQ0FBb0M7SUFDdEcsQ0FBQzs4R0F2RVUsd0JBQXdCO2tIQUF4Qix3QkFBd0IsY0FGckIsTUFBTTs7MkZBRVQsd0JBQXdCO2tCQUhwQyxVQUFVO21CQUNULEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuLyoqXG4gKiBAZGVzY3JpcHRpb25cbiAqXG4gKiBBdXhpbGlhIG5hIGluamXDp8OjbyBkZSBkYWRvcyBkZSBhdXRlbnRpY2HDp8OjbyBlbSBlbmRwb2ludHMgcXVlIG5lY2Vzc2l0YW0gZGUgdGFsIGHDp8Ojby5cbiAqL1xuQEluamVjdGFibGUoXG4gIHsgcHJvdmlkZWRJbjogJ3Jvb3QnIH1cbilcbmV4cG9ydCBjbGFzcyBDaGVja1VybEFuZE1ldGhvZFNlcnZpY2Uge1xuXG4gIGNvbnN0cnVjdG9yKCkgeyB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBWZXJpZmljYSBzZSBhIHVybCBkYSByZXF1aXNpw6fDo28gcHJlY2lzYSBvdSBuw6NvIHNlciBhdXRlbnRpY2FkYS5cbiAgICpcbiAgICogw4kgdXRpbGl6YWRvIFJFR0VYIHBhcmEgYSBmb3JtYXRhw6fDo28uXG4gICAqXG4gICAqIEBwYXJhbSB1cmwgVVJMIGRhIHJlcXVpc2nDp8OjbyBxdWUgZXN0w6Egc2VuZG8gZW52aWFkYSBvdSBxdWUgZm9pIHJlY2ViaWRhLlxuICAgKiBAcGFyYW0gbWV0aG9kIE3DqXRvZG8gZGEgcmVxdWlzacOnw6NvLlxuICAgKiBAcGFyYW0gdXJscyBVcmxzIGUgbcOpdG9kb3MgYXRyZWxhZG9zIGFvcyBlbmRwb2ludHMuXG4gICAqIEByZXR1cm5zIFZlcmRhZGVpcm8gc2UgZGV2ZSBzZXIgYXV0ZW50aWNhZG8gZSBmYWxzbyBzZSBuw6NvIGRldmUuXG4gICAqL1xuICBuZWVkc0F1dGhSZXF1ZXN0KHVybDogc3RyaW5nLCBtZXRob2Q6IHN0cmluZywgdXJsczogTWFwPHN0cmluZywgc3RyaW5nW10+KTogYm9vbGVhbiB7XG4gICAgLy8gQWRpY2lvbmEgYSBVUkwgdW1hIGJhcnJhIG5vIGZpbmFsIHBhcmEgZmF6ZXIgbWF0Y2guXG4gICAgbGV0IHVybFRvQmVWZXJpZmllZCA9IHVybDtcbiAgICBcbiAgICAvLyBUT0RPOiBSZW1vdmVyIHJlZHVuZMOibmNpYSBkZSAvIG5hcyBVUkxzLlxuICAgIGxldCBsYXN0VXJsQ2hhciA9IHVybFRvQmVWZXJpZmllZC5jaGFyQXQodXJsVG9CZVZlcmlmaWVkLmxlbmd0aCAtIDEpO1xuXG4gICAgaWYgKGxhc3RVcmxDaGFyICE9PSBcIi9cIikge1xuICAgICAgdXJsVG9CZVZlcmlmaWVkICs9IFwiL1wiO1xuICAgIH1cblxuICAgIGxldCB1cmxzVG9WZXJpZnk6IEl0ZXJhYmxlSXRlcmF0b3I8c3RyaW5nPiA9IHVybHMua2V5cygpO1xuXG4gICAgZm9yKGxldCB1cmxUb1ZlcmlmeSBvZiB1cmxzVG9WZXJpZnkpIHtcbiAgICAgIGxldCByZWdleFN0cmluZzogc3RyaW5nID0gYCR7IHRoaXMuc2FuaXRpemVGb3JSZWdleCh1cmxUb1ZlcmlmeSkgfWA7XG5cbiAgICAgIC8vIEZheiBjb20gcXVlIG8gY2FyYWN0ZXJlICogZmlxdWUgY29tIHVtIHBvbnRvIHBhcmEgcGVnYXIgcXVhbHF1ZXIgY2FyYWN0ZXJlIG5vIHJlZ2V4LlxuICAgICAgcmVnZXhTdHJpbmcgPSByZWdleFN0cmluZy5yZXBsYWNlKFwiKlwiLCBcIi4qXCIpO1xuXG4gICAgICBsZXQgcmVnZXhNYXRjaDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSAgdXJsVG9CZVZlcmlmaWVkLm1hdGNoKHJlZ2V4U3RyaW5nKTtcblxuICAgICAgLy8gVmVyaWZpY2Egc2UgYSB1cmwgZGEgbWF0Y2ggbm8gcmVnZXggY29uc3RydcOtZG8gYSBwYXJ0aXIgZGEgdXJsIGEgc2VyIGF1dGVudGljYWRhLlxuICAgICAgaWYgKHJlZ2V4TWF0Y2ggJiYgcmVnZXhNYXRjaC5sZW5ndGggPT09IDEpIHtcblxuICAgICAgICAvLyBWZXJpZmljYSBzZSBvIG3DqXRvZG8gZGEgYcOnw6NvIG5lY2Vzc2l0YSBkZSBhdXRlbnRpY2HDp8Ojby5cbiAgICAgICAgZm9yKGxldCBtZXRob2RBdXggb2YgdXJscy5nZXQodXJsVG9WZXJpZnkpISkge1xuICAgICAgICAgIG1ldGhvZEF1eCA9IG1ldGhvZEF1eC5yZXBsYWNlKFwiKlwiLCBcIi4qXCIpO1xuXG4gICAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlZE1ldGhvZDogUmVnRXhwTWF0Y2hBcnJheSB8IG51bGwgPSBtZXRob2QubWF0Y2gobWV0aG9kQXV4KTtcblxuICAgICAgICAgIGlmIChyZWdleE1hdGNoZWRNZXRob2QgJiYgcmVnZXhNYXRjaGVkTWV0aG9kLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgIH1cblxuICAgICAgfVxuXG4gICAgfVxuXG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgLyoqXG4gICAqIEBkZXNjcmlwdGlvblxuICAgKlxuICAgKiBJbnNlcmUgY2FyYWN0ZXJlcyBkZSBlc2NhcGUgZW0gcGFsYXZyYXMgY2hhdmVzIGRlIHVtIHJlZ2V4LlxuICAgKlxuICAgKiBwZWdvIGRlIGh0dHBzOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzM0NDYxNzAvZXNjYXBlLXN0cmluZy1mb3ItdXNlLWluLWphdmFzY3JpcHQtcmVnZXhcbiAgICpcbiAgICogQHBhcmFtIHVuc2FuaXRpemVkU3RyaW5nIFN0cmluZyBhIHNlciBcImxpbXBhZGFcIi5cbiAgICogQHJldHVybnMgU3RyaW5nIGxpbXBhIHBhcmEgdXNvIGVtIHJlZ2V4LlxuICAgKi9cbiAgcHJpdmF0ZSBzYW5pdGl6ZUZvclJlZ2V4KHVuc2FuaXRpemVkU3RyaW5nOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB1bnNhbml0aXplZFN0cmluZy5yZXBsYWNlKC9bLis/XiR7fSgpfFtcXF1cXFxcXS9nLCAnXFxcXCQmJyk7IC8vICQmIG1lYW5zIHRoZSB3aG9sZSBtYXRjaGVkIHN0cmluZ1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { UntypedFormGroup, UntypedFormArray } from '@angular/forms';
|
|
2
|
+
export class FormUtils {
|
|
3
|
+
// Verifica se um campo é inválido (Template Driven)
|
|
4
|
+
static isInvalidFieldTemplate(control) {
|
|
5
|
+
const ret = !control.valid && (control.dirty || control.touched);
|
|
6
|
+
return (ret ? ret : false);
|
|
7
|
+
}
|
|
8
|
+
// Verifica se um campo é inválido (Data Driven)
|
|
9
|
+
static isInvalidField(control) {
|
|
10
|
+
return (control ? !control.valid && (control.dirty || control.touched) : false);
|
|
11
|
+
}
|
|
12
|
+
// Valida todos os campos do formulário
|
|
13
|
+
static validateFields(formGroup) {
|
|
14
|
+
Object.keys(formGroup.controls).forEach(field => {
|
|
15
|
+
const control = formGroup.get(field);
|
|
16
|
+
control?.markAsDirty();
|
|
17
|
+
control?.markAsTouched();
|
|
18
|
+
if (control instanceof UntypedFormGroup || control instanceof UntypedFormArray) {
|
|
19
|
+
this.validateFields(control);
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
// Obtém a mensagem de erro conforme o validador utilizado
|
|
24
|
+
static getErrorMessage(fieldName, validatorName, validatorValue) {
|
|
25
|
+
const config = {
|
|
26
|
+
'required': `${fieldName} é obrigatório.`,
|
|
27
|
+
'minlength': `${fieldName} precisa ter no mínimo ${validatorValue.requiredLength} caracteres.`,
|
|
28
|
+
'maxlength': `${fieldName} precisa ter no máximo ${validatorValue.requiredLength} caracteres.`,
|
|
29
|
+
'min': `${fieldName} precisam ser no mínimo ${validatorValue.min}.`,
|
|
30
|
+
'max': `${fieldName} podem ser no máximo ${validatorValue.max}.`,
|
|
31
|
+
'cpcnpjInvalid': `${fieldName} é inválido.`,
|
|
32
|
+
'cpcnpjInvalidDigit': `${fieldName} com digito inválido.`,
|
|
33
|
+
'incorrect': `O valor de ${fieldName} é inválido.`,
|
|
34
|
+
};
|
|
35
|
+
return (config[validatorName] ? config[validatorName] : `${validatorName} não implementado`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZm9ybS11dGlscy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3V0aWxzL2Zvcm0tdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUE4QixnQkFBZ0IsRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRWhHLE1BQU0sT0FBTyxTQUFTO0lBRXBCLG9EQUFvRDtJQUNwRCxNQUFNLENBQUMsc0JBQXNCLENBQUMsT0FBa0I7UUFDOUMsTUFBTSxHQUFHLEdBQVEsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUM1QixDQUFDO0lBRUQsZ0RBQWdEO0lBQ2hELE1BQU0sQ0FBQyxjQUFjLENBQUMsT0FBK0I7UUFDbkQsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2xGLENBQUM7SUFFRCx1Q0FBdUM7SUFDdkMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxTQUE4QztRQUNsRSxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDOUMsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUVyQyxPQUFPLEVBQUUsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxFQUFFLGFBQWEsRUFBRSxDQUFDO1lBRXpCLElBQUksT0FBTyxZQUFZLGdCQUFnQixJQUFJLE9BQU8sWUFBWSxnQkFBZ0IsRUFBRTtnQkFDOUUsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQzthQUM5QjtRQUVILENBQUMsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUVELDBEQUEwRDtJQUMxRCxNQUFNLENBQUMsZUFBZSxDQUFDLFNBQWlCLEVBQUUsYUFBcUIsRUFBRSxjQUFvQjtRQUVuRixNQUFNLE1BQU0sR0FBUztZQUNuQixVQUFVLEVBQUUsR0FBRyxTQUFTLGlCQUFpQjtZQUN6QyxXQUFXLEVBQUUsR0FBRyxTQUFTLDBCQUEwQixjQUFjLENBQUMsY0FBYyxjQUFjO1lBQzlGLFdBQVcsRUFBRSxHQUFHLFNBQVMsMEJBQTBCLGNBQWMsQ0FBQyxjQUFjLGNBQWM7WUFDOUYsS0FBSyxFQUFFLEdBQUcsU0FBUywyQkFBMkIsY0FBYyxDQUFDLEdBQUcsR0FBRztZQUNuRSxLQUFLLEVBQUUsR0FBRyxTQUFTLHdCQUF3QixjQUFjLENBQUMsR0FBRyxHQUFHO1lBQ2hFLGVBQWUsRUFBRSxHQUFHLFNBQVMsY0FBYztZQUMzQyxvQkFBb0IsRUFBRSxHQUFHLFNBQVMsdUJBQXVCO1lBQ3pELFdBQVcsRUFBRSxjQUFjLFNBQVMsY0FBYztTQUNuRCxDQUFDO1FBRUYsT0FBTyxDQUFDLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLGFBQWEsbUJBQW1CLENBQUMsQ0FBQztJQUMvRixDQUFDO0NBRUYiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBBYnN0cmFjdENvbnRyb2wsIE5nQ29udHJvbCwgVW50eXBlZEZvcm1Hcm91cCwgVW50eXBlZEZvcm1BcnJheSB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcclxuXHJcbmV4cG9ydCBjbGFzcyBGb3JtVXRpbHMge1xyXG5cclxuICAvLyBWZXJpZmljYSBzZSB1bSBjYW1wbyDDqSBpbnbDoWxpZG8gKFRlbXBsYXRlIERyaXZlbilcclxuICBzdGF0aWMgaXNJbnZhbGlkRmllbGRUZW1wbGF0ZShjb250cm9sOiBOZ0NvbnRyb2wpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IHJldDogYW55ID0gIWNvbnRyb2wudmFsaWQgJiYgKGNvbnRyb2wuZGlydHkgfHwgY29udHJvbC50b3VjaGVkKTtcclxuICBcclxuICAgIHJldHVybiAocmV0ID8gcmV0IDogZmFsc2UpXHJcbiAgfVxyXG4gIFxyXG4gIC8vIFZlcmlmaWNhIHNlIHVtIGNhbXBvIMOpIGludsOhbGlkbyAoRGF0YSBEcml2ZW4pXHJcbiAgc3RhdGljIGlzSW52YWxpZEZpZWxkKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCB8IG51bGwpOiBib29sZWFuIHtcclxuICAgIHJldHVybiAoY29udHJvbCA/ICFjb250cm9sLnZhbGlkICYmIChjb250cm9sLmRpcnR5IHx8IGNvbnRyb2wudG91Y2hlZCkgOiBmYWxzZSk7XHJcbiAgfVxyXG5cclxuICAvLyBWYWxpZGEgdG9kb3Mgb3MgY2FtcG9zIGRvIGZvcm11bMOhcmlvXHJcbiAgc3RhdGljIHZhbGlkYXRlRmllbGRzKGZvcm1Hcm91cDogVW50eXBlZEZvcm1Hcm91cCB8IFVudHlwZWRGb3JtQXJyYXkpOiB2b2lkIHtcclxuICAgIE9iamVjdC5rZXlzKGZvcm1Hcm91cC5jb250cm9scykuZm9yRWFjaChmaWVsZCA9PiB7XHJcbiAgICAgIGNvbnN0IGNvbnRyb2wgPSBmb3JtR3JvdXAuZ2V0KGZpZWxkKTtcclxuICBcclxuICAgICAgY29udHJvbD8ubWFya0FzRGlydHkoKTtcclxuICAgICAgY29udHJvbD8ubWFya0FzVG91Y2hlZCgpO1xyXG4gICAgICBcclxuICAgICAgaWYgKGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUdyb3VwIHx8IGNvbnRyb2wgaW5zdGFuY2VvZiBVbnR5cGVkRm9ybUFycmF5KSB7XHJcbiAgICAgICAgdGhpcy52YWxpZGF0ZUZpZWxkcyhjb250cm9sKTtcclxuICAgICAgfVxyXG4gIFxyXG4gICAgfSk7XHJcbiAgXHJcbiAgfSAgICAgXHJcbiAgICAgIFxyXG4gIC8vIE9idMOpbSBhIG1lbnNhZ2VtIGRlIGVycm8gY29uZm9ybWUgbyB2YWxpZGFkb3IgdXRpbGl6YWRvXHJcbiAgc3RhdGljIGdldEVycm9yTWVzc2FnZShmaWVsZE5hbWU6IHN0cmluZywgdmFsaWRhdG9yTmFtZTogc3RyaW5nLCB2YWxpZGF0b3JWYWx1ZT86IGFueSk6IHN0cmluZyB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgY29uc3QgY29uZmlnIDogYW55ID0ge1xyXG4gICAgICAncmVxdWlyZWQnOiBgJHtmaWVsZE5hbWV9IMOpIG9icmlnYXTDs3Jpby5gLFxyXG4gICAgICAnbWlubGVuZ3RoJzogYCR7ZmllbGROYW1lfSBwcmVjaXNhIHRlciBubyBtw61uaW1vICR7dmFsaWRhdG9yVmFsdWUucmVxdWlyZWRMZW5ndGh9IGNhcmFjdGVyZXMuYCxcclxuICAgICAgJ21heGxlbmd0aCc6IGAke2ZpZWxkTmFtZX0gcHJlY2lzYSB0ZXIgbm8gbcOheGltbyAke3ZhbGlkYXRvclZhbHVlLnJlcXVpcmVkTGVuZ3RofSBjYXJhY3RlcmVzLmAsXHJcbiAgICAgICdtaW4nOiBgJHtmaWVsZE5hbWV9IHByZWNpc2FtIHNlciBubyBtw61uaW1vICR7dmFsaWRhdG9yVmFsdWUubWlufS5gLFxyXG4gICAgICAnbWF4JzogYCR7ZmllbGROYW1lfSBwb2RlbSBzZXIgbm8gbcOheGltbyAke3ZhbGlkYXRvclZhbHVlLm1heH0uYCxcclxuICAgICAgJ2NwY25wakludmFsaWQnOiBgJHtmaWVsZE5hbWV9IMOpIGludsOhbGlkby5gLFxyXG4gICAgICAnY3BjbnBqSW52YWxpZERpZ2l0JzogYCR7ZmllbGROYW1lfSBjb20gZGlnaXRvIGludsOhbGlkby5gLFxyXG4gICAgICAnaW5jb3JyZWN0JzogYE8gdmFsb3IgZGUgJHtmaWVsZE5hbWV9IMOpIGludsOhbGlkby5gLFxyXG4gICAgfTtcclxuXHJcbiAgICByZXR1cm4gKGNvbmZpZ1t2YWxpZGF0b3JOYW1lXSA/IGNvbmZpZ1t2YWxpZGF0b3JOYW1lXSA6IGAke3ZhbGlkYXRvck5hbWV9IG7Do28gaW1wbGVtZW50YWRvYCk7XHJcbiAgfVxyXG5cclxufVxyXG4iXX0=
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { take } from 'rxjs/operators';
|
|
3
|
+
import * as i0 from "@angular/core";
|
|
4
|
+
import * as i1 from "@angular/common/http";
|
|
5
|
+
export class IpServiceService {
|
|
6
|
+
constructor(_httpClient) {
|
|
7
|
+
this._httpClient = _httpClient;
|
|
8
|
+
}
|
|
9
|
+
getIPAddress() {
|
|
10
|
+
return this._httpClient.get("http://api.ipify.org/?format=json")
|
|
11
|
+
.pipe(take(1));
|
|
12
|
+
}
|
|
13
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: IpServiceService, deps: [{ token: i1.HttpClient }], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
14
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: IpServiceService, providedIn: 'root' }); }
|
|
15
|
+
}
|
|
16
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: IpServiceService, decorators: [{
|
|
17
|
+
type: Injectable,
|
|
18
|
+
args: [{
|
|
19
|
+
providedIn: 'root'
|
|
20
|
+
}]
|
|
21
|
+
}], ctorParameters: function () { return [{ type: i1.HttpClient }]; } });
|
|
22
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaXAtc2VydmljZS5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbmd4LXNwLWluZnJhL3NyYy9saWIvdXRpbHMvaXAtc2VydmljZS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFHM0MsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGdCQUFnQixDQUFDOzs7QUFLdEMsTUFBTSxPQUFPLGdCQUFnQjtJQUUzQixZQUFxQixXQUF1QjtRQUF2QixnQkFBVyxHQUFYLFdBQVcsQ0FBWTtJQUFLLENBQUM7SUFFbEQsWUFBWTtRQUVWLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsbUNBQW1DLENBQUM7YUFDN0QsSUFBSSxDQUNILElBQUksQ0FBQyxDQUFDLENBQUMsQ0FDUixDQUFDO0lBRU4sQ0FBQzs4R0FYVSxnQkFBZ0I7a0hBQWhCLGdCQUFnQixjQUZmLE1BQU07OzJGQUVQLGdCQUFnQjtrQkFINUIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XHJcbmltcG9ydCB7IEh0dHBDbGllbnQgfSBmcm9tICdAYW5ndWxhci9jb21tb24vaHR0cCc7XHJcblxyXG5pbXBvcnQgeyB0YWtlIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgSXBTZXJ2aWNlU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCBwcml2YXRlIF9odHRwQ2xpZW50OiBIdHRwQ2xpZW50ICkgeyB9XHJcblxyXG4gIGdldElQQWRkcmVzcygpOiBhbnkgXHJcbiAgeyAgXHJcbiAgICByZXR1cm4gdGhpcy5faHR0cENsaWVudC5nZXQoXCJodHRwOi8vYXBpLmlwaWZ5Lm9yZy8/Zm9ybWF0PWpzb25cIilcclxuICAgICAgLnBpcGUoXHJcbiAgICAgICAgdGFrZSgxKVxyXG4gICAgICApO1xyXG5cclxuICB9XHJcblxyXG59XHJcbiJdfQ==
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export class SettingsService {
|
|
4
|
+
constructor() { }
|
|
5
|
+
getLocaleId() {
|
|
6
|
+
//Aqui implementar busca do LOCALE_ID
|
|
7
|
+
//return 'en-US';
|
|
8
|
+
return 'pt-BR';
|
|
9
|
+
}
|
|
10
|
+
getDefaultCurrencyCode() {
|
|
11
|
+
//Aqui implementar busca do DEFAULT_CURRENCY_CODE
|
|
12
|
+
//return 'USD';
|
|
13
|
+
return 'BRL';
|
|
14
|
+
}
|
|
15
|
+
getCurrencyBR(numero) {
|
|
16
|
+
const formata = new Intl.NumberFormat('pt-BR', {
|
|
17
|
+
style: 'currency',
|
|
18
|
+
currency: 'BRL',
|
|
19
|
+
minimumFractionDigits: 2
|
|
20
|
+
});
|
|
21
|
+
return formata.format(numero);
|
|
22
|
+
}
|
|
23
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: SettingsService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
24
|
+
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: SettingsService, providedIn: 'root' }); }
|
|
25
|
+
}
|
|
26
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: SettingsService, decorators: [{
|
|
27
|
+
type: Injectable,
|
|
28
|
+
args: [{
|
|
29
|
+
providedIn: 'root'
|
|
30
|
+
}]
|
|
31
|
+
}], ctorParameters: function () { return []; } });
|
|
32
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0dGluZ3Muc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3V0aWxzL3NldHRpbmdzLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFLM0MsTUFBTSxPQUFPLGVBQWU7SUFFMUIsZ0JBQWdCLENBQUM7SUFFakIsV0FBVztRQUNULHFDQUFxQztRQUNyQyxpQkFBaUI7UUFDakIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVELHNCQUFzQjtRQUNwQixpREFBaUQ7UUFDakQsZUFBZTtRQUNmLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztJQUVELGFBQWEsQ0FBRyxNQUFjO1FBRXRCLE1BQU0sT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDLFlBQVksQ0FBRSxPQUFPLEVBQUU7WUFDeEMsS0FBSyxFQUFFLFVBQVU7WUFDakIsUUFBUSxFQUFFLEtBQUs7WUFDZixxQkFBcUIsRUFBRSxDQUFDO1NBQy9CLENBQUUsQ0FBQztRQUNKLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBRSxNQUFNLENBQUUsQ0FBQztJQUN4QyxDQUFDOzhHQXhCVSxlQUFlO2tIQUFmLGVBQWUsY0FGZCxNQUFNOzsyRkFFUCxlQUFlO2tCQUgzQixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuXHJcbkBJbmplY3RhYmxlKHtcclxuICBwcm92aWRlZEluOiAncm9vdCdcclxufSlcclxuZXhwb3J0IGNsYXNzIFNldHRpbmdzU2VydmljZSB7XHJcblxyXG4gIGNvbnN0cnVjdG9yKCkgeyB9XHJcblxyXG4gIGdldExvY2FsZUlkKCkge1xyXG4gICAgLy9BcXVpIGltcGxlbWVudGFyIGJ1c2NhIGRvIExPQ0FMRV9JRFxyXG4gICAgLy9yZXR1cm4gJ2VuLVVTJztcclxuICAgIHJldHVybiAncHQtQlInO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGVmYXVsdEN1cnJlbmN5Q29kZSgpIHtcclxuICAgIC8vQXF1aSBpbXBsZW1lbnRhciBidXNjYSBkbyBERUZBVUxUX0NVUlJFTkNZX0NPREVcclxuICAgIC8vcmV0dXJuICdVU0QnO1xyXG4gICAgcmV0dXJuICdCUkwnO1xyXG4gIH1cclxuXHJcbiAgZ2V0Q3VycmVuY3lCUiAoIG51bWVybzogbnVtYmVyICk6IHN0cmluZ1xyXG4gIHtcclxuICAgICAgICAgIGNvbnN0IGZvcm1hdGEgPSBuZXcgSW50bC5OdW1iZXJGb3JtYXQoICdwdC1CUicsIHtcclxuICAgICAgICAgICAgICAgICAgc3R5bGU6ICdjdXJyZW5jeScsXHJcbiAgICAgICAgICAgICAgICAgIGN1cnJlbmN5OiAnQlJMJyxcclxuICAgICAgICAgICAgICAgICAgbWluaW11bUZyYWN0aW9uRGlnaXRzOiAyXHJcbiAgICAgICAgICB9ICk7XHJcbiAgICAgICAgICByZXR1cm4gZm9ybWF0YS5mb3JtYXQoIG51bWVybyApO1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
export class Utils {
|
|
2
|
+
// Obtém a mensagem de erro de uma requisição http
|
|
3
|
+
static getHttpErrorMessage(error) {
|
|
4
|
+
let errorMessage = '';
|
|
5
|
+
if (error.error instanceof ErrorEvent) {
|
|
6
|
+
// Erro ocorreu no lado do client
|
|
7
|
+
errorMessage = error.error.message;
|
|
8
|
+
}
|
|
9
|
+
else {
|
|
10
|
+
// Erro ocorreu no lado do servidor
|
|
11
|
+
if (error.status) {
|
|
12
|
+
if (error.status == 200) {
|
|
13
|
+
if (error.error) {
|
|
14
|
+
if (error.error.ErrorMessage) {
|
|
15
|
+
errorMessage = `${error.error.ErrorMessage}`;
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
errorMessage = `${error.error.Message}`;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
else {
|
|
22
|
+
errorMessage = error.message;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
if (error.error) {
|
|
27
|
+
if (error.error.ErrorMessage) {
|
|
28
|
+
errorMessage = `${error.error.ErrorMessage}<br><br>${error.status} - ${error.statusText}`;
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
errorMessage = `${error.error.Message}<br><br>${error.status} - ${error.statusText}`;
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
errorMessage = error.message;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
errorMessage = error.message;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return errorMessage;
|
|
44
|
+
}
|
|
45
|
+
;
|
|
46
|
+
static convertDateTimeToDateString(date) {
|
|
47
|
+
const dateString = date.toString().split('T')[0].split('-');
|
|
48
|
+
return `${dateString[0]}-${dateString[1]}-${dateString[2]}`;
|
|
49
|
+
}
|
|
50
|
+
static convertStringToDate(text) {
|
|
51
|
+
const dateString = text.split('-');
|
|
52
|
+
return new Date(+dateString[0], (+dateString[1]) - 1, +dateString[2]);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Verifica se um determinado ano é bissexto.
|
|
56
|
+
* @param year Ano a ser verificado.
|
|
57
|
+
* @returns Retorna true se o ano for bissexto e false se ele não for, ou se o ano informado for inválido.
|
|
58
|
+
*/
|
|
59
|
+
static isLeapYear(year) {
|
|
60
|
+
const YEAR_NUMBER = typeof year === 'string' ? parseInt(year) : year;
|
|
61
|
+
if (!isNaN(YEAR_NUMBER)) {
|
|
62
|
+
if ((YEAR_NUMBER % 4 === 0 && YEAR_NUMBER % 100 !== 0) || YEAR_NUMBER % 400 === 0)
|
|
63
|
+
return true;
|
|
64
|
+
else
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
else
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Verifica se uma determinada data é indeterminada.
|
|
72
|
+
* @param dateTime Data a ser verificada.
|
|
73
|
+
* @returns Retorna true se for indeterminada e false se não for.
|
|
74
|
+
*/
|
|
75
|
+
static verifyDateIsIndeterminate(dateTime) {
|
|
76
|
+
return dateTime.toString().split('T')[0] === '2099-12-31';
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Verifica se uma determinada data é nula (igual a '1900-01-01T00:00:00').
|
|
80
|
+
* @param dateTime Data a ser verificada.
|
|
81
|
+
* @returns Retorna true se for nula e false se não for.
|
|
82
|
+
*/
|
|
83
|
+
static verifyDateIsNull(dateTime) {
|
|
84
|
+
return dateTime.toString().split('T')[0] === '1900-01-01';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Tenta realizar um parse de uma data com os seguintes valores: dd/MM/yyyy HH:mm
|
|
88
|
+
*
|
|
89
|
+
* @param value String que contém a data formatada em pt-br
|
|
90
|
+
* @param dateSeparator Separador da data.
|
|
91
|
+
* @returns
|
|
92
|
+
*/
|
|
93
|
+
static parseDateTime(value, dateSeparator = "/") {
|
|
94
|
+
let usDate = "";
|
|
95
|
+
value = value.trim();
|
|
96
|
+
let dateAndTime = value.split(" ");
|
|
97
|
+
// Possui pelo menos 5 caracteres: 1/1/1
|
|
98
|
+
if (value.length >= 5) {
|
|
99
|
+
let dateSeparated = dateAndTime[0].split(dateSeparator);
|
|
100
|
+
if (dateSeparated.length !== 3) {
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
if (dateSeparated[2].length > 2) {
|
|
104
|
+
dateSeparated[2] = `${dateSeparated[2].charAt(0)}${dateSeparated[2].charAt(1)}`.trim();
|
|
105
|
+
}
|
|
106
|
+
usDate = `${dateSeparated[1]}/${dateSeparated[0]}/${dateSeparated[2]}`;
|
|
107
|
+
}
|
|
108
|
+
if (dateAndTime.length === 2) {
|
|
109
|
+
usDate += ` ${dateAndTime[1]}`;
|
|
110
|
+
}
|
|
111
|
+
let expectedDate = Date.parse(usDate);
|
|
112
|
+
if (expectedDate !== null || expectedDate < 0) {
|
|
113
|
+
return;
|
|
114
|
+
}
|
|
115
|
+
return new Date(expectedDate);
|
|
116
|
+
}
|
|
117
|
+
// Obtém a Data local
|
|
118
|
+
static getDateLocalTime(date) {
|
|
119
|
+
return (new Date(date.getTime() - date.getTimezoneOffset() * 60000));
|
|
120
|
+
}
|
|
121
|
+
// Obtém a Data local no Padrão Iso
|
|
122
|
+
static getDateLocalTimeISO(date) {
|
|
123
|
+
return (this.getDateLocalTime(date).toISOString().replace('.000Z', ''));
|
|
124
|
+
}
|
|
125
|
+
static getDatePickerDate(str) {
|
|
126
|
+
const [dateComponents, timeComponents] = str.split('T');
|
|
127
|
+
const [ano, mes, dia] = dateComponents.split('-');
|
|
128
|
+
const [hora, minuto, segundo] = timeComponents.split(':');
|
|
129
|
+
const date = new Date(Number(ano), Number(mes), Number(dia));
|
|
130
|
+
return date;
|
|
131
|
+
}
|
|
132
|
+
static AdicionaDias(data, days) {
|
|
133
|
+
const find = new Date(Number(data));
|
|
134
|
+
find.setDate(data.getDate() + days);
|
|
135
|
+
return find;
|
|
136
|
+
}
|
|
137
|
+
static DiferencaDias(dataInicial, dataFinal) {
|
|
138
|
+
var Time = dataFinal.getTime() - dataInicial.getTime();
|
|
139
|
+
return Time / (1000 * 3600 * 24);
|
|
140
|
+
}
|
|
141
|
+
static DiferencaMeses(dataInicial, dataFinal) {
|
|
142
|
+
var meses = (dataFinal.getFullYear() - dataInicial.getFullYear()) * 12;
|
|
143
|
+
meses -= dataInicial.getMonth();
|
|
144
|
+
meses += dataFinal.getMonth();
|
|
145
|
+
return meses <= 0 ? 0 : meses;
|
|
146
|
+
}
|
|
147
|
+
//Obtém a Data UTC com hora zerada
|
|
148
|
+
static getDateUTC(date) {
|
|
149
|
+
//codigo original
|
|
150
|
+
//return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));
|
|
151
|
+
let dataSaida;
|
|
152
|
+
try {
|
|
153
|
+
dataSaida = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);
|
|
154
|
+
}
|
|
155
|
+
catch (error) {
|
|
156
|
+
//Quando date chega neste formato: 2022-06-20T00:00:00
|
|
157
|
+
//tento pegar ano/mes/dia direto
|
|
158
|
+
//Date(DtIniFer.getUTCFullYear(), DtIniFer.getUTCMonth(), DtIniFer.getUTCDate(), 0 , 0 , 0);
|
|
159
|
+
//e não funciona
|
|
160
|
+
const dia = date.toString().substring(8, 10);
|
|
161
|
+
const mes = date.toString().substring(5, 7);
|
|
162
|
+
const ano = date.toString().substring(0, 4);
|
|
163
|
+
dataSaida = new Date(Number(ano), Number(mes) - 1, Number(dia), 0, 0, 0);
|
|
164
|
+
}
|
|
165
|
+
return dataSaida;
|
|
166
|
+
}
|
|
167
|
+
//Obtém a Data UTC com hora zerada
|
|
168
|
+
static getDateddMMyyy(date) {
|
|
169
|
+
//codigo original
|
|
170
|
+
//return new Date(date.getTime() + (date.getTimezoneOffset() * 60000));
|
|
171
|
+
let dataSaida;
|
|
172
|
+
try {
|
|
173
|
+
dataSaida = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);
|
|
174
|
+
}
|
|
175
|
+
catch (error) {
|
|
176
|
+
//Quando date chega neste formato: 2022-06-20T00:00:00
|
|
177
|
+
//tento pegar ano/mes/dia direto
|
|
178
|
+
//Date(DtIniFer.getUTCFullYear(), DtIniFer.getUTCMonth(), DtIniFer.getUTCDate(), 0 , 0 , 0);
|
|
179
|
+
//e não funciona
|
|
180
|
+
const dia = date.toString().substring(8, 10);
|
|
181
|
+
const mes = date.toString().substring(5, 7);
|
|
182
|
+
const ano = date.toString().substring(0, 4);
|
|
183
|
+
dataSaida = new Date(Number(ano), Number(mes) - 1, Number(dia), 0, 0, 0);
|
|
184
|
+
}
|
|
185
|
+
function pad(s) { return (s < 10) ? '0' + s : s; }
|
|
186
|
+
return [pad(dataSaida.getUTCDate()), pad(dataSaida.getUTCMonth() + 1), pad(dataSaida.getUTCFullYear())].join('/');
|
|
187
|
+
}
|
|
188
|
+
//Obtém a Data UTC com a hora
|
|
189
|
+
static getDateddMMyyyyHhmmss(date) {
|
|
190
|
+
let dataSaida;
|
|
191
|
+
try {
|
|
192
|
+
dataSaida = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
193
|
+
}
|
|
194
|
+
catch (error) {
|
|
195
|
+
//Quando date chega neste formato: 2022-06-20T00:00:00
|
|
196
|
+
//tento pegar ano/mes/dia direto
|
|
197
|
+
//Date(DtIniFer.getUTCFullYear(), DtIniFer.getUTCMonth(), DtIniFer.getUTCDate(), 0 , 0 , 0);
|
|
198
|
+
//e não funciona
|
|
199
|
+
const dia = date.toString().substring(8, 10);
|
|
200
|
+
const mes = date.toString().substring(5, 7);
|
|
201
|
+
const ano = date.toString().substring(0, 4);
|
|
202
|
+
const hora = date.toString().substring(11, 13);
|
|
203
|
+
const minutos = date.toString().substring(14, 16);
|
|
204
|
+
const segundos = date.toString().substring(17, 19);
|
|
205
|
+
dataSaida = new Date(Number(ano), Number(mes) - 1, Number(dia), Number(hora), Number(minutos), Number(segundos));
|
|
206
|
+
}
|
|
207
|
+
function pad(s) { return (s < 10) ? '0' + s : s; }
|
|
208
|
+
let dataFormatada = [pad(dataSaida.getDate()), pad(dataSaida.getUTCMonth() + 1), pad(dataSaida.getUTCFullYear())].join('/');
|
|
209
|
+
dataFormatada += " ";
|
|
210
|
+
dataFormatada += [pad(dataSaida.getHours()), pad(dataSaida.getMinutes()), pad(dataSaida.getSeconds())].join(':');
|
|
211
|
+
return dataFormatada;
|
|
212
|
+
}
|
|
213
|
+
static UltimoDiaMes(data) {
|
|
214
|
+
let dataSaida = this.getDateTimeUTC(data);
|
|
215
|
+
// adiciona 1 mes
|
|
216
|
+
dataSaida.setMonth(dataSaida.getUTCMonth() + 1);
|
|
217
|
+
//Posiciona no dia 01 do mes adicionado
|
|
218
|
+
dataSaida = new Date(dataSaida.getUTCFullYear(), dataSaida.getUTCMonth(), 1, 0, 0, 0);
|
|
219
|
+
// subtrai 1 dia para ir para o ultimo dia do mes
|
|
220
|
+
dataSaida.setDate(dataSaida.getDate() - 1);
|
|
221
|
+
return dataSaida;
|
|
222
|
+
}
|
|
223
|
+
//Obtém a Data/hora UTC
|
|
224
|
+
static getDateTimeUTC(date) {
|
|
225
|
+
let dataSaida;
|
|
226
|
+
try {
|
|
227
|
+
dataSaida = new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getHours(), date.getMinutes(), date.getSeconds());
|
|
228
|
+
}
|
|
229
|
+
catch (error) {
|
|
230
|
+
//Quando date chega neste formato: 2022-06-20T11:12:13
|
|
231
|
+
const dia = date.toString().substring(8, 10);
|
|
232
|
+
const mes = date.toString().substring(5, 7);
|
|
233
|
+
const ano = date.toString().substring(0, 4);
|
|
234
|
+
const hora = date.toString().substring(11, 13);
|
|
235
|
+
const min = date.toString().substring(14, 16);
|
|
236
|
+
const seg = date.toString().substring(17, 19);
|
|
237
|
+
dataSaida = new Date(Number(ano), Number(mes) - 1, Number(dia), Number(hora), Number(min), Number(seg));
|
|
238
|
+
}
|
|
239
|
+
return dataSaida;
|
|
240
|
+
}
|
|
241
|
+
static compareEqualDates(date1, date2) {
|
|
242
|
+
let strDate1 = Utils.getDateddMMyyy(date1);
|
|
243
|
+
let strDate2 = Utils.getDateddMMyyy(date2);
|
|
244
|
+
if (strDate1 === strDate2) {
|
|
245
|
+
return true;
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
return false;
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
static convertMMYYYYToDate(value) {
|
|
252
|
+
value = value.replace('/', '');
|
|
253
|
+
let month = Number(value.substring(0, 2));
|
|
254
|
+
let year = Number(value.substring(2, 6));
|
|
255
|
+
//Diminui 1 pois no angular existe um índice do mês que não é igual ao mês.
|
|
256
|
+
month = month - 1;
|
|
257
|
+
return new Date(year, month, 1);
|
|
258
|
+
}
|
|
259
|
+
static getNullDate() {
|
|
260
|
+
return new Date(1900, 0, 1, 0, 0, 0);
|
|
261
|
+
}
|
|
262
|
+
static getDateWebServiceFormat(value) {
|
|
263
|
+
if (value.toString() == '') {
|
|
264
|
+
return '1900-01-01';
|
|
265
|
+
}
|
|
266
|
+
let data = Utils.getDateddMMyyy(value);
|
|
267
|
+
return data.substring(6, 10) + '-' + data.substring(3, 5) + '-' + data.substring(0, 2);
|
|
268
|
+
}
|
|
269
|
+
static getDateTimeWebServiceFormat(value) {
|
|
270
|
+
if (value.toString() == '' || Utils.getDateddMMyyy(value) == Utils.getDateddMMyyy(this.getNullDate())) {
|
|
271
|
+
return '1900-01-01T00:00:00';
|
|
272
|
+
}
|
|
273
|
+
let data = this.getDateddMMyyyyHhmmss(value);
|
|
274
|
+
let dataFormatada = data.substring(6, 10) + '-' + data.substring(3, 5) + '-' + data.substring(0, 2);
|
|
275
|
+
dataFormatada = dataFormatada + 'T';
|
|
276
|
+
dataFormatada = dataFormatada + data.substring(11, 13) + ':' + data.substring(14, 16) + ':' + data.substring(17, 19);
|
|
277
|
+
return dataFormatada;
|
|
278
|
+
}
|
|
279
|
+
//Transforma a string Base64 num array de bytes e faz o download do arquivo.
|
|
280
|
+
static downloadFileBase64(fleName, file) {
|
|
281
|
+
const byteString = window.atob(file);
|
|
282
|
+
const arrayBuffer = new ArrayBuffer(byteString.length);
|
|
283
|
+
const int8Array = new Uint8Array(arrayBuffer);
|
|
284
|
+
for (let i = 0; i < byteString.length; i++) {
|
|
285
|
+
int8Array[i] = byteString.charCodeAt(i);
|
|
286
|
+
}
|
|
287
|
+
const blob = new Blob([int8Array]);
|
|
288
|
+
const url = window.URL.createObjectURL(blob);
|
|
289
|
+
//Abio
|
|
290
|
+
//O window.open foi comentado porque no download dos arquivos digitais abria uma janela com o blob do arquivo.
|
|
291
|
+
//Comentar não afetou o download do contra-cheque.
|
|
292
|
+
//window.open(url);
|
|
293
|
+
var a = document.createElement('a');
|
|
294
|
+
a.href = url;
|
|
295
|
+
a.target = '_blank';
|
|
296
|
+
a.download = fleName;
|
|
297
|
+
document.body.appendChild(a);
|
|
298
|
+
a.click();
|
|
299
|
+
}
|
|
300
|
+
/**
|
|
301
|
+
* Abre o popup do navegador para baixar um arquivo que veio de um blob.
|
|
302
|
+
*
|
|
303
|
+
* @param blob Conteúdo do arquivo binário a ser baixado.
|
|
304
|
+
* @param fileName Nome do arquivo a ser salvo.
|
|
305
|
+
*/
|
|
306
|
+
static downloadFile(blob, fileName) {
|
|
307
|
+
const anchor = window.document.createElement('a');
|
|
308
|
+
anchor.href = window.URL.createObjectURL(blob);
|
|
309
|
+
anchor.download = fileName;
|
|
310
|
+
document.body.appendChild(anchor);
|
|
311
|
+
anchor.click();
|
|
312
|
+
document.body.removeChild(anchor);
|
|
313
|
+
window.URL.revokeObjectURL(anchor.href);
|
|
314
|
+
}
|
|
315
|
+
static b64DecodeUnicode(str) {
|
|
316
|
+
// Going backwards: from bytestream, to percent-encoding, to original string.
|
|
317
|
+
return decodeURIComponent(atob(str).split('').map(c => {
|
|
318
|
+
return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2);
|
|
319
|
+
}).join(''));
|
|
320
|
+
}
|
|
321
|
+
static b64EncodeUnicode(str) {
|
|
322
|
+
// first we use encodeURIComponent to get percent-encoded UTF-8,
|
|
323
|
+
// then we convert the percent encodings into raw bytes which
|
|
324
|
+
// can be fed into btoa.
|
|
325
|
+
return btoa(encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => {
|
|
326
|
+
return String.fromCharCode(("0x" + p1));
|
|
327
|
+
}));
|
|
328
|
+
}
|
|
329
|
+
//Largura a partir de onde remonta o ngx_datatable para mobile
|
|
330
|
+
static getIsMobile() {
|
|
331
|
+
const width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth;
|
|
332
|
+
return width < 768;
|
|
333
|
+
}
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9uZ3gtc3AtaW5mcmEvc3JjL2xpYi91dGlscy91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxNQUFNLE9BQU8sS0FBSztJQUVoQixrREFBa0Q7SUFDM0MsTUFBTSxDQUFDLG1CQUFtQixDQUFDLEtBQVU7UUFFMUMsSUFBSSxZQUFZLEdBQVcsRUFBRSxDQUFDO1FBRTlCLElBQUksS0FBSyxDQUFDLEtBQUssWUFBWSxVQUFVLEVBQUU7WUFDckMsaUNBQWlDO1lBQ2pDLFlBQVksR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQztTQUNwQzthQUFNO1lBRUwsbUNBQW1DO1lBQ25DLElBQUksS0FBSyxDQUFDLE1BQU0sRUFBRTtnQkFFaEIsSUFBSSxLQUFLLENBQUMsTUFBTSxJQUFJLEdBQUcsRUFBRTtvQkFFdkIsSUFBSSxLQUFLLENBQUMsS0FBSyxFQUFFO3dCQUVmLElBQUksS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUU7NEJBQzVCLFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUFFLENBQUM7eUJBQzlDOzZCQUNJOzRCQUNILFlBQVksR0FBRyxHQUFHLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUM7eUJBQ3pDO3FCQUVGO3lCQUFNO3dCQUNMLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDO3FCQUM5QjtpQkFFRjtxQkFDSTtvQkFFSCxJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUU7d0JBRWYsSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRTs0QkFDNUIsWUFBWSxHQUFHLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxZQUFZLFdBQVcsS0FBSyxDQUFDLE1BQU0sTUFBTSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7eUJBQzNGOzZCQUNJOzRCQUNILFlB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S0FBSyxDQUFDLENBQUM7UUFFN0MsSUFBSSxhQUFhLEdBQVcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM1RyxhQUFhLEdBQUcsYUFBYSxHQUFHLEdBQUcsQ0FBQztRQUNwQyxhQUFhLEdBQUcsYUFBYSxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFckgsT0FBTyxhQUFhLENBQUM7SUFDdkIsQ0FBQztJQUVELDRFQUE0RTtJQUNyRSxNQUFNLENBQUMsa0JBQWtCLENBQUMsT0FBZSxFQUFFLElBQVk7UUFDNUQsTUFBTSxVQUFVLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNyQyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDdkQsTUFBTSxTQUFTLEdBQUcsSUFBSSxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFOUMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7WUFDMUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7U0FDekM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7UUFFN0MsTUFBTTtRQUNOLCtHQUErRztRQUMvRyxvREFBb0Q7UUFDcEQsbUJBQW1CO1FBQ25CLElBQUksQ0FBQyxHQUFHLFFBQVEsQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFcEMsQ0FBQyxDQUFDLElBQUksR0FBRyxHQUFHLENBQUM7UUFDYixDQUFDLENBQUMsTUFBTSxHQUFHLFFBQVEsQ0FBQztRQUNwQixDQUFDLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztRQUVyQixRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUU3QixDQUFDLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDWixDQUFDO0lBRUQ7Ozs7O01BS0U7SUFDSyxNQUFNLENBQUMsWUFBWSxDQUFDLElBQVUsRUFBRSxRQUFnQjtRQUNyRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVsRCxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQy9DLE1BQU0sQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBRTNCLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRWxDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUVmLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxHQUFHLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRU0sTUFBTSxDQUFDLGdCQUFnQixDQUFDLEdBQVc7UUFDeEMsNkVBQTZFO1FBQzdFLE9BQU8sa0JBQWtCLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDcEQsT0FBTyxHQUFHLEdBQUcsQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvRCxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztJQUNmLENBQUM7SUFFTSxNQUFNLENBQUMsZ0JBQWdCLENBQUMsR0FBVztRQUN4QyxnRUFBZ0U7UUFDaEUsNkRBQTZEO1FBQzdELHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQzNELENBQUMsS0FBSyxFQUFFLEVBQUUsRUFBRSxFQUFFO1lBQ1osT0FBTyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxHQUFHLEVBQUUsQ0FBUSxDQUFDLENBQUM7UUFDakQsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNSLENBQUM7SUFFRCw4REFBOEQ7SUFDdkQsTUFBTSxDQUFDLFdBQVc7UUFDdkIsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLFVBQVUsSUFBSSxRQUFRLENBQUMsZUFBZSxDQUFDLFdBQVcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyRyxPQUFPLEtBQUssR0FBRyxHQUFHLENBQUM7SUFDckIsQ0FBQztDQUVGIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNsYXNzIFV0aWxzIHtcclxuXHJcbiAgLy8gT2J0w6ltIGEgbWVuc2FnZW0gZGUgZXJybyBkZSB1bWEgcmVxdWlzacOnw6NvIGh0dHBcclxuICBwdWJsaWMgc3RhdGljIGdldEh0dHBFcnJvck1lc3NhZ2UoZXJyb3I6IGFueSk6IHN0cmluZyB7XHJcblxyXG4gICAgbGV0IGVycm9yTWVzc2FnZTogc3RyaW5nID0gJyc7XHJcblxyXG4gICAgaWYgKGVycm9yLmVycm9yIGluc3RhbmNlb2YgRXJyb3JFdmVudCkge1xyXG4gICAgICAvLyBFcnJvIG9jb3JyZXUgbm8gbGFkbyBkbyBjbGllbnRcclxuICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IuZXJyb3IubWVzc2FnZTtcclxuICAgIH0gZWxzZSB7XHJcblxyXG4gICAgICAvLyBFcnJvIG9jb3JyZXUgbm8gbGFkbyBkbyBzZXJ2aWRvclxyXG4gICAgICBpZiAoZXJyb3Iuc3RhdHVzKSB7XHJcblxyXG4gICAgICAgIGlmIChlcnJvci5zdGF0dXMgPT0gMjAwKSB7XHJcblxyXG4gICAgICAgICAgaWYgKGVycm9yLmVycm9yKSB7XHJcblxyXG4gICAgICAgICAgICBpZiAoZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlKSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuRXJyb3JNZXNzYWdlfWA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gYCR7ZXJyb3IuZXJyb3IuTWVzc2FnZX1gO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG5cclxuICAgICAgICAgIGlmIChlcnJvci5lcnJvcikge1xyXG5cclxuICAgICAgICAgICAgaWYgKGVycm9yLmVycm9yLkVycm9yTWVzc2FnZSkge1xyXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yLmVycm9yLkVycm9yTWVzc2FnZX08YnI+PGJyPiR7ZXJyb3Iuc3RhdHVzfSAtICR7ZXJyb3Iuc3RhdHVzVGV4dH1gO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGAke2Vycm9yLmVycm9yLk1lc3NhZ2V9PGJyPjxicj4ke2Vycm9yLnN0YXR1c30gLSAke2Vycm9yLnN0YXR1c1RleHR9YDtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGVycm9yTWVzc2FnZSA9IGVycm9yLm1lc3NhZ2U7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgZXJyb3JNZXNzYWdlID0gZXJyb3IubWVzc2FnZTtcclxuICAgICAgfVxyXG5cclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZXJyb3JNZXNzYWdlO1xyXG4gIH07XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgY29udmVydERhdGVUaW1lVG9EYXRlU3RyaW5nKGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgY29uc3QgZGF0ZVN0cmluZzogc3RyaW5nW10gPSBkYXRlLnRvU3RyaW5nKCkuc3BsaXQoJ1QnKVswXS5zcGxpdCgnLScpO1xyXG5cclxuICAgIHJldHVybiBgJHtkYXRlU3RyaW5nWzBdfS0ke2RhdGVTdHJpbmdbMV19LSR7ZGF0ZVN0cmluZ1syXX1gO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0U3RyaW5nVG9EYXRlKHRleHQ6IHN0cmluZyk6IERhdGUge1xyXG4gICAgY29uc3QgZGF0ZVN0cmluZzogc3RyaW5nW10gPSB0ZXh0LnNwbGl0KCctJyk7XHJcblxyXG4gICAgcmV0dXJuIG5ldyBEYXRlKCtkYXRlU3RyaW5nWzBdLCAoK2RhdGVTdHJpbmdbMV0pIC0gMSwgK2RhdGVTdHJpbmdbMl0pO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVmVyaWZpY2Egc2UgdW0gZGV0ZXJtaW5hZG8gYW5vIMOpIGJpc3NleHRvLlxyXG4gICAqIEBwYXJhbSB5ZWFyIEFubyBhIHNlciB2ZXJpZmljYWRvLlxyXG4gICAqIEByZXR1cm5zIFJldG9ybmEgdHJ1ZSBzZSBvIGFubyBmb3IgYmlzc2V4dG8gZSBmYWxzZSBzZSBlbGUgbsOjbyBmb3IsIG91IHNlIG8gYW5vIGluZm9ybWFkbyBmb3IgaW52w6FsaWRvLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgaXNMZWFwWWVhcih5ZWFyOiBudW1iZXIgfCBzdHJpbmcpOiBib29sZWFuIHtcclxuICAgIGNvbnN0IFlFQVJfTlVNQkVSOiBudW1iZXIgPSB0eXBlb2YgeWVhciA9PT0gJ3N0cmluZycgPyBwYXJzZUludCh5ZWFyKSA6IHllYXI7XHJcblxyXG4gICAgaWYgKCFpc05hTihZRUFSX05VTUJFUikpIHtcclxuICAgICAgaWYgKChZRUFSX05VTUJFUiAlIDQgPT09IDAgJiYgWUVBUl9OVU1CRVIgJSAxMDAgIT09IDApIHx8IFlFQVJfTlVNQkVSICUgNDAwID09PSAwKSByZXR1cm4gdHJ1ZTtcclxuICAgICAgZWxzZSByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcbiAgICBlbHNlIHJldHVybiBmYWxzZTtcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIHVtYSBkZXRlcm1pbmFkYSBkYXRhIMOpIGluZGV0ZXJtaW5hZGEuXHJcbiAgICogQHBhcmFtIGRhdGVUaW1lIERhdGEgYSBzZXIgdmVyaWZpY2FkYS5cclxuICAgKiBAcmV0dXJucyBSZXRvcm5hIHRydWUgc2UgZm9yIGluZGV0ZXJtaW5hZGEgZSBmYWxzZSBzZSBuw6NvIGZvci5cclxuICAgKi9cclxuICBwdWJsaWMgc3RhdGljIHZlcmlmeURhdGVJc0luZGV0ZXJtaW5hdGUoZGF0ZVRpbWU6IERhdGUpOiBib29sZWFuIHtcclxuICAgIHJldHVybiBkYXRlVGltZS50b1N0cmluZygpLnNwbGl0KCdUJylbMF0gPT09ICcyMDk5LTEyLTMxJztcclxuICB9XHJcblxyXG4gIC8qKlxyXG4gICAqIFZlcmlmaWNhIHNlIHVtYSBkZXRlcm1pbmFkYSBkYXRhIMOpIG51bGEgKGlndWFsIGEgJzE5MDAtMDEtMDFUMDA6MDA6MDAnKS5cclxuICAgKiBAcGFyYW0gZGF0ZVRpbWUgRGF0YSBhIHNlciB2ZXJpZmljYWRhLlxyXG4gICAqIEByZXR1cm5zIFJldG9ybmEgdHJ1ZSBzZSBmb3IgbnVsYSBlIGZhbHNlIHNlIG7Do28gZm9yLlxyXG4gICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgdmVyaWZ5RGF0ZUlzTnVsbChkYXRlVGltZTogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgcmV0dXJuIGRhdGVUaW1lLnRvU3RyaW5nKCkuc3BsaXQoJ1QnKVswXSA9PT0gJzE5MDAtMDEtMDEnO1xyXG4gIH1cclxuXHJcbiAgLyoqXHJcbiAgICogVGVudGEgcmVhbGl6YXIgdW0gcGFyc2UgZGUgdW1hIGRhdGEgY29tIG9zIHNlZ3VpbnRlcyB2YWxvcmVzOiBkZC9NTS95eXl5IEhIOm1tXHJcbiAgICogXHJcbiAgICogQHBhcmFtIHZhbHVlIFN0cmluZyBxdWUgY29udMOpbSBhIGRhdGEgZm9ybWF0YWRhIGVtIHB0LWJyXHJcbiAgICogQHBhcmFtIGRhdGVTZXBhcmF0b3IgU2VwYXJhZG9yIGRhIGRhdGEuXHJcbiAgICogQHJldHVybnMgXHJcbiAgICovXHJcbiAgcHVibGljIHN0YXRpYyBwYXJzZURhdGVUaW1lKHZhbHVlOiBzdHJpbmcsIGRhdGVTZXBhcmF0b3I6IHN0cmluZyA9IFwiL1wiKTogRGF0ZSB8IHVuZGVmaW5lZCB7XHJcbiAgICBsZXQgdXNEYXRlID0gXCJcIjtcclxuXHJcbiAgICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcclxuXHJcbiAgICBsZXQgZGF0ZUFuZFRpbWU6IHN0cmluZ1tdID0gdmFsdWUuc3BsaXQoXCIgXCIpO1xyXG5cclxuICAgIC8vIFBvc3N1aSBwZWxvIG1lbm9zIDUgY2FyYWN0ZXJlczogMS8xLzFcclxuICAgIGlmICh2YWx1ZS5sZW5ndGggPj0gNSkge1xyXG4gICAgICBsZXQgZGF0ZVNlcGFyYXRlZDogc3RyaW5nW10gPSBkYXRlQW5kVGltZVswXS5zcGxpdChkYXRlU2VwYXJhdG9yKTtcclxuXHJcbiAgICAgIGlmIChkYXRlU2VwYXJhdGVkLmxlbmd0aCAhPT0gMykge1xyXG4gICAgICAgIHJldHVybjtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKGRhdGVTZXBhcmF0ZWRbMl0ubGVuZ3RoID4gMikge1xyXG4gICAgICAgIGRhdGVTZXBhcmF0ZWRbMl0gPSBgJHtkYXRlU2VwYXJhdGVkWzJdLmNoYXJBdCgwKX0ke2RhdGVTZXBhcmF0ZWRbMl0uY2hhckF0KDEpfWAudHJpbSgpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB1c0RhdGUgPSBgJHtkYXRlU2VwYXJhdGVkWzFdfS8ke2RhdGVTZXBhcmF0ZWRbMF19LyR7ZGF0ZVNlcGFyYXRlZFsyXX1gXHJcbiAgICB9XHJcblxyXG4gICAgaWYgKGRhdGVBbmRUaW1lLmxlbmd0aCA9PT0gMikge1xyXG5cclxuICAgICAgdXNEYXRlICs9IGAgJHtkYXRlQW5kVGltZVsxXX1gO1xyXG4gICAgfVxyXG5cclxuICAgIGxldCBleHBlY3RlZERhdGU6IG51bWJlciA9IERhdGUucGFyc2UodXNEYXRlKTtcclxuXHJcbiAgICBpZiAoZXhwZWN0ZWREYXRlICE9PSBudWxsIHx8IGV4cGVjdGVkRGF0ZSA8IDApIHtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBuZXcgRGF0ZShleHBlY3RlZERhdGUpO1xyXG4gIH1cclxuXHJcbiAgLy8gT2J0w6ltIGEgRGF0YSBsb2NhbFxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZUxvY2FsVGltZShkYXRlOiBEYXRlKTogRGF0ZSB7XHJcbiAgICByZXR1cm4gKG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpIC0gZGF0ZS5nZXRUaW1lem9uZU9mZnNldCgpICogNjAwMDApKTtcclxuICB9XHJcblxyXG4gIC8vIE9idMOpbSBhIERhdGEgbG9jYWwgbm8gUGFkcsOjbyBJc29cclxuICBwdWJsaWMgc3RhdGljIGdldERhdGVMb2NhbFRpbWVJU08oZGF0ZTogRGF0ZSk6IHN0cmluZyB7XHJcbiAgICByZXR1cm4gKHRoaXMuZ2V0RGF0ZUxvY2FsVGltZShkYXRlKS50b0lTT1N0cmluZygpLnJlcGxhY2UoJy4wMDBaJywgJycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZVBpY2tlckRhdGUoc3RyOiBTdHJpbmcpOiBEYXRlIHtcclxuICAgIGNvbnN0IFtkYXRlQ29tcG9uZW50cywgdGltZUNvbXBvbmVudHNdID0gc3RyLnNwbGl0KCdUJylcclxuICAgIGNvbnN0IFthbm8sIG1lcywgZGlhXSA9IGRhdGVDb21wb25lbnRzLnNwbGl0KCctJyk7XHJcbiAgICBjb25zdCBbaG9yYSwgbWludXRvLCBzZWd1bmRvXSA9IHRpbWVDb21wb25lbnRzLnNwbGl0KCc6Jyk7XHJcbiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoTnVtYmVyKGFubyksIE51bWJlcihtZXMpLCBOdW1iZXIoZGlhKSlcclxuXHJcbiAgICByZXR1cm4gZGF0ZVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBBZGljaW9uYURpYXMoZGF0YTogRGF0ZSwgZGF5czogbnVtYmVyKTogRGF0ZSB7XHJcbiAgICBjb25zdCBmaW5kID0gbmV3IERhdGUoTnVtYmVyKGRhdGEpKVxyXG5cclxuICAgIGZpbmQuc2V0RGF0ZShkYXRhLmdldERhdGUoKSArIGRheXMpXHJcblxyXG4gICAgcmV0dXJuIGZpbmRcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRGlmZXJlbmNhRGlhcyhkYXRhSW5pY2lhbDogRGF0ZSwgZGF0YUZpbmFsOiBEYXRlKTogbnVtYmVyIHtcclxuICAgIHZhciBUaW1lID0gZGF0YUZpbmFsLmdldFRpbWUoKSAtIGRhdGFJbmljaWFsLmdldFRpbWUoKTtcclxuXHJcbiAgICByZXR1cm4gVGltZSAvICgxMDAwICogMzYwMCAqIDI0KTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgRGlmZXJlbmNhTWVzZXMoZGF0YUluaWNpYWw6IERhdGUsIGRhdGFGaW5hbDogRGF0ZSk6IG51bWJlciB7XHJcbiAgICB2YXIgbWVzZXMgPSAoZGF0YUZpbmFsLmdldEZ1bGxZZWFyKCkgLSBkYXRhSW5pY2lhbC5nZXRGdWxsWWVhcigpKSAqIDEyO1xyXG4gICAgbWVzZXMgLT0gZGF0YUluaWNpYWwuZ2V0TW9udGgoKTtcclxuICAgIG1lc2VzICs9IGRhdGFGaW5hbC5nZXRNb250aCgpO1xyXG5cclxuICAgIHJldHVybiBtZXNlcyA8PSAwID8gMCA6IG1lc2VzO1xyXG4gIH1cclxuXHJcblxyXG4gIC8vT2J0w6ltIGEgRGF0YSBVVEMgY29tIGhvcmEgemVyYWRhXHJcbiAgcHVibGljIHN0YXRpYyBnZXREYXRlVVRDKGRhdGU6IERhdGUpOiBEYXRlIHtcclxuICAgIC8vY29kaWdvIG9yaWdpbmFsXHJcbiAgICAvL3JldHVybiBuZXcgRGF0ZShkYXRlLmdldFRpbWUoKSArIChkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCkgKiA2MDAwMCkpO1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIDAsIDAsIDApO1xyXG4gICAgfVxyXG4gICAgY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgIC8vUXVhbmRvIGRhdGUgY2hlZ2EgbmVzdGUgZm9ybWF0bzogMjAyMi0wNi0yMFQwMDowMDowMFxyXG4gICAgICAvL3RlbnRvIHBlZ2FyIGFuby9tZXMvZGlhIGRpcmV0byBcclxuICAgICAgLy9EYXRlKER0SW5pRmVyLmdldFVUQ0Z1bGxZZWFyKCksIER0SW5pRmVyLmdldFVUQ01vbnRoKCksIER0SW5pRmVyLmdldFVUQ0RhdGUoKSwgMCAsIDAgLCAwKTtcclxuICAgICAgLy9lIG7Do28gZnVuY2lvbmFcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKE51bWJlcihhbm8pLCBOdW1iZXIobWVzKSAtIDEsIE51bWJlcihkaWEpLCAwLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICByZXR1cm4gZGF0YVNhaWRhO1xyXG4gIH1cclxuXHJcbiAgLy9PYnTDqW0gYSBEYXRhIFVUQyBjb20gaG9yYSB6ZXJhZGFcclxuICBwdWJsaWMgc3RhdGljIGdldERhdGVkZE1NeXl5KGRhdGU6IERhdGUpOiBzdHJpbmcge1xyXG4gICAgLy9jb2RpZ28gb3JpZ2luYWxcclxuICAgIC8vcmV0dXJuIG5ldyBEYXRlKGRhdGUuZ2V0VGltZSgpICsgKGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKSAqIDYwMDAwKSk7XHJcbiAgICBsZXQgZGF0YVNhaWRhOiBEYXRlO1xyXG5cclxuICAgIHRyeSB7XHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKGRhdGUuZ2V0VVRDRnVsbFllYXIoKSwgZGF0ZS5nZXRVVENNb250aCgpLCBkYXRlLmdldFVUQ0RhdGUoKSwgMCwgMCwgMCk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9RdWFuZG8gZGF0ZSBjaGVnYSBuZXN0ZSBmb3JtYXRvOiAyMDIyLTA2LTIwVDAwOjAwOjAwXHJcbiAgICAgIC8vdGVudG8gcGVnYXIgYW5vL21lcy9kaWEgZGlyZXRvIFxyXG4gICAgICAvL0RhdGUoRHRJbmlGZXIuZ2V0VVRDRnVsbFllYXIoKSwgRHRJbmlGZXIuZ2V0VVRDTW9udGgoKSwgRHRJbmlGZXIuZ2V0VVRDRGF0ZSgpLCAwICwgMCAsIDApO1xyXG4gICAgICAvL2UgbsOjbyBmdW5jaW9uYVxyXG4gICAgICBjb25zdCBkaWE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoOCwgMTApO1xyXG4gICAgICBjb25zdCBtZXM6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgICAgIGNvbnN0IGFubzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KTtcclxuXHJcbiAgICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKE51bWJlcihhbm8pLCBOdW1iZXIobWVzKSAtIDEsIE51bWJlcihkaWEpLCAwLCAwLCAwKTtcclxuICAgIH1cclxuXHJcbiAgICBmdW5jdGlvbiBwYWQoczogYW55KSB7IHJldHVybiAocyA8IDEwKSA/ICcwJyArIHMgOiBzOyB9XHJcblxyXG4gICAgcmV0dXJuIFtwYWQoZGF0YVNhaWRhLmdldFVUQ0RhdGUoKSksIHBhZChkYXRhU2FpZGEuZ2V0VVRDTW9udGgoKSArIDEpLCBwYWQoZGF0YVNhaWRhLmdldFVUQ0Z1bGxZZWFyKCkpXS5qb2luKCcvJyk7XHJcbiAgfVxyXG5cclxuICAvL09idMOpbSBhIERhdGEgVVRDIGNvbSBhIGhvcmFcclxuICBwdWJsaWMgc3RhdGljIGdldERhdGVkZE1NeXl5eUhobW1zcyhkYXRlOiBEYXRlKTogc3RyaW5nIHtcclxuICAgIGxldCBkYXRhU2FpZGE6IERhdGU7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgZGF0YVNhaWRhID0gbmV3IERhdGUoZGF0ZS5nZXRVVENGdWxsWWVhcigpLCBkYXRlLmdldFVUQ01vbnRoKCksIGRhdGUuZ2V0VVRDRGF0ZSgpLCBkYXRlLmdldEhvdXJzKCksIGRhdGUuZ2V0TWludXRlcygpLCBkYXRlLmdldFNlY29uZHMoKSk7XHJcbiAgICB9XHJcbiAgICBjYXRjaCAoZXJyb3IpIHtcclxuICAgICAgLy9RdWFuZG8gZGF0ZSBjaGVnYSBuZXN0ZSBmb3JtYXRvOiAyMDIyLTA2LTIwVDAwOjAwOjAwXHJcbiAgICAgIC8vdGVudG8gcGVnYXIgYW5vL21lcy9kaWEgZGlyZXRvIFxyXG4gICAgICAvL0RhdGUoRHRJbmlGZXIuZ2V0VVRDRnVsbFllYXIoKSwgRHRJbmlGZXIuZ2V0VVRDTW9udGgoKSwgRHRJbmlGZXIuZ2V0VVRDRGF0ZSgpLCAwICwgMCAsIDApO1xyXG4gICAgICAvL2UgbsOjbyBmdW5jaW9uYVxyXG4gICAgICBjb25zdCBkaWE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoOCwgMTApO1xyXG4gICAgICBjb25zdCBtZXM6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoNSwgNyk7XHJcbiAgICAgIGNvbnN0IGFubzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygwLCA0KTtcclxuICAgICAgY29uc3QgaG9yYTogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxMSwgMTMpO1xyXG4gICAgICBjb25zdCBtaW51dG9zOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE0LCAxNik7XHJcbiAgICAgIGNvbnN0IHNlZ3VuZG9zOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE3LCAxOSk7XHJcblxyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShOdW1iZXIoYW5vKSwgTnVtYmVyKG1lcykgLSAxLCBOdW1iZXIoZGlhKSwgTnVtYmVyKGhvcmEpLCBOdW1iZXIobWludXRvcyksIE51bWJlcihzZWd1bmRvcykpO1xyXG4gICAgfVxyXG5cclxuICAgIGZ1bmN0aW9uIHBhZChzOiBhbnkpIHsgcmV0dXJuIChzIDwgMTApID8gJzAnICsgcyA6IHM7IH1cclxuXHJcbiAgICBsZXQgZGF0YUZvcm1hdGFkYTogc3RyaW5nID0gW3BhZChkYXRhU2FpZGEuZ2V0RGF0ZSgpKSwgcGFkKGRhdGFTYWlkYS5nZXRVVENNb250aCgpICsgMSksIHBhZChkYXRhU2FpZGEuZ2V0VVRDRnVsbFllYXIoKSldLmpvaW4oJy8nKTtcclxuXHJcbiAgICBkYXRhRm9ybWF0YWRhICs9IFwiIFwiO1xyXG4gICAgZGF0YUZvcm1hdGFkYSArPSBbcGFkKGRhdGFTYWlkYS5nZXRIb3VycygpKSwgcGFkKGRhdGFTYWlkYS5nZXRNaW51dGVzKCkpLCBwYWQoZGF0YVNhaWRhLmdldFNlY29uZHMoKSldLmpvaW4oJzonKTtcclxuXHJcbiAgICByZXR1cm4gZGF0YUZvcm1hdGFkYTtcclxuICB9XHJcblxyXG4gIHN0YXRpYyBVbHRpbW9EaWFNZXMoZGF0YTogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZSA9IHRoaXMuZ2V0RGF0ZVRpbWVVVEMoZGF0YSk7XHJcbiAgICAvLyBhZGljaW9uYSAxIG1lc1xyXG4gICAgZGF0YVNhaWRhLnNldE1vbnRoKGRhdGFTYWlkYS5nZXRVVENNb250aCgpICsgMSk7XHJcbiAgICAvL1Bvc2ljaW9uYSBubyBkaWEgMDEgZG8gbWVzIGFkaWNpb25hZG9cclxuICAgIGRhdGFTYWlkYSA9IG5ldyBEYXRlKGRhdGFTYWlkYS5nZXRVVENGdWxsWWVhcigpLCBkYXRhU2FpZGEuZ2V0VVRDTW9udGgoKSwgMSwgMCwgMCwgMCk7XHJcbiAgICAvLyBzdWJ0cmFpIDEgZGlhIHBhcmEgaXIgcGFyYSBvIHVsdGltbyBkaWEgZG8gbWVzXHJcbiAgICBkYXRhU2FpZGEuc2V0RGF0ZShkYXRhU2FpZGEuZ2V0RGF0ZSgpIC0gMSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGFTYWlkYTtcclxuICB9XHJcblxyXG4gIC8vT2J0w6ltIGEgRGF0YS9ob3JhIFVUQ1xyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZVRpbWVVVEMoZGF0ZTogRGF0ZSk6IERhdGUge1xyXG4gICAgbGV0IGRhdGFTYWlkYTogRGF0ZTtcclxuXHJcbiAgICB0cnkge1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShkYXRlLmdldFVUQ0Z1bGxZZWFyKCksIGRhdGUuZ2V0VVRDTW9udGgoKSwgZGF0ZS5nZXRVVENEYXRlKCksIGRhdGUuZ2V0SG91cnMoKSwgZGF0ZS5nZXRNaW51dGVzKCksIGRhdGUuZ2V0U2Vjb25kcygpKTtcclxuICAgIH1cclxuICAgIGNhdGNoIChlcnJvcikge1xyXG4gICAgICAvL1F1YW5kbyBkYXRlIGNoZWdhIG5lc3RlIGZvcm1hdG86IDIwMjItMDYtMjBUMTE6MTI6MTNcclxuICAgICAgY29uc3QgZGlhOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDgsIDEwKTtcclxuICAgICAgY29uc3QgbWVzOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDUsIDcpO1xyXG4gICAgICBjb25zdCBhbm86IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMCwgNCk7XHJcbiAgICAgIGNvbnN0IGhvcmE6IHN0cmluZyA9IGRhdGUudG9TdHJpbmcoKS5zdWJzdHJpbmcoMTEsIDEzKTtcclxuICAgICAgY29uc3QgbWluOiBzdHJpbmcgPSBkYXRlLnRvU3RyaW5nKCkuc3Vic3RyaW5nKDE0LCAxNik7XHJcbiAgICAgIGNvbnN0IHNlZzogc3RyaW5nID0gZGF0ZS50b1N0cmluZygpLnN1YnN0cmluZygxNywgMTkpO1xyXG4gICAgICBkYXRhU2FpZGEgPSBuZXcgRGF0ZShOdW1iZXIoYW5vKSwgTnVtYmVyKG1lcykgLSAxLCBOdW1iZXIoZGlhKSwgTnVtYmVyKGhvcmEpLCBOdW1iZXIobWluKSwgTnVtYmVyKHNlZykpO1xyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBkYXRhU2FpZGE7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGNvbXBhcmVFcXVhbERhdGVzKGRhdGUxOiBEYXRlLCBkYXRlMjogRGF0ZSk6IGJvb2xlYW4ge1xyXG4gICAgbGV0IHN0ckRhdGUxOiBzdHJpbmcgPSBVdGlscy5nZXREYXRlZGRNTXl5eShkYXRlMSk7XHJcbiAgICBsZXQgc3RyRGF0ZTI6IHN0cmluZyA9IFV0aWxzLmdldERhdGVkZE1NeXl5KGRhdGUyKTtcclxuXHJcbiAgICBpZiAoc3RyRGF0ZTEgPT09IHN0ckRhdGUyKSB7XHJcbiAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBjb252ZXJ0TU1ZWVlZVG9EYXRlKHZhbHVlOiBzdHJpbmcpOiBEYXRlIHtcclxuICAgIHZhbHVlID0gdmFsdWUucmVwbGFjZSgnLycsICcnKTtcclxuXHJcbiAgICBsZXQgbW9udGg6IG51bWJlciA9IE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoMCwgMikpO1xyXG4gICAgbGV0IHllYXI6IG51bWJlciA9IE51bWJlcih2YWx1ZS5zdWJzdHJpbmcoMiwgNikpO1xyXG5cclxuICAgIC8vRGltaW51aSAxIHBvaXMgbm8gYW5ndWxhciBleGlzdGUgdW0gw61uZGljZSBkbyBtw6pzIHF1ZSBuw6NvIMOpIGlndWFsIGFvIG3DqnMuXHJcbiAgICBtb250aCA9IG1vbnRoIC0gMTtcclxuXHJcbiAgICByZXR1cm4gbmV3IERhdGUoeWVhciwgbW9udGgsIDEpO1xyXG4gIH1cclxuXHJcbiAgcHVibGljIHN0YXRpYyBnZXROdWxsRGF0ZSgpOiBEYXRlIHtcclxuICAgIHJldHVybiBuZXcgRGF0ZSgxOTAwLCAwLCAxLCAwLCAwLCAwKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0RGF0ZVdlYlNlcnZpY2VGb3JtYXQodmFsdWU6IERhdGUpOiBzdHJpbmcge1xyXG5cclxuICAgIGlmICh2YWx1ZS50b1N0cmluZygpID09ICcnKSB7XHJcbiAgICAgIHJldHVybiAnMTkwMC0wMS0wMSc7XHJcbiAgICB9XHJcblxyXG4gICAgbGV0IGRhdGEgPSBVdGlscy5nZXREYXRlZGRNTXl5eSh2YWx1ZSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGEuc3Vic3RyaW5nKDYsIDEwKSArICctJyArIGRhdGEuc3Vic3RyaW5nKDMsIDUpICsgJy0nICsgZGF0YS5zdWJzdHJpbmcoMCwgMik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGdldERhdGVUaW1lV2ViU2VydmljZUZvcm1hdCh2YWx1ZTogRGF0ZSk6IHN0cmluZyB7XHJcblxyXG4gICAgaWYgKHZhbHVlLnRvU3RyaW5nKCkgPT0gJycgfHwgVXRpbHMuZ2V0RGF0ZWRkTU15eXkodmFsdWUpID09IFV0aWxzLmdldERhdGVkZE1NeXl5KHRoaXMuZ2V0TnVsbERhdGUoKSkpIHtcclxuICAgICAgcmV0dXJuICcxOTAwLTAxLTAxVDAwOjAwOjAwJztcclxuICAgIH1cclxuXHJcbiAgICBsZXQgZGF0YSA9IHRoaXMuZ2V0RGF0ZWRkTU15eXl5SGhtbXNzKHZhbHVlKTtcclxuXHJcbiAgICBsZXQgZGF0YUZvcm1hdGFkYTogc3RyaW5nID0gZGF0YS5zdWJzdHJpbmcoNiwgMTApICsgJy0nICsgZGF0YS5zdWJzdHJpbmcoMywgNSkgKyAnLScgKyBkYXRhLnN1YnN0cmluZygwLCAyKTtcclxuICAgIGRhdGFGb3JtYXRhZGEgPSBkYXRhRm9ybWF0YWRhICsgJ1QnO1xyXG4gICAgZGF0YUZvcm1hdGFkYSA9IGRhdGFGb3JtYXRhZGEgKyBkYXRhLnN1YnN0cmluZygxMSwgMTMpICsgJzonICsgZGF0YS5zdWJzdHJpbmcoMTQsIDE2KSArICc6JyArIGRhdGEuc3Vic3RyaW5nKDE3LCAxOSk7XHJcblxyXG4gICAgcmV0dXJuIGRhdGFGb3JtYXRhZGE7XHJcbiAgfVxyXG5cclxuICAvL1RyYW5zZm9ybWEgYSBzdHJpbmcgQmFzZTY0IG51bSBhcnJheSBkZSBieXRlcyBlIGZheiBvIGRvd25sb2FkIGRvIGFycXVpdm8uXHJcbiAgcHVibGljIHN0YXRpYyBkb3dubG9hZEZpbGVCYXNlNjQoZmxlTmFtZTogc3RyaW5nLCBmaWxlOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGJ5dGVTdHJpbmcgPSB3aW5kb3cuYXRvYihmaWxlKTtcclxuICAgIGNvbnN0IGFycmF5QnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVTdHJpbmcubGVuZ3RoKTtcclxuICAgIGNvbnN0IGludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGJ5dGVTdHJpbmcubGVuZ3RoOyBpKyspIHtcclxuICAgICAgaW50OEFycmF5W2ldID0gYnl0ZVN0cmluZy5jaGFyQ29kZUF0KGkpO1xyXG4gICAgfVxyXG5cclxuICAgIGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbaW50OEFycmF5XSk7XHJcblxyXG4gICAgY29uc3QgdXJsID0gd2luZG93LlVSTC5jcmVhdGVPYmplY3RVUkwoYmxvYik7XHJcblxyXG4gICAgLy9BYmlvXHJcbiAgICAvL08gd2luZG93Lm9wZW4gZm9pIGNvbWVudGFkbyBwb3JxdWUgbm8gZG93bmxvYWQgZG9zIGFycXVpdm9zIGRpZ2l0YWlzIGFicmlhIHVtYSBqYW5lbGEgY29tIG8gYmxvYiBkbyBhcnF1aXZvLiBcclxuICAgIC8vQ29tZW50YXIgbsOjbyBhZmV0b3UgbyBkb3dubG9hZCBkbyBjb250cmEtY2hlcXVlLiAgXHJcbiAgICAvL3dpbmRvdy5vcGVuKHVybCk7XHJcbiAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtcclxuXHJcbiAgICBhLmhyZWYgPSB1cmw7XHJcbiAgICBhLnRhcmdldCA9ICdfYmxhbmsnO1xyXG4gICAgYS5kb3dubG9hZCA9IGZsZU5hbWU7XHJcblxyXG4gICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhKTtcclxuXHJcbiAgICBhLmNsaWNrKCk7XHJcbiAgfVxyXG5cclxuICAvKipcclxuICAqIEFicmUgbyBwb3B1cCBkbyBuYXZlZ2Fkb3IgcGFyYSBiYWl4YXIgdW0gYXJxdWl2byBxdWUgdmVpbyBkZSB1bSBibG9iLlxyXG4gICogXHJcbiAgKiBAcGFyYW0gYmxvYiBDb250ZcO6ZG8gZG8gYXJxdWl2byBiaW7DoXJpbyBhIHNlciBiYWl4YWRvLlxyXG4gICogQHBhcmFtIGZpbGVOYW1lIE5vbWUgZG8gYXJxdWl2byBhIHNlciBzYWx2by5cclxuICAqL1xyXG4gIHB1YmxpYyBzdGF0aWMgZG93bmxvYWRGaWxlKGJsb2I6IEJsb2IsIGZpbGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcclxuICAgIGNvbnN0IGFuY2hvciA9IHdpbmRvdy5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7XHJcblxyXG4gICAgYW5jaG9yLmhyZWYgPSB3aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtcclxuICAgIGFuY2hvci5kb3dubG9hZCA9IGZpbGVOYW1lO1xyXG5cclxuICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYW5jaG9yKTtcclxuXHJcbiAgICBhbmNob3IuY2xpY2soKTtcclxuXHJcbiAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGFuY2hvcik7XHJcbiAgICB3aW5kb3cuVVJMLnJldm9rZU9iamVjdFVSTChhbmNob3IuaHJlZik7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgc3RhdGljIGI2NERlY29kZVVuaWNvZGUoc3RyOiBzdHJpbmcpOiBzdHJpbmcge1xyXG4gICAgLy8gR29pbmcgYmFja3dhcmRzOiBmcm9tIGJ5dGVzdHJlYW0sIHRvIHBlcmNlbnQtZW5jb2RpbmcsIHRvIG9yaWdpbmFsIHN0cmluZy5cclxuICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQoYXRvYihzdHIpLnNwbGl0KCcnKS5tYXAoYyA9PiB7XHJcbiAgICAgIHJldHVybiAnJScgKyAoJzAwJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikpLnNsaWNlKC0yKTtcclxuICAgIH0pLmpvaW4oJycpKTtcclxuICB9XHJcblxyXG4gIHB1YmxpYyBzdGF0aWMgYjY0RW5jb2RlVW5pY29kZShzdHI6IHN0cmluZykge1xyXG4gICAgLy8gZmlyc3Qgd2UgdXNlIGVuY29kZVVSSUNvbXBvbmVudCB0byBnZXQgcGVyY2VudC1lbmNvZGVkIFVURi04LFxyXG4gICAgLy8gdGhlbiB3ZSBjb252ZXJ0IHRoZSBwZXJjZW50IGVuY29kaW5ncyBpbnRvIHJhdyBieXRlcyB3aGljaFxyXG4gICAgLy8gY2FuIGJlIGZlZCBpbnRvIGJ0b2EuXHJcbiAgICByZXR1cm4gYnRvYShlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC8lKFswLTlBLUZdezJ9KS9nLFxyXG4gICAgICAobWF0Y2gsIHAxKSA9PiB7XHJcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKFwiMHhcIiArIHAxKSBhcyBhbnkpO1xyXG4gICAgICB9KSk7XHJcbiAgfVxyXG5cclxuICAvL0xhcmd1cmEgYSBwYXJ0aXIgZGUgb25kZSByZW1vbnRhIG8gbmd4X2RhdGF0YWJsZSBwYXJhIG1vYmlsZVxyXG4gIHB1YmxpYyBzdGF0aWMgZ2V0SXNNb2JpbGUoKSB7XHJcbiAgICBjb25zdCB3aWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCB8fCBkb2N1bWVudC5ib2R5LmNsaWVudFdpZHRoO1xyXG4gICAgcmV0dXJuIHdpZHRoIDwgNzY4O1xyXG4gIH1cclxuXHJcbn1cclxuIl19
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Directive } from '@angular/core';
|
|
2
|
+
import { NG_VALIDATORS } from '@angular/forms';
|
|
3
|
+
import { CpfCnpjValidator } from './cpf-cnpj.validator';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class CpfCnpjValidatorDirective extends CpfCnpjValidator {
|
|
6
|
+
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CpfCnpjValidatorDirective, deps: null, target: i0.ɵɵFactoryTarget.Directive }); }
|
|
7
|
+
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "16.2.2", type: CpfCnpjValidatorDirective, selector: "[appCpfCnpjValidate][ngModel]", providers: [{
|
|
8
|
+
provide: NG_VALIDATORS,
|
|
9
|
+
useExisting: CpfCnpjValidatorDirective,
|
|
10
|
+
multi: true
|
|
11
|
+
}], usesInheritance: true, ngImport: i0 }); }
|
|
12
|
+
}
|
|
13
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.2", ngImport: i0, type: CpfCnpjValidatorDirective, decorators: [{
|
|
14
|
+
type: Directive,
|
|
15
|
+
args: [{
|
|
16
|
+
selector: '[appCpfCnpjValidate][ngModel]',
|
|
17
|
+
providers: [{
|
|
18
|
+
provide: NG_VALIDATORS,
|
|
19
|
+
useExisting: CpfCnpjValidatorDirective,
|
|
20
|
+
multi: true
|
|
21
|
+
}]
|
|
22
|
+
}]
|
|
23
|
+
}] });
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3BmLWNucGoudmFsaWRhdG9yLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL25neC1zcC1pbmZyYS9zcmMvbGliL3ZhbGlkYXRvcnMvY3BmLWNucGoudmFsaWRhdG9yLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzFDLE9BQU8sRUFBYSxhQUFhLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7QUFXeEQsTUFBTSxPQUFPLHlCQUEwQixTQUFRLGdCQUFnQjs4R0FBbEQseUJBQXlCO2tHQUF6Qix5QkFBeUIsd0RBTnZCLENBQUM7Z0JBQ1IsT0FBTyxFQUFFLGFBQWE7Z0JBQ3RCLFdBQVcsRUFBRSx5QkFBeUI7Z0JBQ3RDLEtBQUssRUFBRSxJQUFJO2FBQ2QsQ0FBQzs7MkZBRU8seUJBQXlCO2tCQVJyQyxTQUFTO21CQUFDO29CQUNQLFFBQVEsRUFBRSwrQkFBK0I7b0JBQ3pDLFNBQVMsRUFBRSxDQUFDOzRCQUNSLE9BQU8sRUFBRSxhQUFhOzRCQUN0QixXQUFXLDJCQUEyQjs0QkFDdEMsS0FBSyxFQUFFLElBQUk7eUJBQ2QsQ0FBQztpQkFDTCIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IERpcmVjdGl2ZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xyXG5pbXBvcnQgeyBWYWxpZGF0b3IsIE5HX1ZBTElEQVRPUlMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XHJcbmltcG9ydCB7IENwZkNucGpWYWxpZGF0b3IgfSBmcm9tICcuL2NwZi1jbnBqLnZhbGlkYXRvcic7XHJcblxyXG5cclxuQERpcmVjdGl2ZSh7XHJcbiAgICBzZWxlY3RvcjogJ1thcHBDcGZDbnBqVmFsaWRhdGVdW25nTW9kZWxdJyxcclxuICAgIHByb3ZpZGVyczogW3tcclxuICAgICAgICBwcm92aWRlOiBOR19WQUxJREFUT1JTLFxyXG4gICAgICAgIHVzZUV4aXN0aW5nOiBDcGZDbnBqVmFsaWRhdG9yRGlyZWN0aXZlLFxyXG4gICAgICAgIG11bHRpOiB0cnVlXHJcbiAgICB9XVxyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3BmQ25walZhbGlkYXRvckRpcmVjdGl2ZSBleHRlbmRzIENwZkNucGpWYWxpZGF0b3IgaW1wbGVtZW50cyBWYWxpZGF0b3IgeyB9XHJcbiJdfQ==
|